بستن

حمله CSRF چگونه انجام می‌شود؟

حمله CSRF چگونه انجام می‌شود؟

فهرست مطالب

CSRF

Cross-Site Request Foregery یک نوع حمله سایبری است که یک برنامه کامپیوتری را فریب می‌دهد تا از اختیارات خود سوءاستفاده کند. این تعریف به نظر کمی گنگ و نامفهوم می‌آید، اجازه بدهید به زبانی ساده‌تر آن را تعریف کنم. حمله CSRF یک عملیات ناخواسته توسط کاربر را بروی مرورگر او اجرا می‌کند تا از دسترسی‌های فعلی او در سایت‌های دیگر سوء استفاده کند. برای مثال: وقتی در اینترنت بانک لاگین می‌کند شما دسترسی نقل و انتقال پول از حساب خود به هر حساب دیگری را دارید. اگر در تب دیگری از همان مرورگر به مرور ایمیل‌ها بپردازید و با ایمیلی برخورد کنید که حاوی لینک مخربی باشد و روی آن کلیک کنید؛ هکر می‌تواند با سوء استفاده از نشست فعال شما در اینترنت بانک از حساب شما پول برداشت کند. البته نگران نباشید چون در حال حاضر انجام چنین کاری با توجه به امنیت بالای درگاه‌های اینترنت بانک و اجبار به استفاده از رمز پویا غیر ممکن است.

نحوه اجرای این حمله چگونه است؟

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

  • عملیات مرتبط: عملیاتی درون برنامه باید وجود داشته باشد که هکر دلیلی برای ایجاد آن داشته باشد. به بیانی بهتر، عملیاتی که نیاز به دسترسی دارد برای مثال تغییر پسورد یا نام حساب کاربری.
  • مدیریت نشست بر پایه کوکی: انجام چنین عملیاتی نیازمند اجرای حداقل یک درخواست HTTP است، و برنامه‌ای که صرفا وابسته به نشست کاربران برای شناسایی کاربرانی که درخواست را ارسال کرده‌اند؛ باشد. وقتی با نام کاربری و پسورد وارد وبسایتی می‌شوید آن وبسایت برای شما نشستی ایجاد می‌کند و آن را به صورت کوکی در مرورگر شما ذخیره می‌کند، تا با هر عملیاتی که انجام می‌دهید بتواند مجددا شما را احراز هویت کند.
  • محتوای درخواست‌ها قابل پیش بینی باشد: درخواستی که انجام می‌شود نباید نیازمند پارامترهایی باشد که هکر نتواند آن را به طور دقیق حدس بزند. برای مثال، اگر برای تغییر پسورد حساب قربانی نیاز به دانستن پسورد فعلی باشد. در این صورت هکر پیش از اجرای این حمله نیازمند پیدا کردن پسورد خواهد بود که در صورت موفقیت در ادامه حتی نیاز به اجرای حمله CSRF را نیز نخواهد داشت.

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

				
					GET http://netbank.com/transfer.do?acct=PersonB&amount=$100 HTTP/1.1
				
			

در این درخواست متغییر acct در واقع گیرنده است و متغییر amount به معنای مبلغ انتقال وجه. یک هکر می‌تواند با استفاده از مهندسی اجتماعی یک لینک را به ایمیل شما ارسال کنید و محتوای متغییر acct را تغییر دهد.

				
					GET http://netbank.com/transfer.do?acct=AttackerA&amount=$100 HTTP/1.1
				
			

شما ایمیلی دریافت می‌کنید که هیچ ارتباطی با پرداخت‌های بانکی ندارد و ممکن است در خصوص یک تور مسافرتی باشد که با تخفیف بسیاری خوبی شما را تشویق به تهیه بلیط می‌کند و تنها یک کلیک با آن فاصله دارید. هکر با استفاده از تگ‌های html یک لینک را در این ایمیل کار گذاشته که بدین شکل می‌باشد.

				
					<a href="http://netbank.com/transfer.do?acct=AttackerA&amp;amount=$100" target="_blank" rel="noopener">همین حالا رزرو کن!</a>
				
			

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

				
					<body data-rsssl=1 onload="document.forms[0].submit()">
   <form action="https://netbank.com/transfer.do" method="POST">
     <input type="hidden" name="acct" value="AttackerA"/>
     <input type="hidden" name="amount" value="$100"/>
     <input type="submit" value="رزرو بلیط"/>
   </form>
 </body>

				
			

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

csrf attack vecor

محافظت در برابر CSRF

در حال حاضر، پیدا کردن و سوءاستفاده از آسیب پذیری CSRF شامل عبور از مکانیزم‌های anti-CSRF که توسط وبسایت هدف و مرورگر قربانی فعال است، می‌شود. مرورگرهای امروزی به راحتی سوءاستفاده از این نقطه ضعف را تشخیص می‌دهد اما معمول‌ترین روش‌های محافظت در برابر آن به شرح زیر می‌باشد:

  • توکن CSRF: این یک توکن منحصر به فرد، مخفی و مقادیر آن غیر قابل حدس است که توسط سرور تولید می‌شود و با کاربر به اشتراک گذاشته می‌شود. هنگامی که کاربر قصد انجام عملیات حساسی را داشته باشد، برای مثال: تغییر پسورد یا اطلاعات کاربری؛ کاربر باید این توکن را نیز همراه با سایر اطلاعات نیز به سرور ارسال نماید. البته که این عملیات توسط زبان‌های فرانت-اند کنترل می‌شود و کاربر نهایی از رخ دادن آن‌ها اطلاعی ندارند.
  • کوکی SameSite: این مکانیزم یک امنیت تحت مرورگر است که چک می‌کند که کوکی‌های وبسایت که درون requestها قرار داده شد از وبسایت‌های دیگر است یا نه. از آنجایی که درخواست‌های حساس نیاز به یک کوکی نشست احراز هویت دارد، محدودیت‌های SameSite که به درستی تنظیم شده‌ باشند می‌تواند از اجرای درخواست‌های بین-سایتی جلوگیری کند.
  • صحت سنجی Referer-based: تعدادی از برنامه‌ها هدر HTTP Referrer  برای جلوگیری از حملات CSRF استفاده می‌کنند که نشان می‌دهد درخواست‌های ارسال شده از سمت دامین خود برنامه یا وبسایت می‌باشد. این مورد در مقایسه با سایر موارد تاثیر کمتری دارد.

نکته پایانی

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

0 دیدگاه

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

Avatar placeholder

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