CSRF Attacks

بررسی حملات Cross-Site Request Forgery (CSRF)

Cross-Site Request Forgery (CSRF) چیست؟

Cross-Site Request Forgery (CSRF) نوعی حمله‌ی امنیتی است و زمانی رخ می‌دهد که کاربر در یک وب‌سایت (مانند بانک آنلاین یا شبکه‌های اجتماعی) وارد شده و احراز هویت شده باشد. در این شرایط، مهاجم با فریب کاربر یا هدایت او به یک صفحه‌ی مخرب، درخواست‌هایی را به وب‌سایت هدف ارسال می‌کند. از آنجا که مرورگر به‌طور خودکار کوکی‌های احراز هویت را همراه درخواست‌ها ارسال می‌کند، سرور درخواست را معتبر تشخیص داده و عملیات مورد نظر را اجرا می‌کند. به‌عنوان مثال، اگر کاربر در حساب بانک آنلاین خود وارد شده باشد، مهاجم می‌تواند یک درخواست جعلی برای انتقال وجه از حساب کاربر به حساب دیگری ارسال کند. از آنجا که این فرآیند در پس‌زمینه و بدون اطلاع کاربر انجام می‌شود، فرد قربانی ممکن است متوجه وقوع حمله نشود. به دلیل ماهیت پنهان و خودکار این حملات، CSRF تهدیدی جدی برای امنیت کاربران و سیستم‌های آنلاین محسوب می‌شود و می‌تواند منجر به دستکاری اطلاعات، سرقت دارایی‌ها یا تغییر تنظیمات حساب‌های کاربری شود.

Cross-Site Request Forgery (CSRF) چیست؟

حمله‌ی CSRF چگونه کار می‌کند؟

حمله‌ی CSRF (Cross-Site Request Forgery) به‌ طور عمده بر مهندسی اجتماعی تکیه دارد. در این حمله، مهاجم از طریق ارسال یک لینک به قربانی، او را فریب می‌دهد تا عملیاتی خاص را بر روی یک سایت هدف انجام دهد. این لینک معمولاً از طریق ایمیل یا پیامک ارسال می‌شود. زمانی که قربانی دسترسی‌های ادمین ندارد، حمله‌ی CSRF می‌تواند باعث شود تا مهاجم، اقداماتی مانند تغییر آدرس ایمیل، انتقال وجه، تغییر اطلاعات حساب کاربری و غیره را انجام دهد. اما اگر قربانی دسترسی‌های ادمین داشته باشد، مهاجم می‌تواند از این آسیب‌پذیری برای تغییر عملکرد خود برنامه وب هدف استفاده کند. هدف حملات CSRF معمولاً تغییر عملکردهایی است که بر روی سرور برنامه وب تأثیر می‌گذارند. بسته به اهداف حمله، مهاجم ممکن است بخواهد بلافاصله پول سرقت کند یا منتظر بماند تا در زمانی خاص، اطلاعات سرور را تغییر دهد. در برخی موارد، مهاجم ممکن است اطلاعات حساب کاربری را تغییر داده و سپس آن‌ها را بفروشد. یکی از روش‌های پیشرفته برای انجام حملات CSRF، ذخیره‌سازی کد حمله در سایت هدف است. در کدنویسی HTML، از تگ‌های IMG برای تصاویر و تگ‌های iframe برای قرار دادن اسناد استفاده می‌شود. اگر مهاجم به کد HTML سایت هدف دسترسی پیدا کند، می‌تواند کد حمله‌ی CSRF را درون یکی از این تگ‌ها جاسازی کند. پیچیدگی این نوع حملات زمانی افزایش می‌یابد که کد حمله بتواند در سایت اصلی ذخیره شود. در این صورت، هنگامی که قربانی به صفحه‌ای هدایت می‌شود که ظاهراً بخشی از همان سایت است، احتمال کمتری وجود دارد که او مشکوک شود. قربانی ممکن است تصور کند که این تغییر مسیر نتیجه‌ی یک فرایند عادی تراکنش است و تغییرات ایجادشده را به اقدامات قبلی خود نسبت دهد. برای مثال، وقتی شما در سایت آمازون خرید می‌کنید، پس از اینکه روی دکمه خرید کالا کلیک می‌کنید، به صفحه‌ی دیگری هدایت می‌شوید، اما آن صفحه هنوز بخشی از سایت آمازون است. از سوی دیگر، اگر به سایت دیگری با URL متفاوت از Amazon.com هدایت شوید، ممکن است درباره اعتبار تراکنش تردید کنید. جاسازی حمله‌ی CSRF در خود صفحه هدف ممکن است شک و تردید قربانی را کاهش دهد.

بررسی حملات Cross-Site Request Forgery (CSRF)

تاریخچه حملات Cross-Site Request Forgery (CSRF):

