امنیت

ضعف امنیتی در سایت دیجی‌کالا برای پیش‌بینی نتایج یورو ۲۰۱۶

چند سالیه که باب شده همه رسانه‌های تصویری و اینترنتی برای مسابقات ورزشی، بخش شرط بندی و پیش‌بینی نتایج رو می‌گذارند. امسال فروشگاه اینترنتی دیجی‌کالا هم سایتی برای پیش‌بینی نتایج یورو ۲۰۱۶ رونمایی کرد. ده روز پیش بود که یکی از دوستان در توییتر به برخی پیش‌بینی‌ها مشکوک شد و پیشنهاد داد سایت رو بررسی کنم.

پیشنهاد بررسی وجود ضعف امنیتی

در همون بررسی اولیه متوجه شدم که اطلاعات ارسالی کاربر به سرور بیش از حد نیازه و در هر پیش‌بینی، علاوه بر شناسه بازی و کد پیش‌بینی (برنده، مساوی و یا بازنده)، ایمیل کاربر و کد کاربر هم ارسال می‌شه. دریافت إیش از حد اطلاعات از کاربر چند مساله ایجاد می‌کنه.

ضعف امنیتی در سایت دیجی‌کالا برای پیش‌بینی نتایج یورو ۲۰۱۶

ضعف امنیتی اول: ورودی‌های خطرناک

یکی از اصول اولیه در حفظ امنیت اینه که به ورودی‌ها اعتماد نکنیم. درسته که قراره کد بازی یک عدد دو رقمی باشه، اما اگر کاربر یک دستور سمت سرور فرستاد که همه اطلاعات رو نشونم بده چی؟ سرور باید دستور رو اجرا کنه؟ اگر تمهیدی براش نیندیشیده باشیم، این اتفاق می‌افته. این مورد رو روی ورودی‌های دیجی‌کالا تست کردم و شواهد نشون می‌ده که اعتبارسنجی، پاک‌سازی و حذف کاراکترهای مشکوک به درستی انجام نمی‌شه.

در فیلم زیر می‌بینیند که به صورت دستی پیش‌بینی بازی شماره ۲۲ رو سمت سرور فرستادم که نپذیرفت چون قبلا این پیش‌بینی انجام شده بود. پیش‌بینی بازی ۲۳ رو پذیرفت و پیش‌بینی بازی ۲۴ ضرب در ۱ رو هم پذیرفت ولی قاعدتا نباید این اتفاق می‌افتاد. چون برای عمل ریاضی + خطا می‌داد پس پاکسازی انجام نمی‌شه.

همچنین کاراکتر ‘ هم برای شماره بازی بعد در کنار عدد ۱۹ ارسال کردم و همونطور که در تصویر می‌بینید به جای حذف کاراکتری که بدیهیست نباید توی این ورودی ارسال بشه، برای اجرا به کدهای php سپرده می‌شه. پیام خطای ناشی از این مشکل رو می‌بینیم.

من بررسی این مشکل رو ادامه ندادم و برای تزریق کد سمت سرور اقدام نکردم و نمی‌تونم با اطمینان بگم این ضعف امنیتی در بررسی ورود‌ی‌ها، منجر به نفوذ و یا تغییر پایگاه داده می‌شه یا نه. کسی که قصد تخریب داشته باشه، از این مرحله کارش شروع می‌شه.

ضعف امنیتی دوم: مشکل در سطح دسترسی

پیش از شروع کار برنامه‌نویسی، باید ساختار کلی برنامه تعیین بشه و یکی از مهمترین نکته‌ها، تعیین سطح دسترسی کاربرها و کنترل درخواست‌ها بر این اساسه. وقتی نوع ارسال پیش‌بینی‌ها به سرور رو مشاهده کردم، متوجه شدم علاوه بر استفاده از کوکی‌ها که نشون‌دهنده ورود موفق یک کاربره، اطلاعات دیگه‌ای مرتبط به کاربر ارسال می‌شه از جمله ایمیل و کد کاربری.

