چطور باگ هانتر بهتری باشیم – بخش اول
مقاله
  • ۲۹ بهمن ۱۴۰۲
  • Learning Road Map
  • ۱۰ دقیقه خواندن

چطور باگ هانتر بهتری باشیم – بخش اول

[vc_row][vc_column][vc_column_text]در این مقاله قصد دارم به نکاتی اشاره کنم تا بتونید در باگ هانتینگ بهتر عمل کنید. در قسمت اول این مقاله، مفاهیم کلی رو بررسی می‌کنیم و در قسمت دوم به بررسی نکات فنی‌تر خواهیم پرداخت.

منابع مختلف باگ بانتی رو بهینه‌تر و سریع‌تر مطالعه کنید

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

برای مفاهیم یا آسیب‌پذیری‌های مختلف، Mind Map درست کنید

یکی از برنامه‌هایی که زیاد برای باگ هانتینگ و حتی تدریس ازش استفاده می‌کنم، xmind هست. با این برنامه شما می‌تونید برای هر موضوعی که در نظر دارید، یک نقشه‌ی ذهنی درست کنید و یکی از برنامه‌هاییه که توسط باگ هانترهای زیادی استفاده می‌شه. سعی کنید برای هر آسیب‌پذیری یا هر مفهومی که در باگ هانتینگ با اون برخورد می‌کنید، یک نقشه‌ی ذهنی درست کنید. این کار باعث می‌شه بعدا تکنیک‌ها یا روش‌های اکسپلویت جدیدی که یاد می‌گیرید رو به راحتی به Mind Map مورد نظر خودتون اضافه کنید. زمانی ‌که می‌خواید برای یک آسیب‌پذیری، Mind Map درست کنید، موارد زیر رو در نظر بگیرید: مفهوم باگ در این بخش باید این سوال رو در نظر بگیرید که آسیب‌پذیری مورد نظر، چطوری ایجاد می‌شه؟ سعی کنید حتی در سطح کد، آسیب‌پذیری رو بررسی کنید تا به صورت عمیق با مفهوم باگ آشنا بشید. وب‌سایت portswigger منبع خوبی برای یادگیری آسیب‌پذیری‌های مختلفه. همچنین از منابع مختلف برای یادگیری یک آسیب‌پذیری استفاده کنید و سعی کنید در یک محیط لوکال، آسیب‌پذیری رو شبیه‌سازی کنید تا به صورت مفهومی و خوب با آسیب‌پذیری آشنا بشید. در نهایت نکاتی که از مطالعه منابع مختلف یاد گرفتید رو به Mind Map اضافه کنید. کجا این آسیب‌پذیری رو پیدا کنیم؟ بعد از اینکه با مفهوم و علت به وجود اومدن آسیب‌پذیری به خوبی آشنا شدید، سعی کنید به این سوال فکر کنید که چه قسمت‌هایی از اپلیکیشن می‌تونه این آسیب‌پذیری رو داشته باشه؟ اگه با علت ایجاد باگ مورد نظر به خوبی آشنا شده باشید و در یک محیط لوکال تمرین کرده باشید، تا حد زیادی می‌تونید به جواب این سوال برسید. مطالعه‌ی رایت‌ آپ‌های مختلف هم می‌تونه در این زمینه به شما کمک کنه و باعث بشه تا با دید هکرهای مختلف آشنا بشید و بفهمید که آسیب‌پذیری در چه قسمتی از اپلیکیشن توسط باگ هانتر شناسایی شده است. درنهایت بعد از گذشت زمان، یک لیست کامل برای attack surface آسیب‌پذیری مورد نظر بدست خواهید آورد. تکنیک‌های اکسپلویت آسیب‌پذیری هر تکنیک یا روش حمله‌ی جدیدی که در منابع مختلف مثل کتاب‌ها و رایت آپ‌ها پیدا می‌کنید، به Mind Map اضافه کنید. Automation سرعت عمل در ریکان و فرآیند کشف آسیب‌پذیری اهمیت زیادی داره و باید بتونید روند کشف و اکسپلویت آسیب‌پذیری‌های مختلف رو به صورت اتومات و با سرعت بیشتری نسبت به بقیه انجام بدید. این کار باعث می‌شه تا آسیب‌پذیری‌هایی که در سیستم به صورت بدیهی وجود دارند، با سرعت بیشتری پیدا بشن و بتونید زودتر گزارش کنید. به عنوان مثال، برای یک آسیب‌پذیری مثل SSRF می‌تونیم یک Mind Map  کلی به صورت زیر در نظر بگیریم: در لینک زیر هم می‌تونید یک Mind Map کامل برای این آسیب‌پذیری رو ببینید: https://raw.githubusercontent.com/hackerscrolls/SecurityTips/master/MindMaps/SSRF.png

از الگوی حمله‌ی باگ هانترهای دیگه کمک بگیرید

