نرمافزار تلگرام در یکی از پر سر و صداترین کارهای اخیر، مدعی شد امنیت این اپلیکیشن پیامرسان به حدی بالاست که اگر کسی آدرس ایمیل رمزگذاری شده در این اپلیکیشن رو کشف کنه، برنده ۲۰۰ هزار دلار میشه. این ادعا ضمن اینکه چالش جالبی برای کارشناسای امنیتی بود، کاربرها رو به خطا میانداخت چرا که رمز کردن یک متن درون اپلیکیشن یه چیزه و پیادهسازی رمزگذاری در چت، یه چیز دیگه.
در ادامه بررسی کارشناسان امنیتی زیپریوم رو میارم.
بعد از اعلام این مناقصه، تصمیم گرفتم بررسی دقیقتری روی اپلیکیشن داشته باشم. خواستم ببینم آیا متن پیامهای رمزگذاری شده، قابل خوندن است یا نه. این تست روی اندروید نسخه ۴.۴.۲ انجام شده است.
تلگرام ادعا میکنه اپلیکیشنی با تمرکز روی امنیته و کاربرانش میتونن چتهای رمزگذاری شده شخصی و کاری داشتهباشند. کارشناسان زیپریوم ثابت کردند که این ادعا غلط بوده و ۵۰ میلیون کاربر تلگرام در خطر هستند.
مسابقه رمزگذاری قبلی تلگرام، شکستن پروتکل رو فقط در زمان رمزگذاری و ارسال، به رسمیت میشناخت. به دو دلیل این مورد ایده خوبی نیست:
۱. در دنیای واقعی، هکرها کاری به قوانین ندارند.
۲. فرض گرفته بود که هکرها در میانه راه سعی در شکستن رمزگذاری خواهند داشت در حالیکه میشه در سایر پروتکلها ضعفهایی یافت که سود بیشتری داشته باشه (برای مثال ضعف امنیتی 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/)
در ابتدا با استفاده از اپلیکیشن اندروید تلگرام، یک پیام رمزگذاری شده ایجاد کردم تا ببینم آیا جایی به صورت رمز نشده ذخیره میشه یا نه. فرض کردم که پیامها در حافظه و یا حداقل در پایگاه داده داخلی، رمز شدهاند. این فرض برای یک اپلیکیشن با نگرش امنیتی، چیز زیادی نیست.
اگر به عنوان حملهکننده از تصویر عکس بگیرید، به هر دو نفر در چت، اعلام میشه. بنابراین میشه فهمید که امنیت و حفظ حریم خصوصی برای تلگرام خیلی مهمه. با اینحال، فرض اینکه حمله کننده به جای کنترل کل دستگاه، از تصویر عکس میگیره، کمی خوش خیالانه است.
به تلگرام شانس دادم و اشتباهات رایج در اپلیکیشنهایی که اولویت امنیتی ندارند رو چک نکردم. یک حمله با استفاده از ضعف امنیتی سمت کاربر و یا یک اپلیکیشن و استفاده از Kernel Exploit رو شبیهسازی کردم (از CVE-2014-3153 استفاده کردم). راههای تمیزتری برای گرفتن پاسخ بود اما ترجیح دادم یک اثبات ایده (PoC) ارائه بدم. تلگرام امکان چت امن داره با یک قفل بالای تصویر که احساس امنیت میده. از حافظه پروسس نسخهبرداشتم و دنبال کلمهای گشتم که در چت استفاده کرده بودم.
همونطور که میبینید کلمههای Woof، Text، Shlookido، Cookiedo، Tambal و NotSoEncryptedInMemory به صورت رمز نشده در حافظه دیده میشوند. هر حمله کنندهای که به دستگاه نفوذ کنه، بدون هیچ مشکلی، به متن پیامها دسترسی خواهد داشت. پس چت امن تلگرام، به صورت متن واضح قابل خوندنه. این مساله باعث شد که به فکر بیافتم آیا راه سادهتری برای دسترسی به متن پیامها وجود داره؟ وجود داشت.
برای تکمیل تحقیق، با استفاده از دسترسی روت که با کمک Kernel Exploit به دست آورده بودم، فایلهای فلودر /data/data/org.telegram.messenger/ رو چک کرده و فایل Cache4.db رو در فولدر اپلیکیشن تلگرام پیدا کردم.
فرض کردم که پیشوند enc در نام جدولهای enc_chats و enc_tasks_v2 خلاصه encrypted (رمز شده) باشه پس فایل رو کش رفتم و بررسی کردم. فایل شامل کلیه چتهای امن به صورت متن واضح بود.
یکی از امکانات جالب تلگرام، توانایی حذف متن پیامهاست. تلاش کردم که پیامهای حذف شده توسط کاربر رو بازیابی کنم. برای اینکار حافظه و فایل cache4.db رو بررسی کردم.
از بخش تنظیمات، انتخاب کردم که پیامها بعد از ۵ ثانیه حذف بشن. انتظار داشتم این اتفاق بیافته اما پیامها حذف نشدن. به نظر میرسه که یک باگ باشه و نه مشکلی امنیتی. با استفاده از گزینه Delete پیام رو حذف کردم.
با بررسی فایل cache4.db اثری از پیامهای حذف شده ندیدم. معمولا پیامهای حذف شده، جذابیت بیشتری برای حملهکننده دارند. سپس حافظه رو بررسی کردم و متاسفانه پیامها پس از حذف همچنان در حافظه قابل مشاهده بودند.
خط زمانی:
این مساله در تاریخ ۲۷ دیماه ۱۳۹۳ کشف و روز بعد به تیم امنیتی تلگرام اطلاعرسانی شد.
طی ماه بعد و در ۳ تماس بعدی، پاسخی از تیم امنیتی تلگرام دریافت نشد.
در تاریخ ۳ اسفند ۱۳۹۳ این ضعف امنیتی، اعلام عمومی شد.
نتیجه:
تلگرام با هدف امکان حفظ حریم خصوصی و بدون هزینه برای کاربران فعالیت میکنه. توجه این اپلیکیشن به امنیت اطلاعات در حال انتقال و چشمپوشی از امنیت اطلاعات نگهداری شده در دستگاه، موجب به وجود آمدن این مشکل بوده است. نکته قابل تاسف نیز عدم پاسخگویی تیم امنیتی تلگرام به تماسهای اعلام این ضعف بوده است.
در حقیقت، امنیت مورد ادعای تلگرام چیز بیشتری از اپلیکیشنها و صفحههایی که از SSL استفاده میکنند نیست. اگر از تلگرام برای افزایش امنیت و حفظ حریم خصوصی استفاده میکنید باید بدونید که در حال حاضر، هکرهای کار بلد میتونن پیامهای شما رو بخونن و یا اگر توسط FBI دستگیر بشید، متن پیامهای حذف شده شما قابل بازیابیه. پیشنهاد میکنم که از اپلیکیشنهای امنیتی برای جلوگیری از حمله به دستگاه خود استفاده کنید.
برای امنیت بیشتر، تلگرام میبایست متن پیامها در حافظه و فایل cache4.db را نیز رمزگذاری کند.
منبع:
http://blog.zimperium.com/telegram-hack/