Cross-Site Request Forgery (CSRF) نوعی حملهی امنیتی است و زمانی رخ میدهد که کاربر در یک وبسایت (مانند بانک آنلاین یا شبکههای اجتماعی) وارد شده و احراز هویت شده باشد. در این شرایط، مهاجم با فریب کاربر یا هدایت او به یک صفحهی مخرب، درخواستهایی را به وبسایت هدف ارسال میکند. از آنجا که مرورگر بهطور خودکار کوکیهای احراز هویت را همراه درخواستها ارسال میکند، سرور درخواست را معتبر تشخیص داده و عملیات مورد نظر را اجرا میکند. بهعنوان مثال، اگر کاربر در حساب بانک آنلاین خود وارد شده باشد، مهاجم میتواند یک درخواست جعلی برای انتقال وجه از حساب کاربر به حساب دیگری ارسال کند. از آنجا که این فرآیند در پسزمینه و بدون اطلاع کاربر انجام میشود، فرد قربانی ممکن است متوجه وقوع حمله نشود. به دلیل ماهیت پنهان و خودکار این حملات، CSRF تهدیدی جدی برای امنیت کاربران و سیستمهای آنلاین محسوب میشود و میتواند منجر به دستکاری اطلاعات، سرقت داراییها یا تغییر تنظیمات حسابهای کاربری شود.
حملهی CSRF (Cross-Site Request Forgery) به طور عمده بر مهندسی اجتماعی تکیه دارد. در این حمله، مهاجم از طریق ارسال یک لینک به قربانی، او را فریب میدهد تا عملیاتی خاص را بر روی یک سایت هدف انجام دهد. این لینک معمولاً از طریق ایمیل یا پیامک ارسال میشود. زمانی که قربانی دسترسیهای ادمین ندارد، حملهی CSRF میتواند باعث شود تا مهاجم، اقداماتی مانند تغییر آدرس ایمیل، انتقال وجه، تغییر اطلاعات حساب کاربری و غیره را انجام دهد. اما اگر قربانی دسترسیهای ادمین داشته باشد، مهاجم میتواند از این آسیبپذیری برای تغییر عملکرد خود برنامه وب هدف استفاده کند. هدف حملات CSRF معمولاً تغییر عملکردهایی است که بر روی سرور برنامه وب تأثیر میگذارند. بسته به اهداف حمله، مهاجم ممکن است بخواهد بلافاصله پول سرقت کند یا منتظر بماند تا در زمانی خاص، اطلاعات سرور را تغییر دهد. در برخی موارد، مهاجم ممکن است اطلاعات حساب کاربری را تغییر داده و سپس آنها را بفروشد. یکی از روشهای پیشرفته برای انجام حملات CSRF، ذخیرهسازی کد حمله در سایت هدف است. در کدنویسی HTML، از تگهای IMG برای تصاویر و تگهای iframe برای قرار دادن اسناد استفاده میشود. اگر مهاجم به کد HTML سایت هدف دسترسی پیدا کند، میتواند کد حملهی CSRF را درون یکی از این تگها جاسازی کند. پیچیدگی این نوع حملات زمانی افزایش مییابد که کد حمله بتواند در سایت اصلی ذخیره شود. در این صورت، هنگامی که قربانی به صفحهای هدایت میشود که ظاهراً بخشی از همان سایت است، احتمال کمتری وجود دارد که او مشکوک شود. قربانی ممکن است تصور کند که این تغییر مسیر نتیجهی یک فرایند عادی تراکنش است و تغییرات ایجادشده را به اقدامات قبلی خود نسبت دهد. برای مثال، وقتی شما در سایت آمازون خرید میکنید، پس از اینکه روی دکمه خرید کالا کلیک میکنید، به صفحهی دیگری هدایت میشوید، اما آن صفحه هنوز بخشی از سایت آمازون است. از سوی دیگر، اگر به سایت دیگری با URL متفاوت از Amazon.com هدایت شوید، ممکن است درباره اعتبار تراکنش تردید کنید. جاسازی حملهی CSRF در خود صفحه هدف ممکن است شک و تردید قربانی را کاهش دهد.
آسیبپذیریهای CSRF از اوایل دهه ۲۰۰۰ شناسایی شدهاند و در برخی موارد نیز مورد سوءاستفاده قرار گرفتهاند. نخستین گزارشهای مستند در مورد این حملات به سال ۲۰۰۱ بازمیگردد. از آنجا که حملات CSRF از آدرس IP کاربر مجاز اجرا میشوند، بسیاری از وبسایتها قادر به شناسایی این حملات از طریق گزارشهای لاگ سرور نیستند. با وجود اینکه حملات CSRF از مخربترین روشهای سوءاستفاده از وبسایتها به شمار میروند، اما میزان گزارشدهی در مورد این حملات، حداقل به طور عمومی، بسیار محدود بوده است. تا سال ۲۰۰۷ تنها چند مورد شناختهشده از این نوع حملات مستند شده بود که برخی از آنها شامل نمونههای زیر هستند:
در این مثال، یک درخواست GET برای انتقال ۵,۰۰۰ دلار در یک بانک را مشاهده میکنید:
مهاجم میتواند این درخواست را تغییر داده و مبلغ ۵,۰۰۰ دلار را به حساب شخصی خود منتقل کند. درخواست مخرب به این شکل خواهد بود:
سپس، مهاجم این درخواست را در قالب یک لینک که ظاهراً بیخطر است، قرار میدهد:
در مرحلهی بعد، مهاجم این لینک را از طریق ایمیل به تعداد زیادی از مشتریان بانک ارسال میکند. هر کسی که در حساب بانکی خود وارد شده باشد و روی این لینک کلیک کند، بدون آنکه متوجه شود، مبلغ ۵,۰۰۰ دلار را به حساب مهاجم انتقال میدهد.
استفاده از درخواستهای POST برای جلوگیری از حمله:
اگر وبسایت بانک فقط از درخواستهای POST استفاده کند، مهاجم نمیتواند از تگ <a> برای ارسال درخواستهای مخرب استفاده کند. با این حال، همچنان میتواند حمله را از طریق یک فرم HTML انجام دهد.
نمونهای از چنین فرمی را در ادامه میبینید که حتی میتواند به صورت خودکار ارسال شود:
در این مثال، فرم دکمهی ارسال ندارد و بدون اطلاع و رضایت کاربر اجرا میشود. بهجای دکمهی ارسال، فقط یک خط کد جاوااسکریپت برای ارسال خودکار فرم وجود دارد:
حملات CSRF (Cross-Site Request Forgery) یکی از تهدیدات جدی امنیتی هستند که میتوانند پیامدهای بسیار خطرناکی به همراه داشته باشند. این حملات معمولاً به واسطه ضعف در کنترل دسترسی به سیستمها رخ میدهند و به مهاجمان این امکان را میدهند که بدون نیاز به تایید کاربر، اقداماتی نظیر دسترسی به حسابهای کاربری، انجام تراکنشهای جعلی و سرقت اطلاعات حساس را انجام دهند. برخی از تأثیرات این حملات عبارتند از:
بنابراین، درک و پیشگیری از حملات CSRF اهمیت زیادی دارد و باید تدابیر امنیتی لازم برای محافظت از دادهها و حسابهای کاربران در برابر چنین تهدیداتی اتخاذ شود.
حملات XSS (Cross-Site Scripting) و CSRF (Cross-Site Request Forgery) هر دو آسیبپذیریهای رایج و خطرناک در دنیای وب هستند که تهدیدات امنیتی خاص خود را دارند. اما در نحوه عملکرد و نوع تهدیداتی که ایجاد میکنند، با یکدیگر تفاوت دارند. در حملات XSS، مهاجم میتواند محتوای سایت را تغییر دهد، اما نیازی به دسترسی احراز هویت کاربر ندارد. در مقابل، CSRF از اعتبار کاربر در یک سایت قابلاعتماد برای اجرای دستورات مخرب استفاده میکند. در ادامه، یک مقایسه کلی از این دو نوع آسیبپذیری ارائه شده است:
برای مقابله با حملاتCross-Site Request Forgery (CSRF) ، باید تدابیر امنیتی مؤثری اتخاذ شود. در ادامه، دو روش کلیدی برای جلوگیری از حملات CSRF بررسی میشود.
یکی از بهترین راههای دفاع در برابر حملات CSRF، استفاده از anti-CSRF token است. این توکن یک مقدار تصادفی و یکتا است که هنگام ایجاد یک فرم در سمت سرور تولید شده و فقط برای مرورگر کاربر و برنامه وب شناخته شده است. در هنگام ارسال درخواست، مقدار این توکن بررسی میشود و اگر با مقدار ذخیره شده در نشست کاربر مطابقت نداشته باشد، درخواست رد خواهد شد. از آنجایی که مهاجم به این مقدار دسترسی ندارد، نمیتواند از آن برای تأیید درخواستهای جعلی استفاده کند.
چالشهای امنیتی توکنها:
با وجود اثربخشی این روش، توکنها ممکن است در شرایط خاصی در معرض افشا قرار بگیرند، از جمله:
استفاده از ویژگی SameSite در کوکیها یکی دیگر از روشهای جلوگیری از حملات CSRF است. این ویژگی تعیین میکند که session cookie فقط در صورتی ارسال شود که درخواست از همان دامنه اصلی صورت گرفته باشد. در نتیجه، اگر یک مهاجم بخواهد درخواست مخربی را از یک دامنه خارجی ارسال کند، session cookie به آن درخواست اضافه نمیشود و تلاش او برای اجرای حمله ناموفق خواهد بود. با این حال، اگر مهاجم بتواند به دامنه هدف نفوذ کند، ممکن است درخواستهای او از داخل همان سایت ارسال شوند و از این سد امنیتی عبور کنند. به همین دلیل، محافظت از سرورها و برنامههای وب ضروری است تا از هرگونه سوءاستفاده احتمالی جلوگیری شود.
اقدامات امنیتی برای کاربران: