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

03 دسامبر 2019

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

  • افزایش احتمال پذیرش گزارش به عنوان یک گزارش معتبر
  • کاهش زمان پاسخگویی تیم امنیت سازمان یا شرکت
  • افزایش احتمال پرداخت هدیه علاوه بر بانتی (برای بانتی‌های خارجی تا ۳۰۰ دلار نیز مشاهده شده)

قبل از گزارش‌نویسی

یپش از گزارش‌نویسی و ارسال آن حتما یک‌بار دیگر از وجود آسیب‌پذیری اطمینان حاصل کنید. همچنین مطمئن شوید که آسیب‌پذیری در قلمرو بانتی قرار دارد. برای مثال x.yahoo.com که با توجه به قلمرو yahoo.com.* در قلمرو قرار می‌گیرد. همچنین ممکن است آسیب‌پذیری پیدا کنید از سایتی که در محدوده بانتی نباشد، اما تاثیرش رو روی سایت‌های توی قلمرو بگذارد (بعدا سرفرصت مطلبی راجع به این موضوع هم می‌نویسم)

گزارش‌نویسی

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

  • توضیح کامل در مورد آسیب‌پذیری
  • شدت خطر آسیب‌پذیری
  • سناریو حمله و سواستفاده
  • مراحل دقیق تولید آسیب‌پذیری
  • اثبات آسیب‌پذیری و نحوهٔ اکسپلویت
  • ابزارها، payloadها و کدهای استفاده شده در عملیات کشف و اکسپلویت

توضیح کامل در مورد آسیب‌پذیری

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

  • آسیب‌پذیری فنی با الگوی قبلی
  • آسیب‌پذیری منطقی با الگوی خاص

آسیب‌پذیری فنی با الگوی قبلی

در مورد نوع اول، خیلی خوب است که لینک از یک مرجع معتبر به گزارش اضافه شود. برای مثال آسیب‌پذیری Cross-Site Scripting،‌ توضیحات:

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

لینک از مرجع معتبر مانند OWASP بسیار به درک آسیب‌پذیری کمک می‌کند.

آسیب‌پذیری منطقی با الگوی خاص

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

شدت خطر آسیب‌پذیری

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

سناریو حمله و سواستفاده

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

مراحل دقیق تولید آسیب‌پذیری

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

۱. وارد حساب کاربری شوید
۲. در قسمت Templates کد زیر را تزریق کنید
۳. لینک دعوت برای یک شخص دلخواه بفرستید
۴. منتظر شوید شخص روی لینک دعوت کلید کند
۵. با ارسال درخواست زیر، مقدار توکن قربانی استخراج می‌شود

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

اثبات آسیب‌پذیری و نحوهٔ اکسپلویت

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

ابزارها، payloadها و کدهای استفاده شده در عملیات کشف و اکسپلویت

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

نمونه‌هایی از گزارش‌های بد

گزارش ۱) بنده یک آسیب‌پذیری XSS در دامنه site.com کشف کردم، لینک آسیب‌پذیری:

https://site.com/services/login/identity?destination_uuid=79b5c315-b5ac-4b19-bd33-13554433fa31&google_apps_uri=javascript:prompt(document.domain)&return_to=https%3A%2F%2Fsite.com%sF

مشکلات گزارش ۱) مشکلات گزارش ۱ و حداقل توضیح مناسبی که باید داده می‌شد:

  • هیچ سناریو حمله‌ و کد اکسپلویتی ندارد: با اسفاده از این آسیب‌پذیری، مهاجم می‌تواند اطلاعات کاربری را سرقت کرده و یا تغییر دهد. به دلیل استفاده سامانه از تگ  httpOnly، امکان سرقت کوکی وجود ندارد، اما امکان تغییر اطلاعات با استفاده از exploit1.js وجود دارد. همچنین مهاجم می‌تواند با استفاده از exploit2.js اطلاعات محرمانه کاربر اعم از لیست ایکس را سرقت کند. مراحل اکسپلویت: مهاجم URL در یک iframe گذاشته و کد را در سایت خود قرار می‌دهد، سپس آدرس سایت خود را به قربانی داده و با اولین کلیک، در صورت لاگین بودن قربانی، اطلاعات ایشان استخراج می‌شود.
  • مراحل تولید آسیب‌پذیری بیان نشده است: ابتدا وارد حساب کاربری شوید، سپس یک سایت جدید در قسمت parked domains بسازید، سپس بر روی اتصال به اپلیکیشن گوگل کلیک کنید، درخواست را نگه دارید، قسمت google_aps_uri رو به پیلود XSS تغییر بدید
  • اشاره نشده آسیب‌پذیری در کجا تست شده است: این آسیب‌پذیری بر روی تمامی نسخه‌های فایرفاکس قابل اکسپلویت شدن است

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

مشکلات گزارش ۲) مشکلات گزارش ۲ و حداقل توضیح مناسبی که باید داده می‌شد:

  • کد اکسپلویتی ندارد: علی‌رغم وجود سناریو حمله، کد اکسپلویتی وجود ندارد. کد اکسپلویت می‌تواند مراحل تنظیم Intruder در نرم‌افزار Burp Suite و یا یک کد پایتون باشد.
  • آسیب‌پذیری به‌صورت کامل اکسپلویت نشده است: آسیب‌پذیری به‌صورت کامل اکسپلویت نشده و فقط بر اساس یک‌سری درخواست، نتیجه‌گیری شده است (که ممکن است غلط و یا درست باشد، اما قطعی نیست). آیا کد ۶ رقمی منقضی می‌شود؟ اگر آره در چند دقیقه؟ اگر در T دقیقه منقضی می‌شود، آیا امکان بروت‌فورس و کشف در آن زمان وجود دارد؟ اگر واقعا هکر کلاه‌سفید مدعی عدم وجود محدودیت است، این عدم محدودیت چند درخواست در دقیقه است؟ شاید سامانه بعد ۱۰۰ درخواست در دقیقه، حتی در حالتی که کد درست وارد شود نیز خطا بدهد. باید هکرکلاه‌سفید خیلی سختگیرانه این آسیب‌پذیری را اکسپلویت کند و تمامی شاخص‌ها را در گزارش بیاورد

گزارش ۳) با استفاده از پویش امنیتی کشف سرویس، مشخص شد که نسخه نرم‌افزار ۳.۲ می‌باشد که نسبت به Remote Command Execution آسیب‌پذیر می‌باشد.

مشکلات گزارش ۳) مشکلات گزارش ۳ و حداقل توضیح مناسبی که باید داده می‌شد:

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

دو سوال خیلی متداول

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

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

منابع برای مطالعه بیشتر

https://blogs.dropbox.com/tech/2015/08/dropbox-bug-bounty-program-best-practices-2/
https://sites.google.com/site/bughunteruniversity/
https://medium.com/@tolo7010/writing-a-good-and-detailed-vulnerability-report-bdb86cedcff
https://www.facebook.com/notes/facebook-bug-bounty/a-bounty-hunters-guide-to-facebook/946955115318715

به‌روزرسانی

این پست به‌روز رسانی می‌شود، اخرین تاریخ به‌روزرسانی: ۱۳۹۸/۰۹/۱۲

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

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

  2. علی گفت:

    سلام.
    ممکنه در آسیب‌پذیری‌هایی که در XMLHttpRequest ممکنه رخ بده هم بنویسید؟
    سپاسگزارم.

  3. r گفت:

    اینجا رو نفهمیدم یعنی اشتباه نوشتید؟ : ( از آوردن یک عکس یا محتوای یک بسته HTTP جدا خودداری کنید)
    خودداری نکنیم منظورتون بود؟ درسته