به نظرم رسید که این ارسال دوباره کد کاربر می‌تونه بین مسیر دستکاری بشه. درسته که ما توی فرم صفحه، کد کاربری که لاگین کرده رو قرار دادیم اما همونطور که گفتم، هیچ‌وقت نباید به اطلاعاتی که از سمت کاربر دریافت می‌کنیم اعتماد کنیم. از دوست خوبم بنیامین، نویسنده وبلاگ سیانوژن، خواستم که دو تا اکانت بسازه تا بتونم این مورد رو چک کنم. متاسفانه حدسی که می‌زدم درست بود و اطلاعات ارسالی نه از نظر سطح دسترسی چک می‌شد و نه از نظر زمانی کنترل می‌شد.

در فیلم زیر خواهید دید که ابتدا درخواست ارسالی برای پیش‌بینی نتیجه بازی آلبانی و رومانی رو به دست میارم و ذخیره می‌کنم. بعد با اکانت بنیامین وارد می‌شم، یک پیش‌بینی ارسال می‌کنم و کوکی‌های این نشست رو ذخیره می‌کنم. برای تست ابتدا با کوکی‌ها و ایمیل بنیامین و کد کاربری بنیامین، پیش‌بینی بازی فرانسه و سوییس رو ارسال کردم. در فیلم خواهید دید که پیام failed دریافت کردم چون بنیامین قبلا این بازی رو پیش‌بینی کرده بود. سپس کد کاربری خودم رو در درخواست ارسالی گذاشتم و در واقع با اکانت بنیامین برای خودم یک بازی رو پیش‌بینی کردم و با موفقیت انجام شد. برای اطمینان به اکانت خودم لاگین کردم و خواهید دید که پیش‌بینی که بنیامین برای من انجام داده بود، به اکانت اضافه شده.

تا اینجا دیدیم که شناسه کاربری به درستی چک نمی‌شه و می‌تونیم هر مقدار غیر منطقی (مقدار مربوط به اکانت دیگران) رو ثبت کنیم. اینجوری هر کسی می‌تونه از پیش همه بازی‌های بعدی رو برای همه کاربرها پیش‌بینی کنه.

ورودی دیگه، شناسه بازی است. منطق پیش‌بینی می‌گه اکانت جدید نباید بتونه بازیهای قبلی رو پیش‌بینی کنه. من درخواستی رو برای بازی شماره یک ارسال کردم و در فیلم می‌بینید که پذیرفته می‌شه و یک بازی قدیمی به لیست پیش‌بینی‌های من اضافه شد.

نکته:

این فیلم‌ها بلافاصله بعد ضبط شدن برای دیجی‌کالا ارسال شد تا مشکل رو برطرف کنند. ده روز هم فاصله گذاشتم برای عمومی کردن ضعف امنیتی تا کاربران به خطر نیافتند. همچنین تست‌ها رو با اکانت شخصی انجام دادم که اکانت کسی آسیب نبینه. هیچگونه تست مخربی رو روی سایت فعال انجام ندادم و با توجه به مشکلاتی که می‌بینم، به دیجی‌کالا توصیه می‌کنم تست نفوذ کامل روی نسخه تست web application انجام بدن.

می‌شه حدس زد که کار با عجله طراحی اجرا شده. احتمالا برنامه‌نویس‌های این کار، زمان زیادی نداشتند که این مشکلات رو توی خروجی نهایی برطرف کنند. پیشنهاد می‌کنم تیم برنامه‌نویسی، مخصوصا در شرایطی که زمانی کمی دارند، تست رو از مراحل ابتدایی توی پروژه در نظر بگیرند.

خوشبختانه تیم دیجی‌کالا بلافاصله بعد از اعلام من، اصلاح رو شروع کردند. بعد از ایمیلی که برای دیجی‌کالا فرستادم، دیدم دوست دیگری هم مشکلی رو در توییتر اعلام کرده بود. با توجه به عمومی شدن مشکلات این سایت، امیدوار بودم در این فاصله زمانی اطلاعیه برای کاربران ارسال بشه که من تا زمان نوشتن این پست، خبری از دیجی‌کالا ندیدم. گویا روزهای گذشته هنگام ورود به سایت، این مورد به کاربران اعلام شده بود.

استاندارد
امنیت

ضعف امنیتی نرم‌افزار پیام‌رسان تلگرام