رایت آپ‌ها و ریپورت‌های زیادی درباره‌ی آسیب‌پذیری‌های مختلف وجود داره. نکته‌ی مهمی که باید در نظر بگیرید، اینه که در هر رایت آپ یا ریپورت سعی کنید با دید و الگوی حمله‌ی باگ هانتر آشنا بشید. خودتون رو به جای باگ هانتر قرار بدید و بپرسید که در این رایت آپ و یا ریپورت، چه قسمتی یا کدوم functionality از اپلیکیشن تست شده؟ آیا می‌تونم از این الگوی حمله در اپلیکیشن‌های مختلف هم استفاده کنم؟ زمانی که با یک الگوی حمله آشنا بشید، بعد از مدتی در کنار تجربه‌ای که خودتون از تست وب اپلیکیشن‌های مختلف بدست خواهید آورد، یک دانش خوب هم از الگوی حمله‌ی باگ هانترهای مختلف بدست میارید. پس موقع بررسی هر ریپورت یا رایت آپ، سعی کنید جواب این دو سوال رو پیدا کنید:
  • کدوم functionality از تارگت مورد تست قرار گرفته؟ 
  • الگوی حمله‌ی هکر برای اکسپلویت این Functionality چی بوده؟
به عنوان مثال، فرض کنید می‌خوایم یک ریپورت رو بررسی کنیم. در اینجا من یک ریپورت از Frans Rosén رو بررسی می‌کنم که در این ریپورت، باگ هانتر دامین اصلی برنامه Semrush در هکروان رو بررسی کرده :

https://hackerone.com/reports/403417

در این ریپورت، باگ هانتر یک آسیب‌پذیری از نوع RCE در Logo Upload یا آپلودر تارگت پیدا کرده که تا اینجای کار می‌فهمیم functionality مورد تست باگ هانتر، Uploader اپلیکیشن بوده و این functionality در بسیاری از وب اپلیکیشن‌های دیگه هم وجود داره.  پس می‌تونیم ازاین الگوی حمله در بسیاری ازتارگت‌های دیگه استفاده کنیم. در ادامه ی ریپورت، می‌بینیم تارگت از ورژن آسیب‌پذیر imageMagick استفاده می‌کرده. ( imageMagick یک ابزار open source هست که برای کار کردن با تصاویر مثل ویرایش عکس و... در یک وب اپلیکیشن ازش استفاده می‌شه). ورژن آسیب پذیر این برنامه این امکان رو به هکر میده که یک فایل از نوع عکس آپلود بکنه و به یک Reverse Shell برسه. در اینجا قصد ندارم به جزییات فنی بپردازم و هدفم شیوه‌ی درک الگوی حمله‌ی یک هکره. الگوی حمله ی هکر در اینجا به این صورت بوده که بررسی کرده و دیده که قابلیت آپلود تصویر در این دامین وجود داره و احتمال داده که تارگت ممکنه از imageMagick استفاده کنه (معمولا از این برنامه در اپلیکیشن‌هایی استفاده می‌شه که قابلیت ویرایش و دست‌کاری تصویر برای یوزر وجود داره). در نهایت باگ هانتر برای تست آسیب‌پذیری، یک فایل jpg درست کرده و داخل این فایل یک کد postscript قرار داده و عکس رو آپلود کرده و تونسته به یک reverse shell برسه. بدون توجه به جزییات، به طور ساده الگوی حمله باگ هانتر، آپلود یک تصویر مخرب در تارگتی بوده که از ورژن آسیب پذیر imageMagick استفاده می‌کرده. در اینجا ما functionality و الگوی حمله‌ی باگ هانتر رو شناختیم. کافیه این دو مورد رو به Mind Map خودمون اضافه کنیم و در کنار چک لیست‌های دیگه‌ای که برای تست آپلودرها استفاده می‌کنیم، از این الگوی حمله هم استفاده کنیم. این یک مثال از بررسی یک گزارش بود. پس سعی کنید در گزارش‌ها و رایت آپ‌های مختلف، با دید و الگوی حمله‌ی باگ هانتر آشنا بشید.

مشکل پیدا نکردن باگ در تارگت رو شناسایی کنید

یک سوال اساسی که بعضی وقت‌ها برای ما پیش میاد اینه که چرا نمی‌تونیم آسیب‌پذیری در تارگت پیدا کنیم و یا به طور کامل یک آسیب‌پذیری رو اکسپلویت کنیم؟ در اینجا سه عامل اصلی که باعث می‌شن نتونیم از تارگت باگ پیدا کنیم و یا به طور کامل باگی رو اکسپلویت کنیم رو با هم بررسی می‌کنیم :
  • نداشتن دانش کافی درباره‌ی مفاهیم پایه یا بنیادی وب
  • نداشتن اطلاعات کافی از تارگت یا ریکان ناقص
  • نداشتن اطلاعات کافی درباره‌ی آسیب‌پذیری یا فهم نادرست باگ
