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

08 ژانویه 2021

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

CDN چیست؟

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

چرا به CDN نیاز داریم؟

عملکرد وب سایت مهم است، اگر وب سایت از CDN استفاده نکند، همه کاربران باید درخواست‌های خود را به یک سرور ارسال کنند، چون این کار بار زیادی را بر روی سرور وارد می‌کند، عملکرد وب سایت کاهش می یابد. امروزه اکثر وب سایت‌ها از CDN استفاده می کنند، زیرا به آنها کمک می کند تا مطالب سایت خود را با سرعت بیشتری ارائه دهند.

مزایای استفاده از CDN

1- سرعت بالاتر لود شدن وب سایت
2- کاهش هزینه‌های پهنای باند
3- افزایش امنیت وب سایت
4- بهبود سئو
5- افزایش ترافیک و مقیاس پذیری

بنابراین اگر می خواهید یک وب سایت قابل اعتماد با عملکرد خوب داشته باشید ، باید استفاده از CDN را در نظر بگیرید.

پس از استفاده از CDN، تمام کاربران نسخه Cache شده محتوای مورد نظر را از نزدیکترین سرور CDN دریافت می کنند، بنابراین مطالب بسیار سریعتر بارگیری می شوند و عملکرد وب سایت بهبود می یابد.

CDN Reverse Proxy

Reverse Proxy سروری است که درخواست یوزر را به سرور backend هدایت می کند و یک سرور واسطه بین یوزر و سرور مبدا است. سرو‌رهای CDN قادر به تحویل سریعتر دیتا به بازدیدکنندگان هستند.

امنیت CDN

CDN‌ها به تنهایی قابلیت امن سازی وب سایت را ندارند و میتوانند به تنهایی آسیب پذیر باشند بنابراین باید در کنار آنها از WAF استفاده کرد.
WAF ترافیک بین کلاینت و سرور را بررسی میکند و اگر متوجه موارد مشکوکی که از قبل برایش تعریف شده است شود ترافیک را Drop میکند. WAF میتواند برخی از حملات وب مانند XSS, SQL Injection, File Inclusion را تا حدودی کنترل کند.

Website Origin IP

بسیاری از وب سایت‌ها برای جلوگیری از حملات DDoS و سایر اقدامات مخربی که مهاجمان می توانند انجام دهند، از روش‌های بالا برای پنهان کردن IP خود استفاده می کنند.
این وب سایت‌ها عمدتا از سرویس‌های مبتنی بر امنیت ابری، پراکسی یا DNS استفاده می کنند که پیدا کردن IP وب سرور را کمی مشکل می کند.

چرا به IP وب سرور نیاز داریم؟

عکس بالا را با عکس مرحله قبل مقایسه کنید، جواب بسیار ساده است وقتی IP وب سرور را داشته باشیم میتوانیم تمامی Protection‌هایی که CDN فراهم کرده است را بایپس کنیم.

روش‌های پیدا کردن IP وب سرور

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

Reverse Engineering

هر زمان که می خواهید چیزی را دور بزنید، خود را به جای رقیب خود قرار دهید و روند تفکر خود را برعکس کنید، به عنوان یک متخصص امنیت (Blue Teamer) فکر کنید و سعی کنید از راهکار‌‌های امنیتی آنها مطلع شوید.

راهکار‌های تدافعی

لیست زیر برخی از راهکار‌های امنیتی است که CDN Provider‌ها و Blue teamer‌ها ارائه میدهند .

  • نگه داری تمامی Subdomain‌ها تحت CDN

توجه مهاجمان همیشه بر روی Subdomain‌ها وجود دارد چرا که ممکن است دقت و نظارت کافی بر روی آنها همانند Root Domain نشده باشد. اگر یک Subdomain تحت CDN نباشد میتواند باعث درز اطلاعات و فاش شدن Origin IP شود.

  • برقرار نکردن Outbound Connection

اگر بتوانیم یک وب سرور را مجبور به برقراری ارتباط به یک آدرس دلخواه تحت کنترل کنیم میتوانیم Origin IP را پیدا کنیم. قابلیت‌هایی از جمله “Upload from URL” پیاده سازی میشود تا به یوزر اجازه آپلود عکس از URL دلخواه را بدهد، اگر مهاجم بتواند این مقدار را به URL دلخواه خود تغییر دهد میتواند فرآیند‌های مختلفی را از جمله پیدا کردن Origin IP انجام دهد.

  • تغییر دادن Origin IP هنگام تنظیم CDN

