جعل درخواست سمت سرور
جعل درخواست سمت سرور[ویرایش]
حمله جعل درخواست سمت سرور (SSRF) نوعی از بهرهبرداری امنیتی رایانهای است که در آن مهاجم از عملکرد سرور سوءاستفاده میکند و باعث میشود که سرور به اطلاعاتی دسترسی پیدا کند یا آنها را دستکاری کند که در غیر این صورت بهطور مستقیم برای مهاجم قابل دسترسی نیستند.
مشابه جعل درخواست بینسایتی (CSRF) که از یک کلاینت وب، مانند مرورگر وب، بهعنوان واسطه برای حملات استفاده میکند؛ حمله SSRF از یک سرور آسیبپذیر درون دامنه بهعنوان پراکسی استفاده میکند.
اگر یک پارامتر از یک URL به این حمله آسیبپذیر باشد، ممکن است مهاجم بتواند راههایی برای تعامل مستقیم با سرور (از طریق localhost) یا با سرورهای پشتیبان که توسط کاربران خارجی قابل دسترسی نیستند، ایجاد کند. مهاجم میتواند عملاً کل شبکه را اسکن کرده و اطلاعات حساس را بازیابی کند.
مدل ها[ویرایش]
پایه ای[ویرایش]
در این نوع حمله، پاسخ به مهاجم نمایش داده میشود. سرور URL درخواست شده توسط مهاجم را بازیابی کرده و پاسخ را به مهاجم ارسال میکند.
کور[ویرایش]
در این نوع حمله، پاسخ به مهاجم ارسال نمیشود. بنابراین، مهاجم باید روشهایی را برای تأیید این آسیبپذیری ابداع کند.
مراحل[ویرایش]
- بهرهبرداری از ناهماهنگیها: مهاجم یک نقطه پایانی آسیبپذیر در یک برنامه وب را شناسایی میکند. این میتواند، به عنوان مثال، یک نقطه پایانی باشد که منابع خارجی مانند تصاویر یا صفحات وب را بازیابی میکند.
- ساخت payload: مهاجم یک URL مخرب را با هدف قرار دادن منابع داخلی ایجاد میکند. این URL میتواند localhost (127.0.0.1) یا سایر IPهایی که به منابع داخلی اشاره دارند، مانند 10...* یا 192.168..، را هدف قرار دهد.
- دور زدن فیلترها: اگر فیلترهایی در کار باشند، مهاجم ممکن است روشهای مختلفی را برای دور زدن آنها امتحان کند. به عنوان مثال، با استفاده از یک آدرس IP به جای "localhost" یا با به کار بردن طرحها و رمزگذاریهای مختلف URL.
- بازیابی منابع داخلی: سرور آسیبپذیر URL مخرب را پردازش کرده و یک درخواست به منبع داخلی هدفمند ارسال میکند. این میتواند به افشای خدمات داخلی، پایگاههای داده، یا حتی متادیتای خاص ابری منجر شود، همانطور که در مورد آسیبپذیری IMDS در پلتفرمهای ابری مشاهده میشود.
- تخلیه دادهها: بسته به نوع SSRF و پاسخها، مهاجم ممکن است بتواند دادههایی در مورد شبکه داخلی یا خدمات را دریافت یا استنباط کند
مثال ها[ویرایش]
فرض کنید یک برنامه وب دارید که تصاویر را از URLها دریافت و نمایش میدهد. کاربر میتواند یک URL وارد کند و سرور تصویر را دانلود و نمایش میدهد. استفاده مورد انتظار:
- ورودی کاربر:
http://somesite.com/image.jpg
- سرور دریافت و نمایش میدهد:
image.jpg
حمله SSRF:
- ورودی مهاجم:
http://localhost/admin
- اگر به درستی محافظت نشده باشد، سرور ممکن است سعی کند محتوای پنل مدیریت محلی خود را بازیابی کند، که در نتیجه میتواند دادههای حساس را فاش کند.
تدابیر محافظتی[ویرایش]
لیست سفید:
- فقط به URLها و میزبانهایی که میدانید امن هستند اجازه دسترسی دهید.
- این لیست سفید باید شامل دامنههای قابل اعتماد و معتبر باشد و دسترسی به URLهای دیگر را مسدود کند.
مسدود کردن IPهای خصوصی:
- اطمینان حاصل کنید که منطق برنامه از درخواست به فضاهای آدرس IP خصوصی جلوگیری میکند.
- آدرسهای IP خصوصی شامل محدودههای
10.*.*.*
،172.16.*.* - 172.31.*.*
و192.168.*.*
هستند.
حداقل دسترسیها:
- خدمات را با حداقل دسترسیهای ممکن اجرا کنید تا آسیبپذیری SSRF را از بین ببرید یا اگر این آسیبپذیری وجود دارد، آسیب را محدود کنید.
- از اجرای خدمات با دسترسیهای مدیریتی یا سطح بالا خودداری کنید.
بروزرسانی کتابخانهها:
- اطمینان حاصل کنید که همه کتابخانهها و فریمورکها به طور منظم بهروز میشوند.
- برخی از کتابخانههای قدیمی دارای آسیبپذیریهای شناخته شده SSRF هستند، بنابراین بروزرسانی مداوم ضروری است.
تنظیم تایماوتها:
- تایماوتهای معقول را برای جلوگیری از دسترسی مهاجمان به منابع حساس پیادهسازی کنید، به خصوص اگر این منابع حساس با زمان پاسخدهی کندتری همراه هستند (مثلاً از 1 درخواست در 1 بخش بزرگ از دادههای حساس).
- تایماوتها میتوانند به جلوگیری از درخواستهای بیپایان یا زمانبر کمک کنند و منابع سرور را محافظت کنند.
منابع[ویرایش]
"The Open Web Application Security Project". OWASP.org. Retrieved 23 July 2018.
"CWE-918: Server-Side Request Forgery (SSRF)". CWE.Mitre.org. Retrieved 4 Oct 2022.