این پست حاوی نکات فنی و تحلیل کد تلگرام طلایی است. لطفا پیش از مطالعه این متن، این پست را مطالعه فرمایید.
ما دو نسخه ۵.۳.۵ و ۵.۴.۲ (آخرین نسخه تا ۵ تیر ۹۷) را مورد بررسی قرار دادیم:
1. org.ir.talaeii.fl-5.3.5.apk Checksum:490a561a40d7b474c19c8143731bb4cb Download
2. org.ir.talaeii.fl-5.4.2.apk Checksum:d56d974f6938d156fd764942ea30723c Download
این دو نسخه با ابزار jadx و با سوئیچ deobf دیکامپایل شدند. نسخه ۵.۳.۵ به راحتی به کد نامبهم تبدیل شد درحالیکه میزان مبهمسازی در نسخه ۵.۴.۲ به مراتب بیشتر بود و کدهای تولید شده تا حدی ناخوانا بودند. به همین دلیل تصاویری که از کد وجود دارد مربوط به کدهای دیکامپایل شده نسخه ۵.۳.۵ هستند ولی مشابه همین کدها در نسخه ۵.۴.۲ وجود دارند. کدهای دیکامپایل شده هر دو نسخه را میتوانید از این لینک مشاهده و دانلود کنید.
با بررسیهای ما مشخص شد که تلگرام طلایی از روشهای متعددی برای دریافت اطلاعات شخصی کاربر و انجام عملیات غیرمجاز (واضحا بدون اطلاع او) استفاده میکند. در این گزارش ما به چند روش اشاره خواهیم کرد. لازم به ذکر است که هر چه ما بیشتر جستجو میکردیم روشهای مختلف بیشتری برای اعمال نفوذ غیرقانونی و ابزارهای سرقت اطلاعات بر میخوردیم. نمونههای زیر تنها روشهایی است که موفق به کشف آنها شدیم و ممکن است روشهای مختلف دیگری نیز وجود داشته باشد.
به نظر میرسد تلگرام طلایی مبتنی بر کد هاترگام (hotgram) است. زیرا که حتی نام برخی کلاسها و توابع hotgram بود. برخی از سرورهایی که تلگرام طلایی با آنها در ارتباط بود نیز عبارت hotgram درون نام دامنه آنها وجود داشت. عبارت sls که نماد شرکت سازنده هاتگرام به نام راهکارهای سرزمین هوشمند (sls.ir) است نیز به وفور در کد یافت میشود.
اکثر کدهای حاوی قابلیتهای غیرقانونی تلگرام طلایی در پکیج customization قرار دارند به همین دلیل ما روی این پکیج تمرکز کردیم. البته تعدادی کد مخرب به برخی توابع اصلی تلگرام نیز اضافه شده است که آنها را نیز بررسی خواهیم کرد.
تلگرام طلایی از یک کتابخانه push notification به نام OneSignal استفاده میکند و دستورات خود را از طریق آن دریافت میکند. کلاس handleRequest و تابع handlePush مسئول تشخیص و اجرای دستورات سرور هستند:
* هر کدام از caseها یک نوع دستور خاص است که از سرور دریافت میشود (لینک گیتهاب)
این کلاس وظیفه ارسال و دریافت اطلاعات از سرورهایی غیر از سرورهای اصلی تلگرام (در اینجا از عبارت سرورهای تلگرام طلایی استفاده میکنیم) را بر عهده دارد. این کانال ارتباطی بر اساس تکنولوژی Rest کار میکند و هم دستوراتی از جنس GET دارد و هم از جنس POST که به ترتیب برای دریافت اطلاعات و ارسال اطلاعات استفاده میشوند.
قابلیت push notification یک کانال یک طرفه از سمت سرور به سمت کلاینت است و سرور میتواند پیغام خاصی را به سمت کلاینتها یا یک کلاینت خاص ارسال کند اما جوابی دریافت نمیکند. در تلگرام طلایی کلاس HotgramNotification وظیفه مدیریت نوتیفیکشنها را برعهده دارد و سازنده برنامه میتواند با ارسال نوتیفیکشن گروهی یا حتی هدفدار برای یک کاربر خاص عملیات خاصی را روی کلاینت آغاز کند. تلگرام طلایی از طریق push notification دستورات خاصی دریافت میکند و کلاس HandleRequest و کلاسهای زیر مجموعه آن وظیفه تشخیص و اجرای این وظایف را برعهده دارد.
این کلاس و کلاسهای مشتق شده از آن در پکیج org.telegram.customization.internet قرار گرفتهاند. کلاسهای زیرمجموعهی HandleRequest هرکدام وظیفه مدیریت نوع خاصی از پیامها را بر عهده دارند. در نسخه ۵.۳.۵ تعداد این کلاسها ۵۳ عدد بود ولی در نسخه جدیدتر ۴۹ کلاس وجود داشت. ولی طبق بررسیهای ما همه وظایف مخاطره آمیز تلگرام طلایی که ما پیدا کردیم هنوز هم در نسخه آخر این برنامه وجود دارد. کد این کلاس که مبهم سازی شده را نیز در این لینک میتوانید ببینید. چند قابلیتهای جاسوسی جدید در نسخه ۵.۴.۲ به تلگرام طلایی اضافه شده است که نشان از تمایل برای توسعه و بهبود مداوم قابلیتهای مخرب این ابزار در ماههای اخیر دارد.
در تصویر زیر برخی از توابع این کلاس را مشاهده میکنید. وجود چنین توابعی با نامهای sendContacts، sendLocation، sendTM، sendSuperGroup و . . . باعث شد توجه ما شدیدا به این کلاس معطوف شود.
در بررسیهای ما سه نوع قابلیت غیرمتعارف و غیرقانونی در تلگرام طلایی پیدا شد. دسته اول فعالیتهایی است که با دریافت نوتیفیکشنها فعال میشوند، دسته دوم به صورت سرویس در کلاینت تلگرام طلایی در حال اجرا اند و به صورت دورهای گزارشهایی برای سرور تلگرام طلایی میفرستند، و در نهایت قابلیتهایی که با یک رخداد خاص مثلا دریافت پیام خاصی فعال میشوند. همه این قابلیتها در هر دو نسخه که ما بررسی کردیم وجود داشتند. به نسخه جدیدتر تعدادی قابلیت جدید اضافه شده بود.
همانطور که قبلا اشاره کردیم، کلاس HotgramNotification وظیفه مدیریت نوتیفیکشنهای دریافتی از پلتفرم OneSignal را بر عهده دارد. این کار توسط تابع HandlePush انجام میشود. ورودی اصلی این تابع یک رشته است که در آن دادههای ورودی قالب json دارند. این ورودی و مقدار متغیر pushType، مشخص میکنند که چه عملیاتی باید در کلاینت شروع شود. در ادامه به برخی از فعالیتهای نامتعارف و غیرقانونی تلگرام طلایی که با نوتیفیکیشن فعال میشود را بررسی میکنیم.
۱. با گرفتن نوتیفیکیشن نوع ۲، تلگرام طلایی میتواند بدون اطلاع کاربر، او را در یک کانال خاص عضو کند. این کار با استفاده از تابع addToChannel که در کلاس SlsMessageHolder قرار دارد انجام میشود. (لینک گیتهاب)
۲. با دریافت نوتیفیکیشن از نوع ۹ تلگرام طلایی با اطلاعات دریافتی در نوتیفیکیشن میتواند بدون اطلاع کاربر یک رکورد به دفترچه تلفن کاربر اضافه کند. و این کار با استفاده از تابع addContact که در کلاس Utilities قرار دارد انجام میشود. این تابع در نسخه 5.4.2 در کلاس C3792d قرار دارد (لینک گیتهاب)
۳. نوتیفیکیشن نوع ۱۰ رفتاری شبیه به نوع ۹ دارد با این تفاوت که اطلاعات دریافتی مشخص میکند چه رکوردی از دفترچه تلفن باید حذف شود. که میتوانید تابع deleteContact را در کلاس Utilities یا کلاس متناظرش در نسخه مبهم سازی شده ببینید. (لینک گیتهاب)
۴. نوتیفیکیشن نوع ۱۵ به سازندگان تلگرام طلایی این امکان را میدهد تا یک کاربر را بدون اطلاع و تمایل او از کانال مورد نظرشان خارج کنند و همینطور سابقه کانال را هم پاک کنند. (لینک گیتهاب)
مواردی که تا اینجا بررسی کردیم در هر ۲ نسخه وجود داشتند ولی مواردی بعدی فقط در نسخه جدیدتر ۵.۴.۲ وجود دارند.
۵. با دریافت نوتیفیکیشن از نوع ۱۸ تلگرام طلایی بررسی میکند اگر کاربر مدیر کانال باشد او را از کانال اخراج میکند. با فرستادن این نوتیفیکیشن برای همه کاربران تلگرام طلایی و مشخص کردن یک کانال خاص میتوان کاری کرد که همه ادمینهای یک کانال خاص از کانال خارج شوند و کانال بدون صاحب بماند. (لینک گیتهاب)
۶. فعالیت جالب بعدی که با دریافت نوتیفیکیشن نوع ۱۹ فعال میشود، امکان باز کردن یک آدرس اینترنتی خاص از طرف کاربر است. وظیفه اجرای این درخواست با کتابخانه Volley است. User-Agent کلاینت به صورت تصادفی انتخاب میشود. این کار میتواند برای افزایش آمار بازدید یک سایت یا حتی اجرای حمله DDoS استفاده داشته باشد. در تصویر تابعی که User-Agent را انتخاب میکند و درخواست HTTP را اجرا میکند میبینید. (لینک گیتهاب)
۷. مورد بعدی و آخر که در این بخش بررسی میکنیم پیامهای نوع ۲۰ هستند. این نوع پیام میتوانند از طرف کاربر یک کانال خاص را Report کند. با این عملکرد میتوان به صورت گسترده، یک کانال دلخواه را Report Spam کرد. (لینک گیتهاب)
بخش دیگری از دادههایی که به سرورهای تلگرام طلایی ارسال میشود از طرف سرویسهایی است که در زمان اجرای تلگرام طلایی فعال میشوند. این سرویسها خود با استفاده از نوتیفیکیشنهایی که در بخش قبل بررسی کردیم فعال میشوند تا بتوان از راه دور آنها را فعال کرد. نوتیفیکیشنهای نوع ۱۲، ۱۶، و ۱۷ میتوانند سرویسهای متفاوتی را فعال کنند که از این میان نوع ۱۲ به صورت خاص چندین سرویس را با هم فعال میکند. (لینک گیتهاب)
در این بخش به بررسی بعضی از این سرویسها که به نظر میآید ناقض حریم شخصی کاربران هستند میپردازیم. کد این سرویسها در پکیج org.telegram.customization.service قرار دارد.
سرویس BgtsService: این سرویس لیست تمام کانالهایی که کاربر عضو آنهاست را جمعآوری میکند و توسط کلاس HandleRequest که قبلا مطرح شد برای سرورهای تلگرام طلایی میفرستد. یکی از دادههای جالبی که جمعآوری میشود مشخص میکند کاربر، ادمین کدام کانالها است. (لینک گیتهاب)
سرویس CtsService: این سرویس وظیفه جمع آوری اطلاعات Contactهای کاربر را بر عهده دارد. در این اطلاعات نام و شماره تماس تمام مخاطبین جمعآوری میشود و برای سرورهای تلگرام طلایی ارسال میشود. البته با توجه به اینکه تلگرام طلایی سرویسی با عنوان "نمایش کسانی که شماره شما را دارند" ارائه میدهد میتوان توجیه کرد که این اطلاعات برای پیاده سازی آن سرویس مورد استفاده قرار میگیرد. (لینک گیتهاب)
سرویس LocationService: این سرویس همانطور که از نامش پیدا است به صورت دورهای مشخصات مکانی کاربر (طول و عرض جغرافیایی)را به سرورهای تلگرام طلایی میفرستد. (لینک گیتهاب)
این سرویس هم مانند بقیه سرویسهای این دسته با استفاده از کلاس HandleRequest دادهها را برای سرور تلگرام طلایی میفرستد.
سرویس SgsService: این سرویس ۲ نوع داده را برای سرور تلگرام طلایی میفرستد. اول لیست id همه گروههایی که کاربر عضو آن است و دیگری اطلاعات سوپرگروههایی که کاربر در آنها عضو است. به نظر میرسد گروههای پرتعداد برای سازندگان اهمیت بیشتری نسبت به گروههای عادی داشته است. (لینک گیتهاب)
سرویس BgsService: این سرویس هم مانند سرویسهای SgsService و BgtsService عمل میکند ولی اطلاعات مربوط به باتهایی که کاربر با آنها کار میکند را میفرستد. (لینک گیتهاب)
سرویسهایی که تا اینجا بررسی کردیم در هر ۲ نسخه مدنظر ما وجود دارند ولی سرویس بعدی که با هم میبینیم فقط در نسخه جدیدتر ردپای آن را مشاهده کردیم.
سرویس UStateService: این سرویس با توجه به نامش وظیفه بروزرسانی state کاربر در سرورهای تلگرام طلایی را برعهده دارد. این سرویس وظیفه ارسال ابردادههای پیامهای کاربر را به سرورهای تلگرام طلایی برعهده دارد. کلاس UserState با توجه به مبهم بودن کد شامل متغیرهای بی معنی مانند gp، gr، mr، ms ،s ، و e است. با توجه به کد تابع getUserStateWithStartAndEndTime که وظیفه پر کردن این مقادیر را بر عهده دارد متوجه شدیم این متغیرها در یک بازه زمانی مشخص، تعداد پیامهای دریافتی و ارسالی، تعداد پیامهای مربوط به گروهها، و زمان شروع و پایان بازهای که پیامها در آن شمارش شدهاند را مشخص میکنند و این اطلاعات را برای سرورهای تلگرام طلایی میفرستد. (لینک گیتهاب)
همانطور که گفتیم، وقتی سرویسها فعال شوند به طور مداوم اطلاعات را برای سرورهای تلگرام طلایی میفرستند. این کار در دو زمان انجام میشود
ضمنا کلاس HandleRequest که وظیفه ارسال پیامها را برعهده دارد بعد از اینکه دادههای هر سرویس را برای سرور فرستاد، زمان آخرین ارسال موفق را ذخیره میکند تا بعدا مورد استفاده سرویس قرار بگیرد.
این دسته از قابلیتهای سرقت اطلاعات در تلگرام طلایی از نظر امکان تشخیص از سخت ترینهای انواع سرقت اطلاعات هستند. به همین دلیل ما تنها توانستیم یک مورد از این نوع پیدا کنیم، که البته یکی از مهمترین موارد نقض حریم خصوصی کاربران است. در تصاویر زیر قسمتی از کد کلاس MessageStorage در تلگرام طلایی و مقایسه آن با کد تلگرام طلایی را مشاهده میکنید. تفاوت اصلی در این قسمت مربوط به کدی است که تلگرام طلایی اظافه کرده است. تابعی که این کد به آن اضافه شده است وظیفه مدیریت پیامهای دریافتی را برعهده دارد، پس به ازای هر پیام دریافتی این کد روی آن اعمال میشود. (لینک ۱ و لینک ۲)
این کد در صورتی که dialog_id با کد 777000 پیامی دریافت شود، متن این پیام از طریق کلاس SendTM برای سرورهای تلگرام طلایی ارسال میشود. کد 777000 مربوط به بخش service notification تلگرام است. تلگرام کدهای login را از این طریق ارسال میکند.
بنابراین یک کپی از همه کدهای login همه کاربران به سرورهای تلگرام طلایی فرستاده میشوند بدون هیچ شرطی. این قابلیت این امکان را به دستاندرکاران تلگرام طلایی میدهد تا با داشتن شماره تلفن یکی از کاربرانشان بتوانند به اکانت تلگرام رسمی کاربر وارد شوند و به تمام پیامهای او دسترسی داشته باشند.
لیست سرورهایی که تلگرام طلایی با آنها در ارتباط هستند در این لینک گیتهاب قابل مشاهده هستند
نکته مهمی که باید مورد توجه قرار گیرد این است که تمامی این فعالیتها بدون اطلاع و رضایت کاربر انجام میپذیرند. در حقیقت از منابع شبکه، و اکانت تلگرام کاربر برای رسیدن مقاصد دلخواهشان استفاده میکنند.
توسعهدهندگان این ابزار علاقه خاصی به استفاده از اسمهای Alireza, LEE, Aminproxy و Sadegh در لاگها داشتند. بعید نیست که اینها اسم (جعلی) خود توسعهدهندگان باشد.
علیرضا ابراهیمی - Twitter
یاشار شاهینزاده - Twitter
حسن کرامت پور - LinkedIn