امنیت

استفاده از Request Filtering برای جلوگیری از حملات SQL Injection

در سال ۲۰۰۷ میلادی، حملات SOL Injection به عنوان یکی از شایع ترین حملات سایبری شناخته شد و در سال های پس از آن، علیرغم اطلاع رسانی ها و تحقیقات گسترده صورت گرفته، این حملات روز به روز پیش رفته تر و فراگیر تر شدند.

این حمله عموما با استفاده از ورود اطلاعات مخرب به فرم های اینترنتی رخ می دهد. همچنین  وبسایت های مبتنی بر فریم ورک ASP با کوئری های SQL درون خطی (inline) قربانیان اصلی این حملات هستند. جلوگیری از این حملات، بدون در نظر گرفتن کدینگ و برنامه نویسی سایت، تا حدودی با استفاده از قابلیت IIS Request Filtering امکان پذیر است. در ادامه راهکار جلوگیری از این حملات با استفاده از قابلیت مذکور مورد بحث قرار خواهد گرفت.

شناسایی حملات SQL Injection

استفاده از IIS Logs

غالبا بیشتر مدیران وبسایت، با حملات SQL Injection پس از وقوع و به خطر افتادن امنیت دیتابیس و وبسایت و یا حتی هک شدن آنها آشنا می شوند. یکی از یهترین ابزار های شناسایی این حملات، لاگ ترافیک وبسایت شماست که توسط IIS تولید می شود. عموما در لاگ وبسایت های مورد تهاجم قرار گرفته، لاگ درخواست های معتبر در میان انبوه لاگ درخواست های مخرب پراکنده شده اند. در انتهای هر ردیف از درخواست ها، کد وضعیت HTTP پاسخ داده شده به درخواست ثبت شده است. در صورت وجود کد ۴۰۴، ۵۰۰ و یا ۴۰۳، جایی برای نگرانی وجود ندارد و این حملات همچنان موثر واقع نشده اند (این مورد دلیلی بر عدم اتخاذ سیاست های امنیتی جدی نیست!)، اما در صورت وجود کد HTTP 200 ، به شما پیشنهاد می کنیم که کاملا نگران شوید!

1

 

استفاده از Log Parser

گشت گذار در لاگ های وبسایت تولید شده توسط IIS و تلاش برای شناسایی حملات به این روش، ممکن است زمان زیادی را تلف کند. یکی از ابزار های دوست داشتنی Microsoft که می تواند شما را برای شناسایی حملات SQL injection یاری دهد Log Parser است. با استفاده از Query زیر در log parser می توانید نسبت به شناسایی این حملات اقدام کنید.

logparser.exe “SELECT EXTRACT_FILENAME(cs-uri-stem) AS PageRequest, cs-uri-query, COUNT(*) AS TotalHits
FROM **[LOG FILE PATH]** TO results.txt
GROUP BY cs-uri-stem, cs-uri-query
ORDER BY TotalHits DESC”

** به جای عبارت [LOG FILE PATH] ، مسیر فایل log ایجاد شده توسط IIS را وارد کنید.

استفاده از Findstr

در صورت وجود تعداد زیادی Log File، استفاده از دو ابزار اول غیر منطقی به نظر می رسد. ابزار Findstr یک ابزار موجود در ویندوز برای جستوی پیشترفته string های مختلف است. با استفاده از این ابزار امکان در نظر گرفتن استثناء های مختلف جهت دریافت نتیجه دقیق تر وجود دارد. همچنین با استفاده از این ابزار و ایجاد یک Batch file می توان مکانیزمی برای مانیتور وبسایت جهت جلوگیری از حملات آینده نیز تعریف کرد.

 

findstr /s /i /p  /g:sqlinject.txt**[LOG FILE PATH]** >c:\results.txt

** به جای عبارت [LOG FILE PATH] ، مسیر فایل log  های ایجاد شده توسط IIS را وارد کنید.

تنظیمات IIS Request Filtering

