بهره‌برداری از Race Condition با استفاده از Turbo Intruder

بهره‌برداری از Race Condition با استفاده از Turbo Intruder، یکی از تکنیک‌های حیاتی در حوزه امنیت وب‌اپلیکیشن‌ها محسوب می‌شود.

Race Condition زمانی رخ می‌دهد که چندین Thread یا Process به‌صورت همزمان به منابع مشترک دسترسی پیدا می‌کنند که این امر منجر به ایجاد نتایج غیرقابل‌پیش‌بینی می‌شود. در این مقاله، نحوه بهره‌برداری از این آسیب‌پذیری را با استفاده از افزونه قدرتمند Turbo Intruder در محیط Burp Suite بررسی و شبیه‌سازی می‌کنیم.

فهرست مطالب

  • ویژگی‌های کلیدی
  • آزمایش بر روی یک اپلیکیشن آسیب‌پذیر
  • رفتار مورد انتظار اپلیکیشن
  • رفتار غیرمنتظره/نامطلوب اپلیکیشن
  • درباره آسیب‌پذیری
  • نتیجه‌گیری

ویژگی‌های کلیدی

در ادامه، ویژگی‌های کلیدی Race Condition آورده شده است:

آکادمی لیان
  • دسترسی همزمان

Race condition زمانی رخ می‌دهد که چندین فرایند یا Thread به‌طور همزمان در یک وب‌اپلیکیشن به منابع مشترک دسترسی پیدا کنند. این منابع مشترک می‌توانند شامل رکوردهای پایگاه داده، فایل‌ها، یا متغیرهای ذخیره شده در حافظه و سایر مؤلفه‌های حیاتی باشند.

  • رفتار غیرقابل‌پیش‌بینی

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

آزمایش روی یک اپلیکیشن آسیب‌پذیر

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

این اپلیکیشن آسیب‌پذیر از طریق مخزن زیر قابل دریافت است:

https://github.com/projectdiscovery/php-app-race-condition

رفتار مورد انتظار اپلیکیشن

منطق مورد انتظار اپلیکیشن این است که کاربر بتواند از حساب خود برداشت وجه انجام دهد و در مقابل، موجودی حساب به کاربر نمایش داده شود. در حالت اولیه، مبلغ کل برابر با ۱۰,۰۰۰ دلار است.

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

بر اساس منطق اپلیکیشن، اگر یک کاربر ۸۰ مرتبه مبلغ ۱۰ دلار را برداشت کند، مبلغ باقی‌مانده در حساب باید به صورت زیر محاسبه شود:

 (۱۰,۰۰۰–(۱۰ * ۸۰) = $۹,۲۰۰

این فرآیند را می‌توان از طریق نتایج Burp Intruder نیز مشاهده کرد؛ به این صورت که تعداد درخواست‌های همزمان را روی عدد ۱ تنظیم کرده و عملیات برداشت وجه را ۸۰ بار تکرار می‌کنیم.

رفتار غیرمنتظره/نامطلوب اپلیکیشن

رفتار غیرمنتظره اپلیکیشن زمانی آشکار می‌شود که کاربران با استفاده از افزونه Turbo Intruder، چندین درخواست همزمان ارسال می‌کنند. شما می‌توانید افزونه Turbo Intruder را در داخل Burp Suite و از طریق Bapp Store (فروشگاه افزونه‌های Burp) دانلود و نصب کنید.

به محض نصب این افزونه، می‌توانید درخواست هدف را به Turbo Intruder Forward کنید.

در داخل Turbo Intruder، ما از اسکریپت پیش‌فرض race-single-packet-attack.py استفاده می‌کنیم؛ با این حال، پیکربندی آن را بر اساس نیازهای خود تغییر می‌دهیم. ما همان عملیات قبلی یعنی برداشت ۱۰ دلار به تعداد ۸۰ مرتبه را انجام می‌دهیم، اما این بار تعداد درخواست‌های همزمان را روی ۱۵ تنظیم کرده و موتور پردازش را روی Engine.BURP پیکربندی می‌کنیم.

درباره آسیب‌پذیری

در نگاه اول، شاید غیرمنتظره به نظر برسد که یک وب‌اپلیکیشن توسعه‌یافته با PHP (زبانی که به‌طور پیش‌فرض از Multi-threading پشتیبانی نمی‌کند)، بتواند در برابر حملات Race Condition آسیب‌پذیر باشد. با این وجود، این حملات واقعاً می‌توانند رخ دهند.

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

در نتیجه، به‌جای اینکه پس از پردازش هر دو درخواست، موجودی حساب به مبلغ مورد انتظار یعنی ۹,۹۸۰ دلار (برداشت دو مرتبه ۱۰ دلار از ۱۰۰۰۰ دلار اولیه) تغییر کند، موجودی به ۹,۹۹۰ دلار کاهش می‌یابد. این مغایرت به این دلیل رخ می‌دهد که سرور درخواست دوم را در حالی پردازش می‌کند که پردازش درخواست اول هنوز در جریان است. اگرچه هر دو عملیات برداشت وجه به‌درستی کار می‌کنند و منجر به کسر مجموعاً ۲۰ دلار از حساب کاربر می‌شوند، اما سیستم تنها ۱۰ دلار از موجودی کل کسر می‌کند.

نتیجه‌گیری

در نتیجه، Race Condition ریسک قابل‌توجهی برای امنیت و پایداری وب‌اپلیکیشن‌ها ایجاد می‌کند. از این رو، انجام تست‌های جامع و به‌کارگیری شیوه‌های کدنویسی امن برای کاهش اثرات این دست از آسیب‌پذیری‌ها به‌صورت مؤثر، امری حیاتی است. ابزار Burp Intruder سناریوی فوق را در حالتی که تعداد درخواست‌های همزمان روی ۱ تنظیم شده باشد نشان می‌دهد (زیرا اپلیکیشن مورد بحث کوچک بوده و قابلیت‌های محدودی دارد). اما در تست‌های دنیای واقعی، بهره‌برداری از Race Condition با استفاده از Turbo Intruder می‌تواند رویکردی بسیار ارزشمند باشد؛ چرا که این افزونه انعطاف‌پذیری بالایی در پیکربندی و راه‌اندازی حملات Race Condition به‌صورت مؤثر فراهم می‌کند.

آکادمی لیان

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا