بخشی از مقاله
چکیده
حمله CSRF حملهای است که در آن یک وبگاه آلوده، مرورگر کاربر قربانی را مجبور به انجام عملی ناخواسته در وبگاه مورد اعتماد کاربر میکند. اصلیترین روش مقابله با این حمله، استفاده از نشانههای تصادفی در درخواستهایی است که مرورگر ارسال میکند. نشانههای استفادهشده میتوانند مختص هر درخواست، هر صفحه و یا هر نشست باشند. روشهای موجود برای تشخیص مقاومت در برابر این حمله، عمدتاً بهصورت فعال متکی بر شبیهسازی حمله با تغییر درخواست یا ایجاد درخواستهای جعلی میباشند.
در این مقاله روشی ارائهشده که با دریافت ترافیکی که شامل مجموعهای از درخواستها و پاسخهای متناظر آنها در وبگاه هدف است، بهصورت غیرفعال، درخواستهای مقاوم در برابر حملات CSRF را تشخیص میدهد. به این منظور، قواعدی وضعشده که با اتکای به آنها میتوان امکان وجود نشانههای تصادفی در درخواستهای ارسالی را تحلیل نمود. نتایج تحلیل ترافیک بر اساس قواعد پیشنهادی نشان میدهد که کدام درخواستها در برابر حملات CSRF با توجه به بهکارگیری هرکدام از انواع نشانهها مصونیت دارند.
روش پیشنهادی، پیادهسازی شده و بر روی ترافیک استخراجشده از چندین وبگاه مورد ارزیابی قرارگرفته است. نتایج نشان میدهد که این روش میتواند در صورت کامل بودن ترافیک همهی نشانههای CSRF در درخواستها را تشخیص دهد.
-1 مقدمه
افزایش وابستگی به برنامههای کاربردی وب موجب پیدایش تهدیدات و آسیبپذیریهای زیاد شده است. آسیبپذیری یک نقص و یا ضعف موجود در طراحی، پیادهسازی و یا عملکرد یک برنامه است که میتواند موجب نقض سیاستهای امنیتی شود. یکی از مهمترین حملات تحت وب، حملات مبتنی بر آسیبپذیری CSRF است که در دهه اخیر در ردهبندی حملات وب در OWASP جزء ده حمله اول قرار گرفته است
به علت آنکه بسیاری از وبگاههای اینترنتی توانایی محافظت از خود در برابر این حملات را ندارند و از طرف دیگر این نوع حملات معمولاً از دید توسعهدهندگان وب نادیده گرفته میشوند، به CSRF لقب »غول خفته1«را در بین آسیبپذیریهای وب دادهاند
در حقیقت این حملات از اعتمادی که یک کارپذیر2 به کاربر 3 خود و مرورگر وی دارد سوءاستفاده میکنند. به این صورت که یک وبگاه مخربدرخواستی را از طریق مرورگری که کاربر قربانی قبلاً با آن در یک برنامه کاربردی تحت وب احراز هویت شده است به سمت آن برنامه میفرستد و با استفاده از سطح دسترسی کاربر قربانی عمل مخربی انجام میدهد
هدف از انجام این پژوهش، ارائه راهکاری برای تشخیص آسیبپذیر بودن یا نبودن وبگاهها و برنامههای کاربردی وب در مقابل حملات CSRF است
نوآوریهای مقاله: ما در این مقاله مجموعه قواعدی پیشنهاد دادهایم که بتوان با اتکای به آنهاصرفاً با تحلیل ترافیک یک وبگاه بهصورت غیرفعال، وجود مکانیزم دفاعی در برابر آسیبپذیری CSRF را تشخیص دهیم. روش ارائهشده پیادهسازی شده و روی مجموعهای از وبگاههای متفاوت مورد ارزیابی قرارگرفته است. این روش تشخیص آسیبپذیری را بدون انجام تغییرات غیرمجاز در پایگاه داده و بدون نیاز به اطلاعاتی از قبیل ساختار و کد برنامه انجام میدهد.
-2 آشنایی با حملات CSRF
وارد شدن کاربر به برنامههای تحت وب در پروتکل HTTP به این صورت است که ابتدا کاربر نام کاربری و گذرواژه خود را وارد میکند و مرورگر اطلاعات کاربری را طی درخواستی به سمت کارپذیر میفرستد. کارپذیر پس از احراز هویت کاربر، به وی اجازه ورود به سامانه را میدهد و برای نگهداری وضعیت کاربر، فایلهایی تحت عنوان کوکی برای مرورگر میفرستد. در درخواستهای بعدی کاربر، مرورگر باید کوکی ذخیرهشده را همراه با درخواست ارسال کند تا کارپذیر بتواند کاربر را شناسایی کرده و اجازه دسترسیهای مجاز را به وی بدهد.
حملات CSRF از عملکرد پروتکل HTTP استفاده میکنند تا عملیاتی که نیاز به احراز هویت کاربر دارند را انجام دهد. به این صورت که یک حملهکننده میتواند یک درخواست جعلی در سمت کاربر تولید کرده و با استفاده از مرورگری که کاربر بهوسیله آن به برنامه وب موردنظر واردشده است، درخواست خود را اجرا کند. چون مرورگر قادر به تشخیص درخواست جعلی نیست، کوکی موردنظر را همراه با درخواست جعلی به سمت کارپذیر ارسال میکند و درخواست اجرا میشود
مکانیزمهای دفاعی در برابر حملات :CSRF مکانیزمهای دفاعی زیادی در برابر حملات CSRF مطرحشده است که در اینجا به برخی از مهمترین این مکانیزمها اشاره میکنیم. -1 چک کردن :Referer پارامتر Referer در درخواستهای HTTP نشاندهندهی URL وبگاهی است که درخواست از آن ارسالشده است. این پارامتر برای چک کردن دامنه وبگاه مبدأ قبل از ارسال درخواست به سمت کارپذیر استفاده میشود.
اگر دامنه وبگاه مبدأ با دامنه کارپذیر یکی نباشد، این درخواست یک درخواست مشکوک به حملات CSRF تشخیص داده میشود
محدود کردن عمر کوکی: با محدود کردن عمر کوکیها برای یک دوره زمانی مشخص، میتوان این حملات را به حداقل رساند
نشانه های امنیتی: روش کلی برای مقابله با حملات CSRF استفاده از نشانههای امنیتی همراه با هر درخواست مشتری است. بهاینترتیب، کارپذیر میتواند مطمئن شود درخواستهای دریافتی از منبع مجاز ارسال میشوند
-3 مروری بر کارهای مرتبط
فعالیتهای مرتبط با این نوع حملات به دودسته تقسیم میشوند.
-1 جلوگیری از حملات
-2 CSRF تشخیص آسیبپذیری .CSRF
جلوگیری از حملات :CSRF کارهای انجامشده در این حوزه از مکانیزمی برای تشخیص درخواستهای جعلی و واقعی استفاده میکنند و با استفاده از این مکانیزم مانع از انجام درخواستهای جعلی میشوند و بهاینترتیب از انجام حملات CSRF جلوگیری میکنند. به دلیل اینکه مقاله ارائهشده برای تشخیص آسیبپذیری CSRF است، در اینجا به یک نمونه از این کارها اکتفا میکنیم.
ابزار :CSRFGuard این ابزار [7] یکی از ابزارهای OWASP برای مقابله با حملات CSRF است. CSRFGuard تلاش میکند درستی درخواست HTTP را با تزریق کردن یک نشانه4یکتا در درخواستهای بین کاربر تصدیق اصالت شده و کارپذیر تعیین کند. این ابزار دو وظیفه بر عهده دارد:
-1 تزریق یک نشانه برای محافظت از منابع خاص
-2 تائید رمز وقتیکه کاربری درخواست دسترسی به منابع حفاظتشده را دارد.
تشخیص حملات :CSRF این فعالیتها با تجزیه تحلیل کردن درخواستها و متغیرهای ارسالی بهنوعی سعی در تشخیص آسیبپذیر بودن یا نبودن درخواستهای ارسالی دارند. کار انجامگرفته در این مقاله نیز جزء این فعالیتها است. کارهای متعددی در این زمینه انجامشده است که در ادامه به بررسی سه نمونه از کارهای انجامشده پرداختهایم.
-1 تشخیص حملات با استفاده از دو مفهوم رؤیتپذیری5و نوع محتوا:
در این مقاله [3] با پیادهسازی افزونهای بر اساس دو مفهوم رؤیتپذیری و نوع محتوا این نوع حملات را تشخیص داده میشود. رؤیتپذیری با پارامترها و مقادیر موجود در درخواست مرتبط است. به این صورت که درخواست ارسالی باید با یکی از صفحات نمایش دادهشده بر روی مرورگر مرتبط باشد و پارامترهای درخواست ارسالی نیز با یکی از فرمها و تگهای صفحه مرتبط باشد. مفهوم نوع محتوا به این موضوع اشاره میکند که محتوای تگهای HTML موجود در درخواست باید با نوع محتوای مورد انتظار تگ موردنظر یکی باشد.
-2 افزونه :
CSCD این افزونه اگر Referer در سرآیند بسته، وجود داشته باشد، آن را استخراج میکند. در غیر این صورت وبگاهی که درخواست از آن فرستادهشده است را با توجه به تبهای بازشده در مرورگر ویندوز پیدا میکند. اگر دامنه وبگاه هدف با دامنه وبگاه درخواستکننده یکی نباشد، پس از حذف کوکی از سرآیند بسته، اقدام به فرستادن آن میکند. در صورت همسان بودن دامنهها، ویژگیهای تگهای src،background و href موجود در درخواست را با مقادیر موجود در صفحه موردنظر تطابق میدهد. در صورت عدم تطبیق با حذف کوکی، بسته فرستاده میشود.
-3 ابزار :CSRFTester ابزاری برای تشخیص حملات CSRF متعلق به OWASP است. با این ابزار میتوان یک تراکنش را که کاربر معتبری بعد از احراز هویت انجام میدهد، ذخیره کرده و دادههای موجود در تراکنش ذخیرهشده را که کاربر برای اجرای درخواست به سمت کارپذیر فرستاده بود را بهدلخواه تغییر داد. سپس یک کاربر معتبر در وبگاه واردشده و تراکنش ذخیرهشده را در نشست خود در قالب درخواست r اجرا میکند. اگر درخواست اجرا شد و دادههای دلخواه را که در مرحله قبل روی تراکنش ذخیرهشده انجام شده بود، در پایگاه داده اعمال کرد، میتوان نتیجه گرفت درخواست r نسبت به این حملات آسیبپذیر است
زیرا یک تراکنش که متعلق به نشست اول است در نشست دوم اجراشده است و این به این معنی است که کارپذیر از مکانیزمی برای تشخصی تراکنش جعلی استفاده نکرده و کاربر دوم توانسته درخواست r را که متعلق به نشست دیگر بوده در نشست خود اجرا کند.
موضوع پژوهش انجامشده در مقاله، تشخیص حملات CSRF است. بنابراین با مقایسه و تحلیل کارهای حوزه تشخیص، نقطهضعف موجود در دو فعالیت اول را بهصورت زیر جمعبندی مینماییم.
-1 هر دو افزونه، عملیات تشخیص حملات CSRF را در سمت کارخواه 7اجرا میکنند. به همین دلیل بر سرعت و عملکرد مرورگر تأثیر منفی خواهند داشت.
-2 این دو روش نیاز به تشخیص نوع محتوای درخواستها و نیز نوع محتوای مورد انتظار دارند.
-3 هر دو افزونه برای اجرا نیاز به اطلاع داشتن از فرمهای داخل صفحه دارند که نوعی وابستگی به ساختار صفحه موردبررسی است. بهعبارتدیگر تشخیص این موارد رویکردی جعبه سفید است.
روش پیشنهادی ما از نشانههای امنیتی که مهمترین راهکار برای مقابله با حملات CSRF است، استفاده میکند و هیچ عملیات اضافهای در سمت کاربر تحمیل نمیکند. احتیاجی به اطلاع داشتن از محتوای مورد انتظار تگها ندارد و نیز از ساختار صفحه برای تشخیص خود استفاده نمیکند. بلکه با استفاده از سرآیند بسته و با تحلیل ترافیک ورودی و خروجی، مقاوم بودن درخواستهای وبگاه را تشخیص میدهد.
عملکرد ابزار CSRFTester به این صورت است که درخواستهایی که میخواهیم از مقاوم بودن آنها مطمئن شویم باید تک تک با این ابزار بررسی شوند و این ابزار بهطور خودکار تمام درخواستهای ارسالی را بررسی نمیکند. این ابزار برای تشخیص مقاوم بودن درخواست، درخواست جعلی را اجرا میکند که اگر اجرا شود، درخواست آسیبپذیر خواهد بود. اجرای این درخواست به دلیل آسیبپذیر بودن منجر به تغییراتی در پایگاه داده میشود.
علاوه بر این، CSRFTester فقط از دو نشست برای تشخیص آسیبپذیری استفاده میکند. داشتن چندین نشست بهبودی درنتیجه ابزار ندارد. روش ما بهطور خودکار همهی درخواستهای ارسالی کاربر را تجزیهوتحلیل کرده، درخواستهای مقاوم را تشخیص میدهد. هیچ دستکاری غیرمجازی در پایگاه داده انجام نمیدهد. بهعبارتدیگر روش ارائهشده امکان تشخیص آسیبپذیری بدون انجام تغییرات غیرمجاز در پایگاه داده را فراهم میآورد.
بنابراین هدف ما از این تحقیق ارائه روشی است که بدون هیچگونه دسترسی به جزئیات داخلی عملکرد برنامه، کد منبع و هیچگونه تغییرات غیرمجاز، دنبال شواهدی هستیم تا نشان دهد که آیا نشانه ضد CSRF در درخواستهای ارسالی به کارپذیر استفادهشده است یا خیر.
-4 روش پیشنهادی
همانطور که گفتیم مهمترین مکانیزم دفاعی در برابر حملات CSRF استفاده از نشانههای تصادفی در درخواستهای ارسالی است. طوری که این مقدار قابل حدس زدن و دسترسی برای حملهکننده نباشد. ما در این مقاله با استفاده از ویژگی غیرقابل حدس بودن و دیگر ویژگیهای جانبی نشانههای ضد CSRF سعی در یافتن نشانه در ترافیک ورودی داریم. روش ارائهشده در شکل 1-4 نشان داده شده است که از سه مؤلفه اصلی تشکیل شده است.
-1 مؤلفه استخراج پارامتر که همهی پارامترهای ارسال شده در درخواستهای موجود در ترافیک ورودی را استخراج میکند.
-2 قواعد تشخیص نشانه که در قالب یک پایگاه قواعد نگهداری میشوند.
-3 سامانه تشخیص نشانه که مهمترین مؤلفه درروش پیشنهادی است با استفاده از قواعد موجود در پایگاه قواعد، از بین پارامترهای خروجی مؤلفه تشخیص پارامتر، مقادیری را که بهعنوان نشانه ضد CSRF استفاده شده است را تشخیص میدهد.
شکل :1-4 سامانه تشخیص آسیبپذیری CSRF
1؛-4 قواعد تشخیص نشانه ضد CSRF
قواعد استفادهشده در روش پیشنهادی را با توجه به عملکرد آنها در چهار دسته تقسیم کردهایم. -1 قاعده پایه: هدف از بیان این قاعده تشخیص پارامترهایی است که دارای ویژگیهایی هستند که هر نشانه ضد CSRF لزوماً باید آن ویژگیها را داشته باشد. -2 قواعد تفکیک: این قواعد، پارامترهایی را که قاعده پایه بهعنوان نشانه ضد CSRF تشخیص داده، در سه نوع نشانه طبقهبندی میکنند. -3 قواعد دقت: این قواعد برخی پارامترهایی که به اشتباه نشانه تشخیص داده شدهاند را حذف میکند. -4 قواعد اطمینان: این قواعد، نشانههای تشخیص داده شده در هر نوع را به دو دسته نشانههای قابل اتکا و نشانههای غیرقابل اتکا تقسیم میکند
ابتدا قاعده پایه بر روی پارامترهای ارسالی در ترافیک اعمال میشوند. سپس با استفاده از قواعد تفکیک، پارامترهایی که شرایط قاعده پایه را دارند به سه دسته سطح درخواست، سطح صفحه و سطح نشست تقسیم میشوند. قواعد دقت بر روی مجموعههای خروجی قواعد تفکیک اعمال شده و در پایان قواعد اطمینان نیز بر روی خروجی قواعد دقت اعمال میشوند تا در مورد میزان اطمینان به نتایج حاصل بر اساس کامل بودن ترافیک ورودی قضاوت نماید. در ادامه قواعد مربوط توضیح داده میشوند.
قاعده پایه: هر پارامتر در صورتی میتواند یک نشانه ضد CSRF در درخواست r باشد که: -1 مقدار و نام آن در عناصر صفحهای که ارجاع دهندهی درخواست r است، بهصورت مخفی وجود داشته باشد. -2 توسط کاربر مقداردهی نشده باشد. قاعده پایه بر روی همه پارامترهای استخراج شده از ترافیک ورودی اعمال میشود. در نهایت یک زیرمجموعه با نام TK از پارامترهایی که در این قاعده صدق میکنند، انتخاب میشوند.
قواعد تفکیکی: قواعد مطرح شده در این بخش از مجموعه TK سه زیرمجموعهی TKRequest، TKPage و TkSession را استخراج میکند که به ترتیب نشاندهندهی مجموعه پارامترهای دارای نشانه ضد CSRF در سطح درخواست، در سطح صفحه و در سطح نشست میباشند.
قاعده تفکیک اول: پارامتری بهعنوان نشانه سطح درخواست در نظر گرفته میشود که مقدار آن در بین همهی پارامترهای ارسالی در ترافیک ورودی، منحصربهفرد باشد.
قاعده تفکیک دوم: پارامتری جزء نشانههای سطح نشست است که مقدار آن در هیچ نشست دیگری فرستاده نشده باشد.
قاعده تفکیک سوم: پارامتری جز نشانههای سطح صفحه است که:
-1 مقدار آن فقط در یک نشست دیده شده باشد.
-2 مقدار آن فقط در درخواستهای با URL یکسان فرستاده شده باشد.
قواعد دقت: این قواعد بهطور جداگانه بر روی هرکدام از مجموعههای TKRequest، TKPage و TKSession اجرا میشوند و پارامترهایی را که به اشتباه در هر کدام از مجموعههای فوق قرار گرفتهاند، حذف میکنند.
همانطور که گفتیم شرط لازم برای قرار گرفتن پارامتر p در TKRequest برابر نبودن مقدار آن با مقدار هیچ پارامتری در کل ترافیک است. شرط لازم برای قرار گرفتن پارامتر p در TKPage، برابر نبودن مقدار پارامتر p با مقادیر همهی پارامترهایی است که شناسه نشست و آدرس صفحه متفاوتی با پارامتر p دارند و شرط لازم برای پارامتر p که در TKSession قرار گیرد، برابر نبودن مقدار p با همه مقادیری است که شناسه نشست متفاوتی با پارامتر p دارندکاملاً. مشخص است محدودیتی که برای نشانههای سطح درخواست وجود دارد بیشتر از محدودیت نشانههای سطح صفحه و سطح نشست است و محدودیت نشانههای سطح صفحه نیز بیشتر از نشانههای سطح نشست است. با در نظر گرفتن این محدودیتها، به بیان قواعد دقت خواهیم پرداخت.
بعد از اعمال قواعد تفکیک و مشخص کردن اعضای مجموعههای اشاره شده، میبینیم که:
-1 پارامتریواقعاً نشانه ضد CSRF نیست ولی به اشتباه در یکی از مجموعههای فوق وجود دارد.
-2 سه مجموعه ممکن است