نگاره‌هایی پیرامون امنیت، شبکه و رمزنگاری

31 مه 2021

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

خب اصلا API چی هست؟

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

تلگرام دو روش اتصال یا دو نوع API را فراهم کرده است:

1-  Telegram API

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

2-  Bot API

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

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

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

وصل شدن به حساب خودمون و مدیریت آن از طریق برنامه‌نویسی یک ربات

حالا ما میخوایم اکانت خودمون رو مدیریت کنیم و بهش وصل شیم باید از Telegram API استفاده کنیم و برای ارتباط با این API باید پروتکل MTProto  پیاده‌سازی کنیم. حالا MTProto  چیه؟

 MTProto به به عنوان پروتکل دسترسی به سرور API در تلگرام از طریق اپلیکیشنهای در حال اجرا بر روی دستگاههای موبایل استفاده میشود به صورت مجازی به چند لایه تقسیم می‌شه:

  1. زبان درخواست API که به وسیله آن درخواست‌ها و پاسخ‌های سرور به پیام‌های Binary تبدیل می‌شوند.
  2. لایه Cryptographic که در آن تمام پیام‌ها و داده‌ها قبل از انتقال رمزنگاری می‌شوند.
  3. ماژول حمل و نقل (Transport) که در آن داده‌های رمزنگاری شده توسط یکی از پروتکل‌های شبکه udp، tcp، http و یا https منتقل می‌شوند.

حالا برنامه نویسای گرامی اومدن و یه سری کتابخونه اماده کردن که دیگه لازم نباشه ما این پروتکل رو پیاده سازی کنیم و کلی دردسر بکشیم مثل کتابخونه MadeLineProto برای PHP و Telethon،‌ همچنین برای پایتون و … که در گیتهاب میتونید ببینید.

حالا ما میام با کمک از این کتابخونه‌ها و نوشتن یه اسکریپت به اکانت حودمون وصل میشیم و مدیریتش میکنیم.

بعدش یه ربات مینویسم با کارایی Member fake مینویسیم که بیاد اکانتمون رو وارد یه کانال کنه و سپس کلا اکانتمون رو از تلگرام دیلیت بزنه و دوباره اکانت درست کنه و وارد همون کانال بشه.

خب در برنامه نویسی با اون کتابخونه ها این امر امکان پذیره ولی بیایم مشکلاتی که پیش روی ما هست رو شرح بدم

  • دسرتسی به کد پیامک برای ورود
  • وجود Rate limit تلگرام

در مورد گزینه اول که بله این یه مشکلی هست که هم هزینه برداره اگه بخوایم دورش بزنیم هم کلی کار داره

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

حالا بریم سراغ بخش اصلی ماجرا یعنی خود و باگ و سواستفاده از ان برای دور زدن محدودیت شماره ۱

شرح آسیب‌پذیری

با بهره برداری از این اسیب پذیری ما میتونیم حسابمون رو از تلگرام حذف کنیم و دوباره با همون شماره حساب جدیدی ایجاد کنیم بدون اینکه نیازی به کد پیامک شده داشته باشیم.

مرحله ۱

ابتدا به https://my.telegram.org/auth می رویم و درخواست حذف حساب را ارسال می کنیم، اما در حال حاضر آخرین مرحله را که مربوط به تأیید حذف است، انتخاب نمی کنیم.

مرحله ۲

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

مرحله ۳

حالا به my.telegram.org/auth رفته و گزینه Yas را انتخاب کنید تا حساب ما پاک شود

مرحله ۴

برنامه تلگرامی را که با آن وارد شده ایم باز کنید و کد 5 رقمی را که کپی کردیم وارد کنید.

و کد معتبر و پذیرفته شده است و مجدداً ثبت نام شد

سناریو حمله :

ما با اکسپلویت این آسیب پذیری و automate کردن روند از طریق برنامه نویسی یک ربات تلگرام میتونستیم به یک کانال ممبر فیک به هر اندازه اضافه کنیم.

نوع آسیب پذیری

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

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

گزارش آسیب‌پذیری

و اینکه بعد گزارش این مشکل پچ شد و من دوباره تونستم بایپس کنم محدودیتشونو ولی فعلا پاسخی دریافت نکردم فک کنم باهام قهر کردن…

ویدئو اثبات:

ممنون

3 پست نوشته شده
علاقه‌مند به برنامه‌نویسی، وب هکینگ و رمزنگاری
رشته تحصیلیم گیاه پزشکیه و کاملا در تضاد با علاقم
  • به اشتراک بگذارید:
  1. maltigo گفت:

    سلام
    من چنتا مورد دارم روی تلگرام
    میتونی وقت بزاری با هم یه مروری کنیم
    من روی اصل پروتوکول باگ پیدا کردم
    maltigo1
    ای دی

  2. محمد گفت:

    سلام، منم یه باگ پیدا کردم ولی جواب منو نداد پشتیبانی تلگرام، البته باگش هنوز سرجاشه، با چه ایمیلی شما ارتباط برقرار کردین؟

  3. جوجه گفت:

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

  4. کاربر گرامی گفت:

    عالی 🙂
    فقط یه سوالی برام پیش اومد که چطور بانتی رو میگیرین وقتی همه در ها بسته س 🙁 اینکه متوجه بشن ایرانی هستین باز بانتی رو میدن!؟

    • Allen گفت:

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

  5. mahdi tamam گفت:

    عالی بود این باگ..ممنون که فیلم هم گرفتی..

  6. Reza گفت:

    سلام
    عالی بود
    لذت بردم از این توضیحات عالی

  7. […] نکته رو همین اول کار بگم که میشه این رو یه بایپس برای باگ قبلی دونست که توسط تلگرام پچ شد حالا […]