نرم‌افزار تلگرام در یکی از پر سر و صداترین کارهای اخیر، مدعی شد امنیت این اپلیکیشن پیام‌رسان به حدی بالاست که اگر کسی آدرس ایمیل رمزگذاری شده در این اپلیکیشن رو کشف کنه، برنده ۲۰۰ هزار دلار می‌شه. این ادعا ضمن اینکه چالش جالبی برای کارشناسای امنیتی بود، کاربرها رو به خطا می‌انداخت چرا که رمز کردن یک متن درون اپلیکیشن یه چیزه و پیاده‌سازی رمزگذاری در چت، یه چیز دیگه.

در ادامه بررسی کارشناسان امنیتی زیپریوم رو میارم.

بعد از اعلام این مناقصه، تصمیم گرفتم بررسی دقیق‌تری روی اپلیکیشن داشته باشم. خواستم ببینم آیا متن پیام‌های رمزگذاری شده، قابل خوندن است یا نه. این تست روی اندروید نسخه ۴.۴.۲ انجام شده است.

تلگرام ادعا می‌کنه اپلیکیشنی با تمرکز روی امنیته و کاربرانش می‌تونن چت‌های رمزگذاری شده شخصی و کاری داشته‌باشند. کارشناسان زیپریوم ثابت کردند که این ادعا غلط بوده و ۵۰ میلیون کاربر تلگرام در خطر هستند.

مسابقه رمزگذاری قبلی تلگرام، شکستن پروتکل رو فقط در زمان رمزگذاری و ارسال، به رسمیت می‌شناخت. به دو دلیل این مورد ایده خوبی نیست:

۱. در دنیای واقعی، هکرها کاری به قوانین ندارند.

۲. فرض گرفته بود که هکرها در میانه راه سعی در شکستن رمزگذاری خواهند داشت در حالیکه می‌شه در سایر پروتکل‌ها ضعف‌هایی یافت که سود بیشتری داشته باشه (برای مثال ضعف امنیتی GoToFail برای دور زدن رمزگذاری SSL در iOS)

در مسابقه رمزگذاری جدید، تلگرام اعلام کرده: “… این بار شرکت‌کننده‌ها نه تنها می‌توانند ترافیک را بررسی کنند، بلکه می‌توانند خود را جای سرور تلگرام جا بزنند و از حمله‌های فعال استفاده کنند، که توانایی‌های آنها را افزایش می‌دهد.”

بنابراین من سعی نمی‌کنم رمزگذاری رو بشکنم بلکه سعی می‌کنم اون رو با یک حمله فعال در گوشی، دور بزنم. بهترین راه برای انجام این حمله، داشتن درک درستی از آناتومی حمله‌های سایبری و معماری ابزارهای همراهه. زمان زیادی طول نکشید تا تلگرام رو نصب کردم، متن پیام‌های عادی و رمزگذاری شده‌ای که ارسال کردم رو پیدا کردم و همچنین پایگاه داده اونها رو.

طبق گفته سایت تلگرام: “چت امن، یک پیام رمز شده نفر به نفر است که فقط شرکت‌کننده‌ها در این چت، کلید رمزگشایی را دارند. بنابراین هیچ شخص سومی، بدون دسترسی به یکی از دستگاه‌ها، به متن بدون رمز پیام‌ها دسترسی ندارد.” این گفته دو سوال به وجود میاره: اگر کاربر به دستگاه دسترسی نداشته باشه و یا یک هکر دستگاه رو هک کرده باشه، بازیابی متن پیام‌های رمزگذاری شده توسط تلگرام چقدر سخته؟ آیا متن پیام‌ها رو دستگاه رمزگذاری می‌شه و چگونه؟

راحت‌تره که یک ضعف امنیتی در دستگاه پیدا کنیم و با روش‌هایی مثل URL، PDF و یا MiTM و امثال اون، دستگاه رو هک کنیم. بعد دسترسی رو با استفاده از Kernel Exploit بالا ببریم و کنترل دستگاه رو به دست بگیریم.

