کشف هاست اصلی (مبدا) برای دور زدن WAF

TL/DR: محقق امنیتی‌ای به‌نام Luke Stephens a.ka. hakluke ابزاری را برای کشف هاست اصلی در پشت پروکسی معکوس مستند می‌کند که برای دور زدن WAFها و پروکسی‌های معکوس کاربرد دارد.

ما همه آنجا بوده‌ایم؛ شما با یک قهوه کاملا گرم روی صندلی راحت و دوست‌داشتنی اداری خود می‌نشینید و آماده شروع تست نفوذ یک برنامه وب جدید هستید. شما به طور غریزی ”><img src=x onerror=alert()> را در نوار جستجو می‌نویسید و بلافاصله با این صفحه آشنا استقبال می‌شوید.

شما توسط  WAFبلاک شده‌اید. حالا چی؟ اینجا رو ترک می‌کنید؟ نه! محققان امنیتی این کار را انجام نمی‌دهند، آنها تلاش خود را ادامه می‌دهند

پیاده‌سازی متداول WAF

رایج‌ترین پیاده‌سازی WAF که من می‌بینم، اجرای ساده WAF به عنوان یک پروکسی معکوس است همانطور که در نمودار زیر نشان داده شده است:

هدایت مجدد ترافیک از طریق WAF معمولا با استفاده از DNS انجام می‌شود. نام هاست معمولا یک CNAME یا  Aخواهد بود که به WAF اشاره می‌کند و سپس WAF می‌تواند تصمیم بگیرد که براساس هدر هاست، درخواست را به کدام وب سرور ارسال کند.

مشکل

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

دور زدن WAF

پیدا کردن آدرس IP

روش‌های مختلفی برای یافتن آدرس IP مبدا وجود دارد، از جمله:

  • بررسی سوابق DNS از سرویسی مانند SecurityTrails.
  • سوء‌استفاده از SSRF در برنامه وب
  • افشای اطلاعات (برای مثال در پیام‌های خطا)

در این پست بلاگ، روش متفاوتی را بررسی خواهیم کرد. برای این مثال، ما از tesla.com به عنوان تارگت استفاده خواهیم کرد. – اما من هیچ اطلاعات حساسی را افشا نخواهم کرد. جستجوی سریع در تارگت، چندین آدرس IP را نشان می‌دهد.

hakluke$ dig tesla.com +short

23.201.26.71

104.86.104.55

104.89.119.127

2.20.92.122

184.30.18.203

184.50.204.169

انتقال این آدرس‌های IP به IPinfo نشان می‌دهد که آدرس‌های IP همانطور که حدس زدید، متعلق به Akamai است.

دور زدن WAF

اگر به دنبال یافتن آدرس IP وب سرور مبدا tesla.com بودم، اولین کاری که می‌کردم این بود که لیستی از آدرس‌های IP مرتبط با سازمان را دریافت کنم. باز هم راه‌های زیادی برای انجام این کار وجود دارد اما یکی از این راه‌ها جستجوی جزئیات ASN سازمان است. برای اثبات اهداف، من از ابزار جستجوی HackerTarget ASN در https://hackertarget.com/as-ip-lookup/ استفاده کردم. چند سازمان مختلف با نام تسلا وجود دارد اما ” تسلا، ایالات متحده (US)” سازمانی است که ما به دنبال آن هستیم.

نتایج، مجموعه‌ای از آدرس‌هایIP  مرتبط با تسلا را نشان می‌دهد.

199.120.52.0/24

213.19.141.0/24

199.120.53.0/24

199.43.255.0/24

199.66.10.0/24

199.120.48.0/24

8.47.24.0/24

8.244.131.0/24

62.67.197.0/24

2620:137:d000:1::/64

199.120.50.0/24

8.45.124.0/24

8.244.67.0/24

205.234.11.0/24

199.120.51.0/24

8.21.14.0/24

213.244.145.0/24

199.66.11.0/24

199.120.56.0/24

199.66.9.0/24

209.133.79.0/24

199.120.49.0/24

عالی! اکنون لیستی از آدرس‌های IP داریم که ممکن است یکی از آن‌ها سرور مبدا tesla.com باشد! گام بعدی این است که به طور سیستماتیک همه این آدرس‌های IP را بررسی کنید تا ببینید آیا آن‌ها وبسایت tesla.com  را برمی‌گردانند یا خیر. متاسفانه چند مورد وجود دارد که انجام این کار را دشوار می‌کند از جمله:

  1. ممکن نیست انتقال مستقیم به آدرس IP وبسایت صحیح را بازگرداند زیرا بسیاری از وب سرورها از هاست‌های مجازی استفاده می‌کنند.
  2. هزاران آدرس IP برای مرتب‌سازی وجود دارد، انجام این کار به صورت دستی بسیار طول می‌کشد.
  3. ما نمی‌توانیم به صورت مستقیم پاسخ اصلی را با پاسخ IP مقایسه کنیم، زیرا بسیاری از صفحات در هر بار بارگذاری پاسخ‌هایی کمی متفاوت نشان می‌دهند. (به عنوان مثال، nonces)

خوشبختانه برای تمامی این مشکلات راه‌حل‌هایی وجود دارد.

  1. ما می‌توانیم هدر هاست را به هر درخواست با نام هاست اصلی که باید وبسایت را صحیح برگرداند، اضافه کنیم حتی اگر مستقیما به آدرس IP دسترسی داشته باشیم.
  2. ما می‌توانیم ابزاری بنویسیم که این کار را برای بیش از هزار هاست انجام دهد. (از قبل دارم!)
  3. برای مقایسه‌ی بایت به بایت پاسخ‌ها، می‌توانیم از الگوریتم Levenshtein برای تعیین شباهت استفاده کنیم.

Hakoriginfinder

Hakoriginfinder یک ابزار golang برای کشف هاست مبدا در پشت یک پراکسی معکوس است که برای دور زدن WAFها و سایر پراکسی‌های معکوس مفید است. شما لیستی از آدرس‌های IP (از طریق stdin ) را همراه با نام هاست ارائه می‌دهید و آن درخواست‌های HTTP و HTTPS را برای هر آدرس IP ایجاد می‌کند و سعی می‌کند با مقایسه پاسخ‌ها با پاسخ وبسایت واقعی، هاست اصلی و پاسخ‌های مشابه با استفاده از الگوریتم Levenshtein را پیدا کند.

شما می‌توانید ابزار را اینجا ببینید: https://github.com/hakluke/hakoriginfinder

راه‌حل

بهترین راه‌حل برای دور زدن این نوع WAF این است که آدرس‌های IP ارائه ‌دهنده WAF روی وب سرور را در لیست سفید قرار دهید. سرور مبدا نباید از جایی به جز WAF قابل دسترس باشد که همه را مجبور کنند حتی اگر آدرس IP سرور مبدا را بدانند، از WAF استفاده کنند. ارائه دهندگان WAF معمولا آدرس‌های IP را که باید در لیست سفید قرار دهند، فهرست می‌کنند. به عنوان مرجع، در اینجا لینک‌های مربوط به Akamai, Imperva  وCloudFlare وجود دارد.

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

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