CSRF یاCross Site Request Forgery ، در اصطلاح به معنای عبور از درخواستهای سایت و ارسال درخواستهای جعلی به آن است و یک آسیبپذیری خطرناک از آسیبپذیریهای امنیتی است، این آسیبپذیری قدرتمند اطلاعات حیاتی را مخفیانه سرقت میکند و به همین منظور در بین ۱۰ آسیبپذیری جدی استاندارد OWASP معرفی شده است. این حمله از طریق کشف آدرسهایی که محتوایی را تأیید و ارسال میکنند اتفاق میافتد (مانند صفحات لاگین). به این صورت که کاربر در صفحه مدیریت سایت خود لاگین است و یا اینکه مهاجم از طریق یک لینک کاربر را بدون آنکه متوجه این موضوع باشد مجبور به ورود به مدیریت سایت میکند و درنهایت به صفحه مورد نظر دسترسی خواهد یافت.
در این نوع حمله کدهای اجرایی میتواند در قالب یک URL Source در یک تصویر ذخیره شود بهصورتی که کاربر از رخداد و اجرای URL آگاهی پیدا نکند، عموماً تزریق از طریق Image Tag در HTML یا JavaScript انجام میشود. حملات CSRF برنامههای کاربردی وبی را هدف قرار میدهد که نمیتوانند بین درخواستهای معتبر و درخواستهای جعلی کنترل شده توسط مهاجم تمایز قائل شوند. در صورتی اتصال کاربر به سایت نا امن (http) و یا کوکیها روی مرورگر ذخیره شده باشند، این حمله با احتمال موفقیت بالاتری اجرا خواهد شد. عموماً صفحات ثبت نام عمومی که با ارسال و دریافت اطلاعات طراحی شدهاند بیشتر هدف این دسته از حملات قرار میگیرند و از متدهایی مانند GET یا POST میتواند استفاده کند.
روشهای زیادی برای مهاجم وجود دارد تا بتواند از آسیبپذیری CSRF سوء استفاده کند که موفقیت حمله منوط به موارد ذیل است:
- موفقیت یک حمله CSRF به Session کاربر با یک برنامه آسیب پذیر بستگی دارد و حمله تنها در صورتی موفقیتآمیز خواهد بود که کاربر در یک Session فعال با برنامه آسیبپذیر باشد.
- مهاجم باید یک URL معتبر برای ایجاد حملات مخرب پیدا کند و URL باید یک اثر تغییر وضعیت در برنامه هدف داشته باشد.
- یک مهاجم همچنین باید مقادیر مناسب برای پارامترهای URL را پیدا کند، در غیر این صورت برنامه مورد هدف ممکن است درخواست مخرب را رد کند.
راهکار جلوگیری از حملات CSRF
برای جلوگیری از یک حمله CSRF، برنامهها به روشی نیاز دارند تا تعیین کنند که آیا درخواست HTTP به طور قانونی از طریق رابط کاربری برنامه ایجاد شده است یا خیر. بهترین راه برای رسیدن به این هدف از طریق یک توکن CSRF است، توکن CSRF یک توکن تصادفی امن (به عنوان مثال توکن همگام ساز یا توکن Challenge) است که برای جلوگیری از حملات CSRF استفاده میشود. توکن باید در هر Session کاربر منحصر به فرد و باید از ارزش تصادفی بالایی برخوردار باشد تا حدس زدن آن دشوار باشد. یک برنامه امن شده با CSRF یک توکن CSRF منحصر به فرد را برای هر جلسه کاربر اختصاص میدهد، این توکنها در پارامترهای پنهان فرمهای HTML مربوط به عملیات حساس سمت سرور قرار میگیرند، سپس به مرورگرهای مشتری ارسال میشوند. این مسئولیت تیم برنامه نویس است که تشخیص دهد کدام عملیات سمت سرور ماهیت حساسی دارد.
توکن های CSRF میبایست بخشی از فرم HTML باشند و در Session Cookies ذخیره نشوند. سادهترین راه برای افزودن یک پارامتر غیرقابل پیشبینی، استفاده از یک تابع هشِ امن (مانند SHA-2) برای هش کردن Session ID کاربر است، برای اطمینان از تصادفی بودن توکن نیز میبایست توکنها توسط یک تولید کننده اعداد تصادفی امن رمزنگاری شده، Generate شوند. زمانیکه کاربر درخواستی را سمت سرور ارسال میکند، درخواست ایجاد شده توسط مرورگر میبایست شامل توکن CSRF مرتبط باشد که این مورد توسط سرور یا تجهیز FortiWeb برای تأیید صحت درخواست کاربر نهایی بررسی خواهد شد و در صورت عدم تطابق توکن CSRF ارسالی با پارامتر مربوطه، سرور یا تجهیز FortiWeb درخواست را رد میکند. کلیه موارد توسط تجهیز FortiWeb قابل مدیریت و با قرار گرفتن تجهیز بهعنوان واسط بین کاربر و سرور، امنیت را برای سامانهها فراهم میکند.
عملکرد تجهیز FortiWeb برای مقابله با حملات CSRF بهصورت زیر است:
هنگامی که تجهیز FortiWeb درخواستی از کاربر را برای یک Web Page یا URL موجود در لیست خود دریافت میکند، یک جاوا اسکریپت را در صفحه وب و URL جاسازی میکند، اسکریپت در مرورگر وبِ سرویس گیرنده اجرا میشود و به طور خودکار پارامتر tknfv (توکن ضد CSRF) را به هر عنصر پیوند HTML که دارای ویژگی href (<a href>) و عناصر فرم HTML است، اضافه میکند. درخواستهای بعدی که این عناصر HTML را ایجاد میکنند حاوی پارامتر tknfv هستند و این پارامترها دارای مقدار کوکی صادر شده توسط FortiWeb Session Management است، زمانیکه این URLها در درخواستها بدون پارامتر tknfv ظاهر میشوند یا پارامتر با مقدار Cookies Session مطابقت نداشته باشد، FortiWeb عملی را انجام میدهد که درProtection Rule CSRF مشخص شده باشد.