هر کدوم از این موارد رو با مثال براتون توضیح می‌دم. حالت‌های زیر رو در نظر بگیرید:
  • اکسپلویت توسط CSP بلاک شده و من نمی‌دونم چطوری این مکانیزم رو دور بزنم:
مشکل: نداشتن دانش کافی در مفاهیم اصلی یا بنیادی وب:  در اینجا CSP یا Content Security Policy یک مکانیزم امنیتی مرورگره که برای جلوگیری از بعضی حملات در وب استفاده می‌شه. پس ابتدا باید با این مکانیزم آشنا بشیم و بعد بریم سراغ راهی برای دور زدن این مکانیزم تا بتونیم به طور کامل آسیب‌پذیری رو اکسپلویت کنیم.
  • درتارگت از Token-Based Authentication استفاده می‌شه. در قسمتی از اپلیکیشن که شامل اطلاعات حساس کاربران هست، هدر Origin به درستی در سمت سرور چک نمی‌شه و می‌شه از CORS برا دسترسی به اطلاعات حساس کاربران استفاده کرد اما نمی‌دونم چرا اکسپلویت کار نمی‌کنه.
مشکل: نداشتن اطلاعات کافی درباره‌ی آسیب‌پذیری یا فهم نادرست باگ:  حملاتی مثل CORS و CSRF حملاتی هستند که نیاز به session cookie قربانی دارند و این حملات در اپلیکیشن‌هایی معنی دارند که فرآیند احراز هویت کاربر به صورت cookie-based باشه. در یک اپلیکیشن که فرآیند احراز هویت با ارسال توکن مثل JWT در یک HTTP Header انجام می‌شه، اکسپلویت چنین حملاتی در حالت عمومی ممکن نیستند و باید از سناریوهای حمله‌ی دیگه‌ای استفاده کنیم. سعی کنید موقعی که یک آسیب‌پذیری رو بررسی می‌کنید، ببینید که در چه Contextای ممکنه برای اکسپلویت این آسیب‌پذیری به مشکل بربخورید و همیشه حالت‌های مختلف رو در نظر بگیرید.
  • ساب دامین‌های x و y از تارگت آسیب‌پذیری خاصی ندارند پس بی‌خیال این تارگت بشیم و بریم سراغ یک برنامه‌ی دیگه.
مشکل: نداشتن اطلاعات کافی از تارگت یا ریکان ناقص:  یک تارگت ممکنه scope وسیعی داشته باشه به خصوص زمانی ‌که دارید کمپانی‌های بزرگ رو تست می‌کنید. نکته‌ای که باید در نظر بگیرید اینه که سعی کنید تا حد امکان scope تارگت رو با جمع‌آوری ساب دامین‌های مختلف، گسترده‌تر کنید. بعضی از سرویس‌های تارگت، سرویس‌هایی هستند که به صورت مرتب ممکنه آپدیت نشن و می‌تونید آسیب‌پذیری‌های خوبی از این سرویس‌ها پیدا کنید. شاید یک تارگت رو بررسی کنید و هیچ مشکلی نداشته باشید. یعنی هم ریکان رو کامل انجام دادید، هم با آسیب‌پذیری‌های مختلف وب به خوبی آشنا باشید و مفاهیم وب رو هم به خوبی بدونید ولی با تمام این موارد، باز هم نتونید از تارگت آسیب‌پذیری پیدا کنید. به خصوص زمانی ‌که تارگت شما امنیت بالایی داشته باشه. این تارگت‌ها تیم امنیتی خوبی دارند و مدام توسط باگ هانترهای مختلف از سراسر دنیا تست می‌شن. پس چطوری از این تارگت‌ها آسیب‌پذیری پیدا می‌شه؟ به عنوان مثال می‌تونید فیسبوک یا سرویس‌های گوگل رو در نظر بگیرید. در این نوع تارگت‌ها باید سعی کنید کنار سه موردی که گفته شد، دید خلاقانه هم داشته باشید. سعی کنید با منطق اپلیکیشن بازی کنید و با ترکیب آسیب‌پذیری‌های مختلف، به یک سناریوی حمله‌ی پیچیده برسید. در این مقاله سعی کردم تجریبات خودم و نکاتی رو بگم که می‌تونه به باگ هانترها و مخصوصا افرادی که تازه در این زمینه شروع به فعالیت کردند، کمک کنه. در مقاله ی بعدی، درباره ی نکات فنی‌تر و خاص‌تر اشاره می‌کنم تا بتونید در باگ هانتینگ بهتر عمل کنید. از طریق این آیدی @LogicalHunter می‌تونید در توییتر و تلگرام با من در تماس باشید.[/vc_column_text][/vc_column][/vc_row]