DNS Records‌ها محلی برای ذخیره همیشگی رکورد‌های تاریخی هستند، در این DNS Record‌ها Origin IP وب سرور ذخیره میشود.

  • محدود کردن دسترسی به وب ‌سایت از طریق IP

یکی دیگر از گزینه‌های جالب مدافعان ، محدود کردن کاربران جهت دسترسی به وب سایت با استفاده از IP Address است، بنابراین وب سایت فقط در صورت ارائه Domain Name باز می‌شود. بیایید بررسی کنیم که چگونه می توانیم این کار را در Nginx انجام دهیم.

برای محدود کردن دسترسی مستقیم توسط IP به پورت 80 میتوانیم تنظیمات زیر را روی سرور انجام دهیم.

server {
 listen 80 default_server;
 server_name _;
 return 404;
}

برای محدود کردن دسترسی مستقیم توسط IP به پورت 443 میتوانیم تنظیمات زیر را روی سرور انجام دهیم.

if ($host != "example.com") {
 return 404;
}

مثال:

server {
 listen 443 ssl;
 server_name example.com
 
 ssl_certificate /etc/nginx/ssl/example.com.crt;
 ssl_certificate_key /etc/nginx/ssl/example.com.key;

 if ($host != "example.com") {
  return 404;
 }
}

این تنظیمات تمامی درخواست‌ها را به https://YOUR_IP_ADDRESS میبندد.

در ادامه با روشی جالب این محدودیت را دور میزنیم.

  • Whitelisting

یکی دیگر از راهکار‌های مدافعان برای دریافت درخواست‌هایی که فقط از سمت CDN ارسال میشود Whitelist کردن CDN است، این روش در نگاه اول ممکن است بسیار قابل اعتماد باشد ولی مشکلاتی را در پیش دارد، چرا که فقط 3 راه حل در این زمینه قابل پیاده سازی است و فقط یک مورد ممکن است به خوبی کار کند.

Option A: Whitelisting IP Address

مشکلی که در Whitelist کردن IP Address وجود دارد این است که آنها باید تمامی IP Address‌های سرو‎‌ر‌های CDN edge خود را داشته باشند.
این تا حدودی مشکل ساز است. بسیاری از CDN‌ها لیستی از آدرس‌های IP خود را ارائه نمی دهند و حتی اگر این کار را انجام دهند، ممکن است یک آدرس IP اضافه کنند یا حتی آن را تغییر دهند و فراموش کنند که به آنها اطلاع دهند. این لیست باید مرتبا به‌روز شود تا از مشکلات احتمالی جلوگیری کند.

Option B: Whitelisting a Unique Identifier in Request

ایده بسیار ساده است، CDN درخواست ارسالی خود را به همراه یک Unique Identifier ارسال میکند تا وب سرور بتواند آنرا تشخیص دهد، این روش خوبی نیست زیرا این درخواست میتواند به صورت آزاد تنظیم شود. در صورتی که CDN Provider مورد استفاده را بشناسیم و بدانیم که CDN Provider چگونه خود را به سرور مبدا معرفی می کند میتوانیم به راحتی این درخواست را جعل کنیم.

Option C: Unguessable Origin Hostname

این احتمالاً مطمئن ترین راه حل برای مدافعان است ، زیرا اگر مهاجمان سعی کنند به وب سرور دسترسی پیدا کنند ، دیگر نمی توانند آن را پیدا کنند. مدافعان با استفاده از Alphanumeric Characters یک مقدار رندوم را ایجاد می کنند و از آنها به عنوان Subdomain استفاده می کنند. به عنوان مثال ، اگر نام دامنه آنها “Memoryleaks.ir” باشد ، آنها نام فرعی مانند “2547d0jeid15ma.Memoryleaks.ir” را تنظیم می کنند.
سپس این Hostname فقط برای آنها و CDN Provider آنها شناخته خواهد شد و آنها می توانند درخواست‌هایی که با این Hostname ارسال میشوند را Whitelist کنند.