ماژول Request Filtering در IIS ورژن ۷ به عنوان جا نشینی برای URL Scan معرفی شد.با استفاده از ابزار های معرفی شده برای شناسایی حملات SQL Injection ، ممکن است تعداد زیادی لاگ حملات و درخواست های مخرب به دست آورید. یک دستور Request Filtering در IIS می تواند یک درخواست مخرب را بر اساس پسوند فایل، URL، HTTP Verb، Header و Query Stringمسدود کند. علاوه بر این امکان مسدود سازی درخواست ها بر اساس حجم یک Query string و یا تعداد کاراکتر های URL نیز وجود دارد.

 

2

 

همانند اغلب ماژول های IIS امکان ویرایش فایل Web.config وبسایت برای تغییر تنظیمات Request filtering نیز وجود دارد. مقادیر مربوط به این قابلیت در تگ <requestFiltering> که زیر شاخه ای از <system.webServer> است قابل ویرایش است.

 

3

دستور های Filtering

 

عموما برای مسدود سازی درخواست ها، در Rule ایجاد شده تنها یک Deny string ایجاد می شود. امکان اضافه کردن چندین Deny String برای یک Rule هم وجود دارد. حال آن که مدیریت این قوانین با ایجاد یک Deny String به ازای هر Rule بسیار ساده تر و کاربردی تر خواهد بود. به طور مثال در صورتی که یک Deny String یک درخواست معتبر برای دسترسی به یک صفحه معتبر را مسدود کند، به راحتی با غیر فعال کردن این rule مشکل برطرف می شود. بدون این که در کار باقی Deny String ها خللی وارد شود. همچنین URL درخواست شده نیز می تواند برای شناسایی یک Deny String اسکن شود. حال آنکه فعال سازی URL Scan می بایست با دقت بیشتری انجام شود. به طور مثال در صورت ایجاد یک Rule با deny string مربوط به کد update در SQL، و همچنین وجود یک صفحه با نام update.aspx، تمامی درخواست های مربوط به این صفحه مسدود می شوند.

 

4

 

 

**یکی از حیاتی ترین Deny string ها برای جلوگیری از حملات SQL Injection دستور cast( است. تقریبا تمامی حملات مستند، از این string استفاده می کند و هیچ درخواست معتبری نباید شامل این String باشد.

 

کد های وضعیتی ۴۰۴

تمامی درخواست های مسدود شده با استفاده از Request Filtering با یک کد وضعیت ۴۰۴ و یک زیر کد پاسخ داده می شوند. تعدادی از رایج ترین کد های وضعیتی در ادامه آورده شده است.

 

5

 

 

با استفاده از Request Filtering، بررسی وضعیت درخواست های مخرب و مسدود شده بسیار راحت تر خواهد بود. با استفاده از Query زیر در Log Parser ، امکان تهیه لاگ از تمامی درخواست های مسدود شده توسط Request Filtering وجود دارد.

 

logparser.exe “SELECT EXTRACT_FILENAME(cs-uri-stem) AS FILENAME, cs-uri-query, COUNT(*) AS TotalHits
FROM **[LOG FILE PATH]** TO results.txt
WHERE (sc-status = 404 AND sc-substatus > 0)
GROUP BY cs-uri-stem, cs-uri-query
ORDER BY TotalHits DESC

** به جای عبارت [LOG FILE PATH] ، مسیر فایل log ایجاد شده توسط IIS را وارد کنید.

به این نوشته امتیاز دهید
[Total: 0 Average: 0]

با کارت بانکی باشگاه ایران هاست پولتان به حسابتان باز می گردد.

همین حالا رایگان عضو شوید

سلیم شهری

علاقه‌مند به IT

نوشته های مشابه

یک نظر

  1. **یکی از حیاتی ترین Deny string ها برای جلوگیری از حملات SQL Injection دستور cast( است. تقریبا تمامی حملات مستند، از این string استفاده می کند و هیچ درخواست معتبری نباید شامل این String باشد.

    معنیش رو متوججه نمیشم

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

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

دکمه بازگشت به بالا
بستن
بستن