آسیب‌پذیری‌های CSRF از اوایل دهه ۲۰۰۰ شناسایی شده‌اند و در برخی موارد نیز مورد سوءاستفاده قرار گرفته‌اند. نخستین گزارش‌های مستند در مورد این حملات به سال ۲۰۰۱ بازمی‌گردد. از آنجا که حملات CSRF از آدرس IP کاربر مجاز اجرا می‌شوند، بسیاری از وب‌سایت‌ها قادر به شناسایی این حملات از طریق گزارش‌های لاگ سرور نیستند. با وجود اینکه حملات CSRF از مخرب‌ترین روش‌های سوءاستفاده از وب‌سایت‌ها به شمار می‌روند، اما میزان گزارش‌دهی در مورد این حملات، حداقل به ‌طور عمومی، بسیار محدود بوده است. تا سال ۲۰۰۷ تنها چند مورد شناخته‌شده از این نوع حملات مستند شده بود که برخی از آن‌ها شامل نمونه‌های زیر هستند:

  • Netflix (سال ۲۰۰۶): این وب‌سایت در برابر چندین آسیب‌پذیری CSRF آسیب‌پذیر بود. مهاجمان می‌توانستند بدون اطلاع کاربر، فیلم‌هایی را به لیست خرید شخص اضافه کنند یا اطلاعات ورود به حساب را تغییر دهند. در نتیجه، امکان تصاحب کامل حساب کاربری وجود داشت.
  • برنامه بانکداری آنلاین ING Direct: یکی از نمونه‌های جدی حملات CSRF مربوط به برنامه بانکداری آنلاین ING Direct بود. در این مورد، مهاجمان قادر بودند از طریق حساب کاربران انتقال‌های مالی غیرمجاز انجام دهند که می‌توانست خسارت‌های مالی جبران‌ناپذیری به همراه داشته باشد.
  • یوتیوب (سال ۲۰۰۸): این وب‌سایت محبوب اشتراک‌گذاری ویدیو نیز در برابر حملات CSRF آسیب‌پذیر بود. مهاجمان می‌توانستند تقریباً تمامی اقدامات کاربران را بدون اجازه آن‌ها انجام دهند، از جمله مدیریت ویدیوها، تغییر تنظیمات حساب و حتی انتشار محتوا به نام افراد.
  • McAfee Secure: در یکی دیگر از نمونه‌های حملات CSRF، McAfee Secure دارای یک آسیب‌پذیری جدی بود که به مهاجمان اجازه می‌داد تنظیمات امنیتی سیستم‌های شرکتی را تغییر دهند. این نقص امنیتی در نسخه‌های جدیدتر این محصول برطرف شده است.

مثالی از حملات CSRF:

در این مثال، یک درخواست GET برای انتقال ۵,۰۰۰ دلار در یک بانک را مشاهده می‌کنید:

GET https://abank.com/transfer.do?account=RandPerson&amount=$5000 HTTP/1.1

مهاجم می‌تواند این درخواست را تغییر داده و مبلغ ۵,۰۰۰ دلار را به حساب شخصی خود منتقل کند. درخواست مخرب به این شکل خواهد بود:

GET https://abank.com/transfer.do?account=SomeAttacker&amount=$5000 HTTP/1.1

سپس، مهاجم این درخواست را در قالب یک لینک که ظاهراً بی‌خطر است، قرار می‌دهد:

<a href=”https://abank.com/transfer.do?account=SomeAttacker&amount=$5000″>
</a>برای اطلاعات بیشتر کلیک کنید

در مرحله‌ی بعد، مهاجم این لینک را از طریق ایمیل به تعداد زیادی از مشتریان بانک ارسال می‌کند. هر کسی که در حساب بانکی خود وارد شده باشد و روی این لینک کلیک کند، بدون آنکه متوجه شود، مبلغ ۵,۰۰۰ دلار را به حساب مهاجم انتقال می‌دهد.

استفاده از درخواست‌های POST برای جلوگیری از حمله:

اگر وب‌سایت بانک فقط از درخواست‌های POST استفاده کند، مهاجم نمی‌تواند از تگ <a> برای ارسال درخواست‌های مخرب استفاده کند. با این حال، همچنان می‌تواند حمله را از طریق یک فرم HTML انجام دهد.

نمونه‌ای از چنین فرمی را در ادامه می‌بینید که حتی می‌تواند به‌ صورت خودکار ارسال شود:

<body onload=”document.forms[0].submit()”> <form id=”csrf” action=”https://abank.com/transfer.do” method=”POST”> <input type=”hidden” name=”account” value=”SomeAttacker”/> <input type=”hidden” name=”amount” value=”$5000″/> </form> </body>

در این مثال، فرم دکمه‌ی ارسال ندارد و بدون اطلاع و رضایت کاربر اجرا می‌شود. به‌جای دکمه‌ی ارسال، فقط یک خط کد جاوااسکریپت برای ارسال خودکار فرم وجود دارد:

