جعل درخواست میان وب سایتی یا CSRF (که به آن XSRF هم گفته میشود)، کوتاهشدهی Cross-Site Request Forgery یک آسیبپذیری وب است که مهاجم با استفاده از آن میتواند کاری کند که کاربران اقداماتی را انجام دهند که قصد انجام آنها را نداشتهاند
به گزارش گرداب، آیا تا به حال شنیدهاید که نباید بیاحتیاط روی هر لینکی کلیک نماییم یا هر فایلی را باز کنیم؟ آیا با تعریف حمله CSRF آشنا هستید؟ آیا میدانید جعل درخواست چیست و چطور رخ میدهد؟ آیا با راههای جلوگیری از csrf آشنا هستید؟
به این حمله لقب «غول خفته جهان امنیت وب» را در بین آسیب پذیریهای وب داده اند. با کمک کمی از مهندسی اجتماعی (مانند ارسال پیوند از طریق ایمیل یا چت)، یک مهاجم ممکن است کاربران یک برنامه وب را فریب دهد تا اقدامات مورد نظر مهاجم را اجرا کند. اگر قربانی یک کاربر عادی باشد، یک حمله موفقیت آمیز CSRF میتواند کاربر را مجبور به انجام درخواستهای تغییر وضعیت مانند انتقال وجه، تغییر آدرس ایمیل و ... کند. اگر قربانی یک حساب کاربری مدیریتی باشد، حمله CSRF میتواند کل برنامه وب را در معرض خطر قرار دهد. این آسیبپذیری به یک مهاجم اجازه میدهد، تا حدی سیاست SOP را دور بزنند.
سیاست SOP (کوتاهشده Same Origin Policy) یا سیاست مبدأ مشترک، به منظور جلوگیری از سرقت داده با ارسال درخواستهای Cross-Origin (میانوبگاهی) طراحی شده است.
حمله CSRF تنها در صورتی عمل خواهد کرد که قربانی بالقوه احراز هویت شود. با استفاده از یک حمله CSRF، مهاجم میتواند فرآیند احراز هویت را برای ورود به یک برنامه وب دور بزند. زمانی که قربانی با امتیازات اضافی اقداماتی را انجام میدهد که برای همه قابل دسترسی نیست، این زمانی است که از حملات CSRF استفاده میشود.
اگر بخواهیم مثالی از حملات CSRF بزنیم:
کاربر با استفاده از تایید اعتبار سنجی مبتنی بر فرم، به وب سایت www.good-banking-site.com وارد میشود. سرور کاربر را تایید میکند و پاسخی را که شامل کوکی تایید اعتبار است، صادر میکند. حال این وب سایت مستعد آسیب پذیری در مقابل حملات است، زیرا به هر درخواستی که با یک کوکی تایید اعتبار معتبر دریافت میکند، اعتماد دارد.
تاثیر حمله CSRF چیست؟
این حمله بر اساس عملکرد برنامه کاربردی (Web Application) میتواند آسیبهای مخصوص به خود را داشته باشد. به مثالهایی از این حمله میپردازیم:
• یک برنامه کاربردی آسیبپذیر به CSRF، فرد نفوذگر را قادر میسازد که ایمیل یا رمزعبور کاربران قربانی که در این سایت فعالیت دارند را به موارد مورد نظر خود تغییر دهد.
• فرد نفوذگر، میتواند کاربر قربانی با سطح دسترسی بالا را در یک برنامهی کاربردی آسیب پذیر، وادار به انجام یک عملکرد سطح بالا مثل حذف، ایجاد یا تغییر در لیست کاربران یا اطلاعات برنامه نماید.
• یک برنامه کاربردی مربوط به بانک، در صورتی که در سیستم انتقال وجه خود دارای این باگ باشد، فرد نفوذگر را قادر به انتقال وجه توسط هویت کاربران قربانی به صورت ناخواسته مینماید.
• برنامه کاربردیای که کاربران در آن اجازه ثبت محتوا با حساب کاربری خود را دارند، در صورت آسیبپذیر بودن به CSRF، نفوذگر را قادر به ارسال محتوای دلخواه از حساب کاربر قربانی مینماید.
هنگامی که یک وب سایت از طرف یک کاربر دادهها را از وب سایت دیگری درخواست میکند، تا زمانی که درخواست تأیید نشده باشد، یعنی کوکی جلسه ارسال نشده باشد، هیچ نگرانی امنیتی وجود ندارد. با این حال، زمانی که کوکی جلسه کاربر همراه با درخواست ارسال میشود، مهاجمان میتوانند یک حمله جعل درخواست بینسایتی را اجرا کنند که از رابطه اعتماد بین مرورگر قربانی و سرور وب سوء استفاده میکند.
حملات CSRF چگونه اجرا میشوند؟
دو بخش اصلی برای اجرای یک حمله جعل درخواست کراس سایت وجود دارد. اولین مورد فریب قربانی برای کلیک کردن بر روی پیوند یا بارگذاری یک صفحه است. این کار معمولاً از طریق مهندسی اجتماعی و پیوندهای مخرب انجام میشود. بخش دوم ارسال یک درخواست درست و ظاهراً قانونی از مرورگر قربانی به وب سایت است.
درخواست با مقادیر انتخاب شده توسط مهاجم ارسال میشود، از جمله کوکیهایی که قربانی با آن وب سایت مرتبط کرده است. به این ترتیب وب سایت میداند که این قربانی اجازه دارد اقدامات خاصی را در وب سایت انجام دهد. هر درخواستی که با این اعتبارنامهها یا کوکیهای HTTP ارسال شود، قانونی تلقی میشود، حتی اگر قربانی درخواست را به دستور مهاجم ارسال کند.
انواع آسیبپذیری CSRF
حملات CSRF را میتوان به چند نوع، از نظر اجرا تقسیم بندی کرد. مد نظر داشته باشید که این حمله از آنجایی که کاربران یک سایت را هدف قرار میدهد، در بیشتر سناریوها، نفوذگران از تکنیکهای مهندسی اجتماعی برای تکمیل کردن حمله کمک میگیرند و قابل ذکر است که روش پیادهسازی آن بسته به نوع آسیبپذیری برنامه، متفاوت است.
به طور مختصر CSRF را میتوان از نظر نوع پیادهسازی به ۳ بخش تقسیم نمود:
• سناریو متد GET
• سناریو متد POST
• سناریو متدهای دیگر
تفاوت XSS و CSRF چیست؟
حمله XSS یا «تزریق اسکریپت از طریق وبگاه» به مهاجم اجازه میدهد کدهای جاوا اسکریپت دلخواه خود را در مرورگر یک کاربر قربانی اجرا کند.
حمله CSRF یا «جعل درخواست میان وبسایتی» به مهاجم اجازه میدهد که از طریق مرورگر کاربر قربانی و بدون خواست و اطلاع او، اقداماتی را از طرف قربانی انجام دهد.
عواقب آسیبپذیریهای XSS معمولا خطرناکتر از آسیبپذیریهای CSRF هستند.
حمله CSRF معمولا به زیرمجموعهای کوچک از اقدامات محدود میشود که کاربر قادر به انجام آنهاست. بسیاری از اپلیکیشنها راهکارهای دفاع در برابر CSRF را به صورت کلی پیادهسازی میکنند تا اگر یک یا دو اقدام حساس از قلم افتاد، آن اقدامات نیز پوشش داده شوند. ولی از طرف دیگر، یک اکسپلویت XSS عمدتا میتواند از طرف کاربر قربانی هر اقدامی را که آن کاربر قادر به انجام آن باشد، انجام دهد، فارغ از این که آسیبپذیری به خاطر کدام قابلیت اپلیکیشن به وجود آمده است.
CSRF را میتوان به عنوان یک آسیبپذیری «یک طرفه» تعریف کرد، یعنی وقتی مهاجم بتواند از طرف قربانی
یک ریکوئست HTTP ارسال کند، نمیتواند پاسخ آن ریکوئست را به دست آورد. بر خلاف CSRF، آسیبپذیری XSS یک آسیبپذیری «دوطرفه» است، یعنی اسکریپت تزریق شده توسط مهاجم میتواند ریکوئستهای دلخواه او را تولید و ارسال کند، پاسخها را بخواند، و دادهها را استخراج کرده و به یک دامنهی خارجی متعلق به مهاجم ارسال کند.
ابزارهای کشف آسیبپذیری CSRF
برای کشف این آسیبپذیری، ابزاری مورد نیاز است که نقش پروکسی داخلی را برای آنالیز درخواستها (Request) و پاسخها (Responses)، برای ما ایفا کند. مانند:
Burp Suite
Fiddler
Postman
از مزایای این ابزارها میتوان به ایجاد تغییر در درخواست و همچنین مشاهدهی پاسخها (Responses) بصورت خام (RAW) اشاره کرد که در تست آسیب پذیری CSRF به ما کمک میکند.
راههای جلوگیری از حملات CSRF
برای پیشگیری و کاهش حملات CSRF برخی روشها وجود دارد که بهترین آنها عبارتند از:
• هنگام استفاده نکردن از برنامه کاربردی وب، ﺣﺘﻤﺎ ﺑﺮ ﺭﻭﯼ دکمه ﺧﺮﻭﺝ ﮐﻠﻴﮏ ﮐﻨﻴﺪ تا از حساب کاربری خود خارج شوید.
• از تامین امنیت رمز عبور و نامهای کاربری خود مطمئن شوید.
• سعی کنید به هیچ مرورگری برای ذخیره پسوردها اجازه ندهید.
• به صورت همزمان از چند صفحه دیدن نکنید.
• ﻟﻴﻨکﻫﺎ ﻭ ﻓﺎﻳﻞﻫﺎی ﻣﺸﻜﻮک ﺭﺍ ﺑه ﻄﻮﺭ ﻛﻠی ﺑﺎﺯ ﻧﻜﻨﻴﺪ.
برای برنامههای کاربردی وب، راهحلهای متعددی برای جلوگیری از ترافیک مخرب و جعلی وجود دارد. از جمله رایجترین این روشها، ایجاد یک ID منحصر به فرد برای هر درخواست است که این ID توسط سرور بررسی و تایید میشود. درخواستهای دارای شناسه تکراری یا عدم تطابق آن با شناسه موجود در سرور، بلاک شده و منسوخ میشود.
ارسال ۲ بار کوکیها نیز یکی دیگر از روشهای شناخته شده برای جلوگیری از حملات CSRF است. همانند روش قبلی، نشانههای تصادفی به دو کوکی و یک پارامتر درخواست اختصاص داده میشوند. سپس سرور قبل از اعطای دسترسی به برنامه، کوکیها را بررسی میکند.
اما مهمترین نکته به ماهیت فردی حملات CSRF مربوط میشود که این کار تنها از طریق آموزش کارمندان حاصل میشود. با آگاهی داشتن کامل تمامی کارمندان یک سازمان یا شرکت، احتمال دچار شدن به چنین حملاتی به صورت چشمگیر کاهش مییابد.
در پایان، اگر برنامهنویس هستید، بهتراست جهت جلوگیری از این حملات موارد زیر را مد نظر قرار دهید:
• ﺗﺴﺖ ﻋﻤﻮﻣﯽ ﺑﺮﺍی ﺟﺪﺍﺳﺎﺯﯼ ﻣﺎﺷﻴﻦ ﺍﺯ ﺍﻧﺴﺎﻥ (Captcha
• ﺑﺮﺭﺳﯽ ﻭ ﻣﻨﻘﻀﯽ ﮐﺮﺩﻥ ﮐﻮﮐﯽ ( (Cookie
• ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺷﻨﺎﺳﻪ ﻣﻌﺘﺒﺮ ( (Valid Token
• ﺍﺯ ﻣﺘﻮﺩ GET . ﺍﺳﺘﻔﺎﺩﻩ ﻧﮑﻨید
________________________________
منابع:
https://douran.academy/cross-site-request-forgery-csrf-%DA%86%DB%8C%D8%B3%D8%AA%D8%9F/
https://www.radcom.co/fa/blog/software/post/detail/150/%D8%AC%D9%84%D9%88%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%D8%AD%D9%85%D9%84%D8%A7%D8%AA-Cross-Site-Request-Forgery-XSRF-CSRF-%D8%AF%D8%B1-Asp-Net-Core
https://www.irandnn.ir/mag/what-is-a-csrf-vulnerability/
https://www.irandnn.ir/mag/what-is-a-csrf-vulnerability/
https://www.irandnn.ir/mag/what-is-a-csrf-vulnerability/
https://kaliboys.com/csrf/