جمع بندی راهکار‌های دفاعی

Back to the Attacker Side

در بالا به بررسی راهکار‌های مدافعان برای محافظت از Origin Server پرداختیم، حال با دانستن این اطلاعات میتوانیم یک طرز فکر کلی از اقداماتی که میتوانیم به عنوان مهاجم انجام دهیم داشته باشیم.

عکس بالا بخشی از اقداماتی است که میتوانیم برای پیدا کردن Origin IP یک وب سرور انجام دهیم، در ادامه با بررسی جزئی آنها همراه خواهیم بود.

جمع آوری اطلاعات

مهمترین بخش کار، جمع آوری اطلاعات است که میتوانند راهنمای خوبی برای ادامه مسیر باشند بخشی از موارد مهمی که نیاز داریم به شرح زیر میباشد:

  • IP Ranges/CIDRs
  • Host Related Information
  • DNS Records
  • Web Servers
  • Vhosts
  • (Hosted Servers on the same server as the Web Server (Eg Mail Servers
  • Information Disclosure Vulnerabilities

همه‌چیز راجع به DNS Records

DNS Records‌ها مواردی هستند که در داخل آنها Historical Data‌ ذخیره میشود. Origin IP میتواند در این Historical Data‌ افشا شده باشد.
همانطور که قبلاً اشاره کردم ، این احتمال وجود دارد که برخی از وب سایت‌ها DNS Record‌های نا ‌امن داشته باشند که می توانیم اطلاعات مفیدی را از آنها جمع آوری کنیم.

SecurityTrails

SecurityTrails این قابلیت را به شما میدهد تا بتوانید راجع به Historical Data تارگت خود اطلاعاتی را از جمله IP Information, DNS History, SSL Certs جمع آوری کنید.

در ادامه میخوایم با استفاده از یک Query ساده اطلاعات مهمی راجع به تارگت خود جمع آوری کنیم، مهمترین آنها اطلاعات DNS Records‌ها هستند زیرا SecurityTrails به ما امکان بررسی رکورد‍‌های A, AAAA, MX, NS, SOA,TXT را میدهد.

این مورد در زمانی که یک وب سایت در ابتدا با IP وب سرور بالا آمده باشد و بعدا تحت CDN در آمده باشد بسیار مفید است.

سپس بر روی “Historical Data” کلیک کنید تا اطلاعات کاملی راجع به آن داشته باشید.

هیچ یک از رکورد‌های DNS نباید اطلاعاتی راجع به Origin IP بدهد، با دقت SPF رکورد‌ها و TXT رکورد‌‌ها را بررسی کنید تا مطمئن شوید هیچ درز اطلاعاتی وجود نداشته است.
هر کدام از A, AAA, CNAME, MX رکورد‌ها میتواند باعث درز اطلاعات و افشای Origin IP شده باشد.

Dig

با استفاده از Dig میتوانیم اطلاعات جالبی راجع به CDN Provider تارگت خود پیدا کنیم.

این IP Range مربوط به Cloudflare است برای بررسی و تایید این مورد میتوانیم از Whois استفاده کنیم.

یک راه دیگر برای بررسی اینکه تارگت از چه CDN Provider استفاده میکند استفاده از Curl است.

همه چیز راجع به MX Records

MX Records‌ها همیشه از موارد مورد علاقه مهاجمان بوده است زیرا گاهی اوقات میتوان به سادگی Origin IP را از آنها استخراج کرد. اگر Mail Server تحت IP وب سرور بالا آمده باشد، مهاجم میتواند با استفاده از یک Outgoing Email آدرس IP را به دست آورد.

Mail Headers & Reset Password

اگر Mail Server تحت IP وب سرور بالا آمده باشد، یک روش جالب استفاده از “Reset Password” است، بدین صورت که میتوانیم در سایت تارگت ثبت نام کنیم و با استفاده از “Reset Password” یک ایمیل از تارگت دریافت کنیم که در داخل این ایمیل Origin IP وجود خواهد داشت.

در ایمیل دریافتی چندین IP Address وجود دارد که باید تمامی آنها به صورت دستی تست شوند زیرا ممکن است هر یک از آنها Origin IP باشد. به مقدار Return-Path نیز توجه کنید زیرا میتواند جزو مهمترین موارد باشد.

Outgoing Emails

یک روش جالب دیگر ارسال یک ایمیل به یک آدرس نامعتبر است “non-existent@target.com”.
به علت اینکه همچین Email Address برای تارگت مورد نظر ما وجود ندارد، ایمیل ارسالی Delivery Failed میشود و یک نوتیفیکیشن از همان سرور به ایمیل ما ارسال میشود که در آن Origin IP سرور وجود دارد.

Virtual Hosts Discovery

پس از پیدا کردن وب سرور‌ها، یک لیست کامل از وب سرور‌ها و IP آنها دارید، حال باید بررسی کنید که دامین مورد نظر به صورت Virtual host بر‌روی این وب سرور‌ها تعریف شده است یا خیر.

برای پیدا کردن Virtual Hosts روش‌های متعددی وجود دارد، اگر از محیط گرافیکی لذت میبرید میتوانید از Pentest-Tools استفاده کنید و اگر با محیط CLI کار میکنید من ابزار‌های زیر را پیشنهاد میکنم.

با استفاده از این ابزار میتوانید وجود Vhost‌‌ها را بررسی کنید و اگر تارگت به عنوان Vhost تعریف شده باشد میتوانید Origin IP را پیدا کنید.

Security Misconfigurations

یک Configuration اشتباه میتواند به راحتی قابل اکسپلویت باشد، برای مثال، URL ای که داده‌های وب سایت به آن اشاره میکند یک URL ای باشد که تحت CDN نیست و میتواند با شما ارتباط بگیرد دقیقا مثل IP یک سرور.

سوال: اما به عنوان مثال می توان فقط با یک فایل CSS و نه چیز دیگری یک سرور راه اندازی کرد، چگونه می توان گفت که IP همان IP واقعی است که ما به دنبال آن هستیم؟

جواب: در ابتدا ما به دنبال هیچ IP واقعی از سرور پشت CDN نیستیم. ما به دنبال اطلاعاتی هستیم که آنها را تایید کنیم و پس از آن، نتیجه گیری خواهیم کرد.

به طور ساده و خلاصه ما دنبال IP‌هایی هستیم که تحت CDN نباشند.

IoT Search Engines

وقتی بخواهیم راجع به تارگت اطلاعات بیشتری بدست آوریم IoT Search Engines‌ها گزینه‌‌ی خوبی هستند. تعداد زیادی از آنها وجود دارد که در ادامه با برخی از آنها آشنا میشویم.

Censys

Censys اطلاعات با ارزشی راجع به دستگاه‌های متصل به اینترنت میدهد، از جمله آنها:

  • IP Address
  • Open Ports
  • SSL Certs
  • Hosting Providers

Query مربوط به موضوع نوشتار بسیار ساده است، میتوانیم فقط نام Domain را سرچ کنیم و بررسی کنیم که آیا IP جایی افشا شده است یا خیر.

روش دیگر برای استفاده جستجو در SSL Certificates‌ها است، فقط کافیست Certificates را از نوار آبی انتخاب کنید و دامین تارگت خود را جستجو کنید.

حال باید تمامی نتایج را بررسی کنید و از منو سمت راست “Explore” بر روی گزینه “IPv4 Hosts” کلیک کنید.

نتایج را بررسی کنید تا ببینید آیا Origin IP جایی افشا شده است یا خیر، همینطور تلاش کنید با استفاده از آن IP‌ها به سایت مورد نظر دسترسی پیدا کنید.

نمونه زیر تارگتی است که من با استفاده از Censys موفق شدم به سادگی Origin IP را بدست بیاورم.

Shodan

یکی دیگر از این IoT Search Engine‌ها Shodan است، Shodan میتواند اطلاعات بسیار ارزشمند و کاملی را در اختیار ما قرار‌دهد.
پیشنهاد میکنم حتما این لینک را مطالعه کنید تا با Searching Query‌های آن بیشتر آشنا شوید.
در ادامه یک Query ساده بر‌روی Domain تارگت انجام میدهیم.

با استفاده از Shodan میتوانیم به موارد دیگری از جمله موارد زیر دسترسی داشته باشیم:

  • Organizations
  • ASNs
  • Favicon Hashes
  • SSL Certificates

Direct Access to the website Using IP Address

همانطور‌که قبلا اشاره کردم:

یکی دیگر از گزینه‌های جالب مدافعان، محدود کردن کاربران جهت دسترسی به وب سایت با استفاده از IP Address است، بنابراین وب سایت فقط در صورت ارائه Domain Name باز می‌شود.

بیایید “Outside the box” فکر کنیم. چه اتفاقی می‌افتد اگر IP Range ارائه دهنده CDN تارگت را اسکن کنیم و سپس با استفاده از Curl و ارسال یک Header مشکل را حل کنیم؟

برای پیدا کردن IP Range باید از DNS Brute-forcing استفاده کنیم و سپس میتوانیم با استفاده از دستور زیر ادامه دهیم:

در دستور بالا IP Range تارگت را اسکن میکنیم و با استفاده از Httpx دامین‌های Live را پیدا میکنیم، سپس با استفاده از Curl یک Host Header شامل دامین تارگت مورد نظر ارسال میکنیم، بنابراین تمامی محدودیت‌ها دور زده میشود.

Favicon Hashes

Favicons گاهی اوقات برای پیدا کردن اطلاعات جالب در مورد تکنولوژی‌های خاصی که وب سایت از آنها استفاده می کند مفید است.
Shodan به ما اجازه جست‌و‌جو توسط Favicon hash را با دستور زیر http.favicon.hash میدهد.
مقدار Hash به MurmurHash3 از فایل Favicons به صورت Base64 Encoded اشاره میکند.

اسکریپت پایتون برای Generate کردن Hash:

import mmh3
import requests
import codecs

response = requests.get('https://<website>/<favicon path>')
favicon = codecs.encode(response.content, 'base64')
hash = mmh3.hash(favicon)
print(hash)

برای اطلاعات بیشتر راجع به این موضوع به این لینک مراجعه کنید.

یک ابزار جالب دیگر Fav-Up است. با استفاده از این ابزار میتوانیم Origin IP را از Favicon Hashes استخراج کنیم، این ابزار از Shodan استفاده میکند.

XML-RPC Pingback

XML-RPC به مدیران این امکان را می دهد تا وب سایت وردپرس خود را از راه دور با استفاده از درخواست‌های XML مدیریت کنند.
Pingback پاسخ یک Ping است. وقتی سایت A به سایت B اشاره میکند، یک Ping انجام می شود ، سپس سایت B به سایت A اطلاع می دهد که از آن آگاه است. این Pingback است.

برای بررسی فعال بودن آن میتوانید به راحتی به https://www.target.com/xmlrpc.php درخواست بدهید، اگر فعال باشد پیغام زیر را مشاهده میکنید:
XML-RPC server accepts POST requests only.

راه دیگر برای بررسی فعال بودن آن استفاده از XML-RPC Validator است.

با توجه به WordPress XML-RPC Pingback API این تابع 2 پارامتر میگیرد sourceUri و targetUri.
در شکل زیر میتوانید نمونه درخواست را در Burp Suite مشاهده کنید:

جمع بندی

سعی خودم را کردم که با تمامی چالش‌های این موضوع آشنا شوید، دراین مقاله راهکار‌های دفاعی و طرز فکر مدافعان به همراه روش‌هایی که مهاجم میتواند با استفاده از آنها Origin IP را بدست آورد را بررسی کردیم.

امیدوارم لذت برده باشید 🙂

2 پست نوشته شده
باگ هانتر، عاشق امنیت و حل مشکلات غیر ممکن 🙂
  • به اشتراک بگذارید:
  1. محمد صالح سوزنچی گفت:

    عالی بود، لذت بردم

  2. Mohammad گفت:

    کیف کردم.. خسته نباشید.

  3. darkcoder گفت:

    خیلی خوب بود بیشتر مطلب بزارین ممنون

  4. سجاد گفت:

    سلام
    عالی بود

  5. حدیثه حداد گفت:

    خیلی خوب و مفید بود.
    ممنون ازتون

  6. […] مثال سایت‌های دولتی) و هدف اصلی امنیت می‌باشد. در اینجا عماد به طور کاملا جامع یکی از رایج‌ترین حملات به […]