بخشی از مقاله
چکیده
غالب برنامههای کاربردی تحت وب، جهت نگهداری و سازماندهی اطلاعات، از پایگاه داده استفاده میکنند. چنین سیستمهایی برای نفوذگران بسیار جذاب میباشند؛ چراکه شامل اطلاعات مهم و متنوعی هستند. یکیاز جذّابترین روشهای استخراج اطلاعات توسط نفوذگران در لایهی برنامههای کاربردی، تزریق SQL میباشد. به طور کلّی در طی سالهای اخیر بر اساس ردهبندی انجام شده توسط OWASP، تزریق کد در رتبهیاوّل تهدیدات امنیتی میباشد که تزریق SQL یکی از این موارد است. در این مقاله روشی جهت شناسایی ورودیهایی که توسط نفوذگران برای تزریق پرسوجوهای SQL به کار میروند، ارائه میگردد که این روش از یادگیری ماشین بهره می-برد و روشهای یادگیری ماشین همچون ردهبندی دو دستهای را به کار میبندد؛ همچنین روش پیشنهادی شامل بخشی جهت کاهش متغیرهای تأثیرگذار در ردهبندی است.
-1 مقدمه
در تجارت الکترونیک، تزریق SQL یکیاز مخرّبترین آسیبپذیریهایی است که یک تجارت را تحت تأثیر قرار میدهد؛ چرا که میتواند منجر به فاش شدن تمامی اطلاعات حساسی شود که در پایگاهدادهی برنامههای کاربردی نگهداری میشوند. این اطلاعات میتوانند شامل نامکاربری، کلمه-عبور، آدرس، شماره تماس و جزئیات کارت اعتباری باشند. این آسیب-پذیری زمانی ایجاد میگردد که نفوذگر قادر به تأثیرگذاری بر روی آن دسته از پرسوجوهای SQL باشد که از برنامهی کاربردی به پایگاهداده ارسال میگردند .[1] این عمل به صورت اضافه کردن یک عبارت به عبارت اصلی و یا تغییر ساختار عبارت اصلی، انجام میگیرد.
بر خلاف شناخته شده بودن تزریق SQL، این حمله در ردهیاوّل تهدیدات امنیتی قرار دارد و این موضوع بیانگر این است که راهحلهای ارائه شدهی کنونی قادر نبودهاند تا به طور کامل از این نوع حمله جلوگیری کنند. این موضوع به دلیل کمبود قدرت یادگیری و تطابق روشهای موجود، در مقابله با حملات جدید است .[2] علاوه بر این، اغلب راهحلهای کنونی بر اساس راهکارهای متمرکزی هستند که در محیط پویا و توزیع شدهی برنامههای کاربردی، قابل پیادهسازی و استفاده نیستند .[3]
در این مقاله راهکاری ساده ارائه میگردد که قادر خواهد بود تا با سربار اجرایی ناچیز، درصد بالایی از حملات تزریق SQL را تشخیص دهد. در این روش از یادگیری ماشین بهره برده میشود و با تعریف یک بردار ویژگی و محاسبهی این ویژگیها بر روی پرسوجوهای SQL، بدخواه یا سالم بودن یک پرسوجو، تخمین زده میشود. ساختار این مقاله به این صورت مرتب شده است: در بخش 2 کارهای مرتبط مرور میشوند. در بخش 3 انواع حملات تزریق SQL شرح داده میشوند. در بخش 4 روش پیشنهادی شرح داده میشود. در بخش 5 نتایج عملی آورده میشود و در بخش 6، پژوهش جمعبندی و نتیجهگیری می-شود.
-2 مرور کارهای مرتبط
تا کنون روشهای زیادی جهت پیشگیری از تزریق SQL پیشنهاد شدهاند. از بین روشهای پیشین، آن دسته از روشها که بر پایهی یادگیری ماشین بودهاند و به نوعی مشابه روش پیشنهادی هستند، انتخاب شده و مرور می-گردند. Valeur در [4] سیستم تشخیص نفوذی ارائه کرده است که از یادگیری ماشین بهره میبرد. در این سیستم متناسب با هر اسکریپتی که در برنامهی تحت وب وجود دارد و پرسوجوهای SQL تولید میکند، یک پروفایل درست میشود؛ برای هر پرسوجویی که از طرف یک اسکریپت وب تولید شده است، هر فیلد یافت شده از آن پرسوجو با الگوی آن فیلد که در پروفایل موجود است مقایسه میگردد.
این پروفایلها بروز رسانی میشوند و چنانچه در فاز آموزش برای موردی پروفایل یافت نشود، پروفایل جدیدی برای آن ایجاد میگردد؛ همچنین در مواردی که پروفایل پیدا شود ولی از الگوی پروفایل یافت شده تخطی ایجاد شود، در صورت مجاز بودن پرسوجو، حد آستانهای برای الگوی پروفایل تعریف میشود. در فاز تشخیص، پرسوجوها قبل از ورود به پایگاهداده، وارد سیستم تشخیص نفوذ میگردند. چنانچه برای فیلدی از یک پرسوجو، پروفایلی یافت نشود و یا اینکه از الگوی یافت شدهی متناسب با فیلد موجود در پرسجو، تخطّی گردد و نای تخطّی بیشتر از میزان آستانه باشد، هشدار تولید میگردد. ایراد چنین سیستمی این است که چنانچه ماشین خوب آموزش داده نشود، نرخ خطای آن بالا خواهد بود.
Wang در [5] با استفاده از ردهبندی یک ردهای، با به کار گیری ساختار درختی پرسوجوهای SQL و همچنین پارامترهای ورودی موجود در پرسوجوها و مقادیر مربوط به آنها، اقدام به جدایش پرسوجوهای غیرمجاز و مجاز مینماید. در این روش، جهت ردهبندی، از هستههای »بردار-درختی «1 که Wang برای SVM تعریف میکند، بهره برده می-شود. نتیجهی کار وی، استفاده از هردوی اطلاعات دستور زبانی یک پرس-وجوی SQL و همچنین محتویات مفهومی مربوط به برنامهی کاربردی، جهت تشخیص پرسوجوهای غیرمجاز است. روش وی در برنامههای کاربردی تحت وب قابل پیادهسازی است. ایراد این روش پیچیدگی عملکردی و سربار سیستمی است.
Abdallah در [6] روشهای یادگیری ماشین متفاوتی را جهت تحلیل دادههایی که توسط یک Honeypot خدمات وب، جمع آوری شده است، پیشنهاد میدهد. روش وی، بر اساس نوع حمله از 3 ردهبند SVM، SVM Regression و Apriori استفاده میکند تا حملاتی که در برابر خدمات وب انجام میگیرند، از جمله تزریق SQL را شناسایی کند. روش وی قادر به شناسایی حملات مختلف و قرار دادن دادهها در دو دستهی فعّال»یتهای عادی« و »حملات« است. در اینجا روشی مشابه کاری که در [6] انجام گرفته است صورت می-پذیرد؛ با این تفاوت که در اینجا تنها از ردهبند [7] SVM استفاده میشود و تمرکز کار تنها بر روی حملات تزریق کور SQL است.
برتری کار ما به ساده بودن روش پیشنهادی و همچنین استفاده از آمارهی F-score جهت کاهش ویژگیهای مربوط به ردهبندی است. کاهش ویژگیهای رده بندی موجب کاهش سربار سیستم و سریعتر شدن عمل ردهبندی میگردد. نتایج عملی حاصل از این روش که در ادامه آورده شده-اند نمایانگر این میباشند که روش پیشنهادی علیرغم سادگی و سربار محاسباتی کم، کارا و مفید میباشد.
-3 انواع تزریق SQL
زمانی که یک نفوذگر، منبع ورودی جهت بهرهبری از آسیبپذیری تزریق SQL مییابد، روشهای مختلفی را برای استخراج اطلاعات به کار میبندد .[8] در ادامه، این روشها آورده شدهاند.
-1-3 عبارات همیشه درست
این روش بر مبنای به وجود آوردن عباراتی است که همواره درست باشند؛ در این صورت میتوان از این نوع عبارات جهت دور زدن فرایند احراز اصالت و همچنین دستیابی غیر مجاز به داده از طریق ورود یک عبارت همواره درست در یک پرسوجوی شرطی، استفاده کرد. به طور معمول این نوع عبارات به شکل ]» پرسوجوی مقایسهای«or [ هستند که در آن »پرسوجوی مقایسهای« یک رابطهی همیشه درست است و وجود کلمهی «or» در این پرسوجو موجب میشود که کلّ پرسوجو فرستاده شده به پایگاهداده، عبارتی همواره درست باشد. مثال زیر نمونه ای از این نوع است. عبارت 'or 1=1' معمول ترنی نوعِ »عبارات همیشه درست« است.
-2-3 پرسوجوهای منفعت طلبانه
در این روش نفوذگر تلاش میکند تا با اضافه کردن پرسوجوهای اضافی به انتهای رشته پرسوجوی تولید شده توسط برنامهی کاربردی، به خواستهی خود مبنی بر دستکاری پایگاه داده، دست یابد. در صورت موفقیت آمیز بودن این حمله پایگاه داده پرسوجویی را دریافت میکند که ترکیبی از چند پرسوجویمتقاوت است و تنها اوّلین آنها توسط برنامهی کاربردی تولید شده است. این نوع حملات بسیار خطرناک بوده و نفوذگر قادر خواهد بود تا توسط آنها تقرباًی همه نوع از دستورات SQL را تزریق کند. مثال زیر نمونهای از این نوع است.که در آن، دستور drop table Employee توسط نفوذگر تزریق شده است.
-3-3 پرسوجوهای غیرمنطقی
در این حمله از پیامهای خطایی که توسط پایگاهداده بازگشت بر میگردند، بهره برده میشود. این خطاها اغلب محتوی اطلاعات مفیدی هستند که به نفوذگر کمک میکنند تا پارامترهای آسیب پذیر و همچنی شِ مای پایگاه داده را بیابد؛ به عنوان مثال فرض شود نفوذگر پس از وارد کردن یک پرسوجوی نادرست، خطای زیر را دریافت کند: Microsoft OLEDB provider for SQL Server - 0×80040E07 - Error converting nvarchar value "CreditCards" to a column of data type int دو مفهوم مهم از نای خطا قابل برداشت است؛ اوّل اینکه پایگاهداده SQL Serverاست و دوّم اینکه در این پایگاهداده نام اوّلین جدول تعریف شده توسط کاربر "CreditCards" است.
-4-3 درخواست شامل »اجتماع«
این حمله توسط اضافه کردن پرسوجوهای اضافی به صورت وارد کردن یک UNION و یا ";<SQL statement >" به پارامتر آسیبپذیر قابل انجام است. نتیجهی این حمله، بازگشت یک مجموعه داده از پایگاهداده است که اجتماع نتیجهی درخواست اصلی و نتیجهی درخواست تزریق شده است.به عنوان مثال میتوان عبارت زیر را در نظر گرفت. "SELECT * FROM users WHERE UserName= '' UNION SELECT * from Employee -- ' ANDPassword = 'anypwd' " در نای مثال، گرچه بخش اوّل درخواست چیزی را باز نمیگرداند، امّا بخش دوّم درخواست موجبازگشتب کلّ محتویات جدول Employee خواهد شد.
-5-3 توابع ذخیره شده
این روش بر توابع از پیش ذخیره شدهی پایگاهداده، تمرکز دارد. این توابع به طور مستقیم توسط نرمافزار پایگاهداده اجرا میشوند. چنانچه نرمافزار پایگاهداده در سطح بالایی از اختیارات اجرا شده باشد، دسترسی به این توابع میتواند نتایج خطرناکی را به دنبال داشته باشد. نمونهای از این نوع حملات در پرسوجوی زیر آورده شده است. SELECT account FROM users WHERE login='doe' AND pass=' '; SHUTDOWN; -- AND pin= همانگونه که مشهود است، این نوع حملات در قالب حملات » پرسو-جوهای منفعت طلبانه« انجام میگیرند.
-6-3 استنتاج
در این روش، درخواستهایی تولید میشوند که موجب میگردند تا برنامه-ی کاربردی یا پایگاه داده، بر اساس نتیجهی درخواست، رفتار متفاوتی داشته باشند. برای مثالی از این نوع حملات میتوان به حملات »تزریق کور« و »حملات زمانبندی« اشاره کرد.
-1-6-3 تزریق کور
در این نوع حملات، حملهکننده درخواستهایی را ارسال میکند که نتیجهی »صحیح« یا »غلط« دارند. برای هر درخواست، چنانچه پاسخ صحیح باشد، برنامهی کاربردی به درستی عمل میکند و چنانچه پاسخ نادرست باشد، موجب ایجاد یک خطا در برنامهی کاربردی خواهد شد؛ بنابراین نفوذگر میتواند به طور غیر مستقیم از پایگاهداده، اطلاعات مورد نظر خود را استخراج کند.
-2-6-3 حملات زمانبندی
در این حملات، نفوذگر با مشاهدهی تأخیر ایجاد شده در پاسخ پایگاهداده، اطلاعات جمعآوری میکند. نفوذگر جهت انجام چنین حملاتی، درخواست را به شکل »اگر»-«بنابراین« مینویسد و از کلمات کلیدی همچون WAITFOR استفاده میکند. استفاده از این کلمه موجب تأخیر در پاسخ-گویی پایگاهداده میگردد. نمونهای از این نوع درخواستها به صورت زیر است. ; IF EXISTS - SELECT [Table name] FROM [Database name] - WAITFOR DELAY '0 :0:10'--
-7-3 کد نمودن به صورت متفاوت
برای فرار از فیلترها و بررسی امضا، نفوذگران درخواستهای مورد تزریق خود را دستکاری میکنند که به این عمل »کد کردن فرعی« گفته می-شود؛ به این صورت که کدهای ASCII، کدهای مبنای شانزده و کدهای Unicode میتوانند در حین فرایند تزریق، به همراه روشهای دیگر به کار گرفته شوند و نفوذگر را قادر سازند تا از روشهای متفاوت تشخیص نفوذ، رهایی یابد. در ادامه روشی ساده جهت پیشگیری حملات تزریق SQL پیشنهاد میشود. روش پیشنهادی از یادگیری ماشین بهره میبرد.
-4 روش پیشنهادی
در این بخش پیشنیازها و همچنین روش پیشنهادی شرح داده میشود.
-1-4 پیشنیازها
این بخش به تشریح پیشنیازهای مورد استفاده در روش پیشنهادی میپردازد. F-Score -1-1-4 F-score یک آمارهی ساده است که تمایز دو مجموعه از اعداد را اندازه-گیری میکند .[9] چنانچه , = 1, … , یک بردار از ویژگیها در نظر گرفته شود و + و − به ترتیب تعداد پرسوجوهای غیرمجاز و مجاز باشند.