اگر در بحث امنیت دستگاه‌های موبایل تازه‌کارید، مثال‌های زیر بهتون نشون می‌ده که یه نفر چطور می‌تونه از راه دور به یک دستگاه حمله کنه. این حمله‌ها برای سازمان‌های دولتی مانند NSA که منابع، پول و زمان کافی رو دراختیار دارند، بسیار راحته.

۱. ضعف امنیتی سمت کاربر: سواستفاده از کروم (https://docs.google.com/a/zimperium.com/document/d/1tHElG04AJR5OR2Ex-m_Jsmc8S5fAbRB3s4RmTG_PFnw/edit)

۲. سواستفاده از کرنل (https://www.towelroot.com/)

در ابتدا با استفاده از اپلیکیشن اندروید تلگرام، یک پیام رمزگذاری شده ایجاد کردم تا ببینم آیا جایی به صورت رمز نشده ذخیره می‌شه یا نه. فرض کردم که پیام‌ها در حافظه و یا حداقل در پایگاه داده داخلی، رمز شده‌اند. این فرض برای یک اپلیکیشن با نگرش امنیتی، چیز زیادی نیست.

secure-chat-1

اگر به عنوان حمله‌کننده از تصویر عکس بگیرید، به هر دو نفر در چت، اعلام می‌شه. بنابراین می‌شه فهمید که امنیت و حفظ حریم خصوصی برای تلگرام خیلی مهمه. با اینحال، فرض اینکه حمله کننده به جای کنترل کل دستگاه، از تصویر عکس می‌گیره، کمی خوش خیالانه است.

secure-chat-2

به تلگرام شانس دادم و اشتباهات رایج در اپلیکیشن‌هایی که اولویت امنیتی ندارند رو چک نکردم. یک حمله با استفاده از ضعف امنیتی سمت کاربر و یا یک اپلیکیشن و استفاده از Kernel Exploit رو شبیه‌سازی کردم (از CVE-2014-3153 استفاده کردم). راه‌های تمیزتری برای گرفتن پاسخ بود اما ترجیح دادم یک اثبات ایده (PoC) ارائه بدم. تلگرام امکان چت امن داره با یک قفل بالای تصویر که احساس امنیت می‌ده. از حافظه پروسس نسخه‌برداشتم و دنبال کلمه‌ای گشتم که در چت استفاده کرده بودم.

process

همونطور که می‌بینید کلمه‌های Woof، Text، Shlookido، Cookiedo، Tambal و NotSoEncryptedInMemory به صورت رمز نشده در حافظه دیده می‌شوند. هر حمله کننده‌ای که به دستگاه نفوذ کنه، بدون هیچ مشکلی، به متن پیام‌ها دسترسی خواهد داشت. پس چت امن تلگرام، به صورت متن واضح قابل خوندنه. این مساله باعث شد که به فکر بیافتم آیا راه ساده‌تری برای دسترسی به متن پیام‌ها وجود داره؟ وجود داشت.

برای تکمیل تحقیق، با استفاده از دسترسی روت که با کمک Kernel Exploit به دست آورده بودم، فایل‌های فلودر /data/data/org.telegram.messenger/ رو چک کرده و فایل Cache4.db رو در فولدر اپلیکیشن تلگرام پیدا کردم.

sqlite

فرض کردم که پیشوند enc در نام جدول‌های enc_chats و enc_tasks_v2 خلاصه encrypted (رمز شده) باشه پس فایل رو کش رفتم و بررسی کردم. فایل شامل کلیه چت‌های امن به صورت متن واضح بود.

unencrypt

یکی از امکانات جالب تلگرام، توانایی حذف متن پیام‌هاست. تلاش کردم که پیام‌های حذف شده توسط کاربر رو بازیابی کنم. برای اینکار حافظه و فایل cache4.db رو بررسی کردم.

از بخش تنظیمات، انتخاب کردم که پیام‌ها بعد از ۵ ثانیه حذف بشن. انتظار داشتم این اتفاق بیافته اما پیام‌ها حذف نشدن. به نظر می‌رسه که یک باگ باشه و نه مشکلی امنیتی. با استفاده از گزینه Delete پیام رو حذف کردم.

با بررسی فایل cache4.db اثری از پیام‌های حذف شده ندیدم. معمولا پیام‌های حذف شده، جذابیت بیشتری برای حمله‌کننده دارند. سپس حافظه رو بررسی کردم و متاسفانه پیام‌ها پس از حذف همچنان در حافظه قابل مشاهده بودند.

خط زمانی:
این مساله در تاریخ ۲۷ دی‌ماه ۱۳۹۳ کشف و روز بعد به تیم امنیتی تلگرام اطلاع‌رسانی شد.
طی ماه بعد و در ۳ تماس بعدی، پاسخی از تیم امنیتی تلگرام دریافت نشد.
در تاریخ ۳ اسفند ۱۳۹۳ این ضعف امنیتی، اعلام عمومی شد.

نتیجه:
تلگرام با هدف امکان حفظ حریم خصوصی و بدون هزینه برای کاربران فعالیت می‌کنه. توجه این اپلیکیشن به امنیت اطلاعات در حال انتقال و چشم‌پوشی از امنیت اطلاعات نگهداری شده در دستگاه، موجب به وجود آمدن این مشکل بوده است. نکته قابل تاسف نیز عدم پاسخگویی تیم امنیتی تلگرام به تماس‌های اعلام این ضعف بوده است.
در حقیقت، امنیت مورد ادعای تلگرام چیز بیشتری از اپلیکیشن‌ها و صفحه‌هایی که از SSL استفاده می‌کنند نیست. اگر از تلگرام برای افزایش امنیت و حفظ حریم خصوصی استفاده می‌کنید باید بدونید که در حال حاضر، هکرهای کار بلد می‌تونن پیام‌های شما رو بخونن و یا اگر توسط FBI دستگیر بشید، متن پیام‌های حذف شده شما قابل بازیابیه. پیشنهاد می‌کنم که از اپلیکیشن‌های امنیتی برای جلوگیری از حمله به دستگاه خود استفاده کنید.
برای امنیت بیشتر، تلگرام می‌بایست متن پیام‌ها در حافظه و فایل cache4.db را نیز رمزگذاری کند.

منبع:
http://blog.zimperium.com/telegram-hack/

استاندارد
امنیت

خبرهای داغ iOS7 و آیفون ۵s

ios7

هفته گذشته اپل و طرفدارای دو آتیشش روزای سختی رو گذروندند. انتشار نسخه ۷ سیستم عامل آی او اس و توزیع گوشی های جدید آیفون همه نگاه ها رو به سمت اپل برد و زمان زیادی طول نکشید تا تیترهای منفی در موردش کار بشه.

می گن هر شهرتی، شهرت خوبه. نظر شما چیه؟

اجازه بدید اتفاقای مهم هفته گذشته رو با هم مرور کنیم.

۲۷ شهریور: انتشار نسخه ۷ سیستم عامل اپل
دانلود گسترده این سیستم عامل باعث اختلال در اینترنت بعضی دانشگاه ها و مدارس شد

۲۹ شهریور: دورزدن لاک اسکرین
خوزه رودریگز راهی رو برای دور زدن لاک اسرکین و دسترسی به عکس ها، ایمیل و توییتر گوشی نشون داد. در پست دیگه ای در مودش نوشتم

۲۹ شریور: دور زدن سیستم تماس اضطراری
کرم داوود راهی رو نشون داد که می شد از گوشی قفل شده با هر شماره ای تماس گرفت

۳۱ شهریور: دور زدن اسکنر اثر انگشت در ۵s
گروه آلمانی Chaos Computing Club ادعا کرد که تونسته  Touch ID رو بشکنه و با شبیه سازی اثر انگشت، این سیستم شناسایی رو دور بزنه

اعلام ارائه پچ iOS7 که ۸۰ قص امنیتی رو برطرف می کنه با این خبرها تحت اشعاع قرار گرفت.

اپل اعلام کرد که داره روی برطرف کردن ضعف های امنیتی Lock Screen و باگ های دیگه کار می کنه.

علیرغم تمامی خبرهای بدی که گفته شد، میزان مهاجرت از نسخه ۶ سیستم عامل به نسخه ۷ یک موفقیت برای این شرکت محسوب می شه (۳۲ درصد در کمتر از ۴۸ ساعت) مساله ای که مایکروسافت هنوز باهاش درگیره.

منبع 

استاندارد