پایگاه دانش

چگونه از Server Side Request Forgery جلوگیری کنیم؟ معرفی حملات SSRF و انواع آن

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

SSRF چیست؟

 Server-Side Request Forgeryیک آسیب‌پذیری امنیتی در برنامه‌های وب است که به مهاجمان امکان می‌دهد از طریق سرور قربانی، درخواست‌های غیرمجاز به منابع داخلی یا خارجی ارسال کنند. در این حمله مهاجم سرور را فریب می‌دهد تا درخواست‌هایی را به آدرس‌های دلخواه ارسال کند که این درخواست‌ها می‌توانند شامل خواندن داده‌های حساس، اجرای دستورات خاص یا برقراری ارتباط با سیستم‌های داخلی باشد که معمولاً از دسترس کاربران خارجی خارج هستند. این آسیب‌پذیری اغلب در برنامه‌هایی که ورودی‌های کاربر را برای انجام درخواست‌های HTTP پردازش می‌کنند، مانند APIها، وب‌هوک‌ها و سیستم‌های دانلود فایل مشاهده می‌شود.

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

SSRF چیست؟

حملات SSRF چه تأثیری دارند؟

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

SSRF چگونه کار می‌کند؟

SSRF چگونه کار می‌کند؟

  1. ارسال درخواست مخرب:

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

  1. دسترسی به منابع داخلی:

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

  1. نشت اطلاعات یا سوءاستفاده از سرویس‌ها:

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

  1. گسترش حمله:

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

انواع حملات SSRF

  • حملات SSRF علیه خود سرور

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

به عنوان مثال، فرض کنید یک فروشگاه آنلاین دارای API خاصی برای بررسی موجودی کالا است و درخواست‌های کاربران را به یک URL مشخص ارسال می‌کند. مهاجم می‌تواند این درخواست را تغییر داده و آدرس آن را به یک صفحه‌ی مدیریتی داخلی تنظیم کند. اگر اپلیکیشن به درخواست‌های داخلی اعتماد داشته باشد، محتویات صفحه‌ی مدیریتی برای مهاجم ارسال می‌شود. این موضوع می‌تواند باعث افشای اطلاعات مهم یا حتی کنترل کامل سرور توسط مهاجم شود.

انواع حملات SSRF

  • حملات SSRF علیه سیستم‌های بک‌اند

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

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

مثال عملی از حمله SSRF

  1. یافتن نقطه آسیب‌پذیر

مهاجم ابتدا یک صفحه وب را که امکان دریافت یک URL و فچ کردن (fetch) محتوا از آن را دارد، شناسایی می‌کند. برای مثال، فرض کنید یک API در سرور وجود دارد که درخواست‌های زیر را می‌پذیرد:

				
					POST /fetch-image HTTP/1.1  
Host: example.com  
Content-Type: application/json  
{
"url": "http://example.com/profile.jpg"
}

				
			

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

۲. ارسال درخواست مخرب

مهاجم به جای ارسال یک لینک معتبر، یک URL داخلی را که معمولاً در دسترس کاربران خارجی نیست، ارسال می‌کند. برای مثال: 

				
					{
"url": "http://localhost:8080/admin"
}
				
			

اگر سرور این درخواست را بدون بررسی بپذیرد، می‌تواند به صفحات داخلی (مانند داشبورد مدیریتی) یا منابع حساس سرور دسترسی پیدا کند.

۳. استخراج اطلاعات داخلی

در صورتی که سرور محتوای این صفحه داخلی را به مهاجم برگرداند، او می‌تواند اطلاعات مهمی مانند تنظیمات سرور، اطلاعات دیتابیس، و حتی کلیدهای احراز هویت را استخراج کند. 

۴. اجرای حملات پیشرفته‌تر

مهاجم ممکن است از این روش برای: 

  • اسکن شبکه داخلی و شناسایی سرویس‌های داخلی
  • دسترسی به سرویس‌های داخلی مثل Redis یا AWS metadata
  • اجرای دستورات بر روی سرور آسیب‌پذیر (در صورت امکان)

چگونه از حمله SSRF جلوگیری کنیم؟

۱. استفاده از لیست سفید (Allowlist)

به جای اجازه دادن به هر URL باید لیستی از دامنه‌ها و آدرس‌های مجاز تعیین شود. به این ترتیب، فقط آدرس‌های مورد تأیید سرور پردازش می‌شوند و درخواست‌های مخرب به منابع داخلی مسدود خواهند شد.

استفاده از لیست سفید (Allowlist)

۲. مسدود کردن دسترسی به آدرس‌های داخلی

سرورها نباید بتوانند به آدرس‌های داخلی مانند localhost دسترسی داشته باشند. این کار می‌تواند با اعمال محدودیت در سطح DNS یا فایروال انجام شود.

۳. اعتبارسنجی و پاک‌سازی ورودی‌ها

هر ورودی که از سوی کاربر دریافت می‌شود باید به دقت اعتبارسنجی و فیلتر شود تا اطمینان حاصل شود که درخواست‌های غیرمجاز به سرور ارسال نمی‌شوند. بررسی پروتکل (مثل مسدود کردن file:// و gopher://) و حذف کاراکترهای مخرب از جمله اقدامات مهم در این زمینه هستند.

۴. محدود کردن قابلیت‌های سرور

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

۵. استفاده از فایروال و WAF

استفاده از Web Application Firewall (WAF) و فایروال‌های شبکه می‌تواند درخواست‌های مشکوک را شناسایی کرده و مسدود کند. همچنین، این ابزارها می‌توانند الگوهای رفتاری غیرعادی را تشخیص داده و جلوی حملات را بگیرند.

استفاده از فایروال و WAF

۶. غیرفعال کردن ردایرکت‌های غیرضروری

در برخی موارد، مهاجمان از هدایت‌های خودکار (Redirects) برای دور زدن محدودیت‌های امنیتی استفاده می‌کنند. برای جلوگیری از این موضوع، سرور نباید بدون بررسی مجدد، درخواست‌های ردایرکت را دنبال کند.

جمع‌بندی…

حملات SSRF (Server-Side Request Forgery) یکی از تهدیدات جدی برای امنیت برنامه‌های تحت وب محسوب می‌شوند، زیرا می‌توانند به مهاجمان اجازه دهند تا به منابع داخلی سرور دسترسی پیدا کنند و اطلاعات حساس را افشا کنند. این حملات معمولاً از طریق ارسال درخواست‌های مخرب به سرور و سوءاستفاده از ضعف‌های امنیتی در پردازش ورودی‌ها انجام می‌شوند.

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

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

دیدگاه