document.getElementById(‘csrf’).submit();

تأثیرات حملات CSRF:

حملات CSRF (Cross-Site Request Forgery) یکی از تهدیدات جدی امنیتی هستند که می‌توانند پیامدهای بسیار خطرناکی به همراه داشته باشند. این حملات معمولاً به واسطه ضعف در کنترل دسترسی به سیستم‌ها رخ می‌دهند و به مهاجمان این امکان را می‌دهند که بدون نیاز به تایید کاربر، اقداماتی نظیر دسترسی به حساب‌های کاربری، انجام تراکنش‌های جعلی و سرقت اطلاعات حساس را انجام دهند. برخی از تأثیرات این حملات عبارتند از:

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

بنابراین، درک و پیشگیری از حملات CSRF اهمیت زیادی دارد و باید تدابیر امنیتی لازم برای محافظت از داده‌ها و حساب‌های کاربران در برابر چنین تهدیداتی اتخاذ شود.

مقایسه حملات CSRF و XSS:

حملات XSS (Cross-Site Scripting) و CSRF (Cross-Site Request Forgery) هر دو آسیب‌پذیری‌های رایج و خطرناک در دنیای وب هستند که تهدیدات امنیتی خاص خود را دارند. اما در نحوه عملکرد و نوع تهدیداتی که ایجاد می‌کنند، با یکدیگر تفاوت دارند. در حملات XSS، مهاجم می‌تواند محتوای سایت را تغییر دهد، اما نیازی به دسترسی احراز هویت کاربر ندارد. در مقابل، CSRF از اعتبار کاربر در یک سایت قابل‌اعتماد برای اجرای دستورات مخرب استفاده می‌کند. در ادامه، یک مقایسه کلی از این دو نوع آسیب‌پذیری ارائه شده است:

مقایسه حملات CSRF و XSS

روش‌های مؤثر برای جلوگیری از حملات CSRF:

برای مقابله با حملاتCross-Site Request Forgery (CSRF) ، باید تدابیر امنیتی مؤثری اتخاذ شود. در ادامه، دو روش کلیدی برای جلوگیری از حملات CSRF بررسی می‌شود.

  • استفاده از anti-CSRF token

یکی از بهترین راه‌های دفاع در برابر حملات CSRF، استفاده از anti-CSRF token است. این توکن یک مقدار تصادفی و یکتا است که هنگام ایجاد یک فرم در سمت سرور تولید شده و فقط برای مرورگر کاربر و برنامه وب شناخته‌ شده است. در هنگام ارسال درخواست، مقدار این توکن بررسی می‌شود و اگر با مقدار ذخیره ‌شده در نشست کاربر مطابقت نداشته باشد، درخواست رد خواهد شد. از آنجایی که مهاجم به این مقدار دسترسی ندارد، نمی‌تواند از آن برای تأیید درخواست‌های جعلی استفاده کند.

چالش‌های امنیتی توکن‌ها:

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

  1. ذخیره در تاریخچه مرورگر
  2. ثبت شدن در فایل‌های لاگ HTTP
  3. ذخیره شدن در تجهیزات شبکه که محتوای اولیه درخواست HTTP را ذخیره می‌کنند.
  4. قرار گرفتن در هدر Referrer، اگر سایت محافظت‌شده به یک آدرس خارجی لینک دهد.
  • تنظیم ویژگی SameSite برای کوکی‌ها

استفاده از ویژگی SameSite در کوکی‌ها یکی دیگر از روش‌های جلوگیری از حملات CSRF است. این ویژگی تعیین می‌کند که session cookie فقط در صورتی ارسال شود که درخواست از همان دامنه اصلی صورت گرفته باشد. در نتیجه، اگر یک مهاجم بخواهد درخواست مخربی را از یک دامنه خارجی ارسال کند، session cookie به آن درخواست اضافه نمی‌شود و تلاش او برای اجرای حمله ناموفق خواهد بود. با این حال، اگر مهاجم بتواند به دامنه هدف نفوذ کند، ممکن است درخواست‌های او از داخل همان سایت ارسال شوند و از این سد امنیتی عبور کنند. به همین دلیل، محافظت از سرورها و برنامه‌های وب ضروری است تا از هرگونه سوءاستفاده احتمالی جلوگیری شود.

اقدامات امنیتی برای کاربران:

  • خروج از حساب‌های کاربری پس از اتمام کار
  • محافظت از نام کاربری و گذرواژه و عدم اشتراک‌گذاری آن‌ها
  • غیرفعال کردن قابلیت ذخیره‌سازی گذرواژه در مرورگر
  • پرهیز از مرور هم‌زمان در اینترنت در حالی که وارد یک برنامه تحت وب شده‌اید.
 

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

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