راه های پیشگیری و کشف (ادامه)

Download Report

Transcript راه های پیشگیری و کشف (ادامه)

‫حمله تزریق ‪SQL‬‬
‫پروژه درس امنیت پایگاه داده‬
‫استاد ‪ :‬دک تر جلیلی‬
‫ارائه دهندگان‪:‬‬
‫ساجده ّ‬
‫حراز‬
‫نرگس یوسف نژاد‬
‫فهرست مطالب‬
‫‪2‬‬
‫تعریف ‪Sql Injection Attack‬‬
‫‪1‬‬
‫معماری ‪WEB APPLICATION‬‬
‫‪2‬‬
‫انواع ‪SQLIA‬‬
‫‪3‬‬
‫روش های پیشگیری وتشخیص ‪SQLIA‬‬
‫‪4‬‬
‫روش های دفاعی ‪SQLIA‬‬
‫‪3‬‬
‫تعریف ‪SQLIA‬‬
‫تهدید کاربردهای تحت وب‬
‫‪SQLIA‬‬
‫عدم اعتبارسنجي وروديهاي ي كه در توليد‬
‫يك پرس وجو‬
‫دسترسی غیر مجاز به اطالعات موجود‬
‫در پایگاه داده‬
‫‪3‬‬
‫گزارش اخیر موسسه ‪OWASP‬‬
‫‪4‬‬
WEB APPLICATION ‫معماری‬
5
SQLIA ‫انواع‬
Tautologies
Illegal/Logically Incorrect Queries
Union Query
Piggy- Backed Queries
Stored Procedures
Inference
Alternate Encodings
6
‫‪Tautologies attack‬‬
‫‪ ‬هدف ‪ :‬دور زدن مکانیزمهای احراز اصالت ‪ ،‬استخراج داده و تشخیص پارامترهای قابل‬
‫تزریق‬
‫‪ SELECT ∗ FROM user WHERE‬‬
‫’‪ id = ‘1’ or ‘1 = 1’—’ AND password = ‘1111‬‬
‫‪7‬‬
Illegal/Logically Incorrect Queries attack
‫ تشخیص پارامترهای قابل تزریق‬، ‫ استخراج داده‬، ‫ تشخیص شمای پایگاه داده‬: ‫هدف‬
‫به دست اوردن اطالعات با توجه به خطاهای پایگاه داده‬
: pin ‫ وارد کردن عبارت زیر در قسمت‬.1
convert (int,(select top 1 name from sysobjects wheretype=’u’))
: CGI layer ‫ تولید شده در‬Query .2
SELECT accounts FROM users WHERE login=’’ AND pass=’’ AND pin=
convert (int,(select top 1 name from sysobjects where xtype=’u’))
:sql ‫ پیغام خطا در‬.3
"Microsoft OLE DB Provider for SQL Server (0x80040E07) Error converting
nvarchar value ’CreditCards’ to a column of data type int. “
.‫ است‬sql server ‫پایگاه داده‬-1 :‫حمله کننده میفهمد‬
“credit card” ‫ نام اولين جدول تعريف شده ي كاربر در پايگاه داده‬-2
8
Union Query attack
‫ استخراج داده‬، ‫ دور زدن مکانیزم های احراز اصالت‬:‫هدف‬
$sqlquery = "SELECT * From news WHERE id =$id";
$process=odbc_exec($sqlconnect, $sqlquery);
echo odbc_result($process,2);
‫به جای عدد در فیلد‬1 and 1=2 union select 1,@@version— ‫وارد کردن مقدار‬
: id
SELECT * From news WHERE id = 1 and 1=0
union select 1,@@version,3 -.‫حمله کننده نسخه پایگاه داده را می فهمد‬
9
Piggy- Backed Queries attack
‫ اجرای دستورات دور‬،‫ انجام دادن عدم سرويس دهي‬،‫ اضافه كردن يا اصالح داده‬،‫ استخراج داده‬:‫هدف‬
‫;“ در فیلد پسورد‬drop table users - - “ ‫وارد کردن مقدار‬
SELECT accounts FROM users WHERE
login=’doe’ AND
pass=’’; drop table users -- ’ AND pin=123
users ‫حذف جدول‬:‫نتیجه‬
10
Stored Procedures attack
‫ افزایش امتیازات و عدم سرویس دهی‬:‫هدف‬
:‫رویه ذخیره شده در پایگاه داده‬
CREATE PROCEDURE DBO.isAuthenticated
@userName varchar2, @pass varchar2, @pin int AS
EXEC("SELECT accounts FROM users
WHERE login=’" +@userName+ "’ and pass=’" +@password+ "’ and pin="
+@pin);
GO
:pass ‫ ; ’ “در فيلد‬SHUTDOWN; - -” ‫وارد کردن‬
SELECT accounts FROM users WHERE
login=’doe’ AND pass=’ ’; SHUTDOWN; -- AND pin=
!‫ پایگاه داده خاموش می شود‬: ‫نتیجه‬
11
Alternate Encodings attack
‫ دور زدن مکانیزم های تشخیص‬:‫هدف‬
‫“ در فیلد‬legalUser’; exec(0x73687574646f776e) - -“ ‫تزریق عبارت‬
login
SELECT accounts FROM users WHERE login=’legalUser’;
exec(char(0x73687574646f776e)) -- AND pass=’’
.‫ است در نتیجه پایگاه داده خاموش می شود‬shut down ‫اعداد معادل رشته‬
12
‫‪Inference attack‬‬
‫هدف‪ :‬مشخص کردن پارامترهای قابل تزریق ‪ ،‬استخراج داده و مشخص کردن شمای پایگاه داده‬
‫‪ : Blind Injection -1‬استنتاج اطالعات با توجه به رفتار صفحه با پرسیدن سوال های ‪ true‬یا‬
‫‪false‬‬
‫‪1-SELECT accounts FROM users WHERE‬‬
‫‪login=’legalUser’and 1=0 -- ’ AND pass=’’ AND pin=0‬‬
‫‪2-SELECT accounts FROM users WHERE‬‬
‫‪login=’legalUser’ and 1=1 -- ’ AND pass=’’ AND pin=0‬‬
‫اگر برنامه امن باشد‪ :‬پارامتر ‪ login‬اسیب پذیر نیست‪.‬‬
‫اگر برنامه نا امن باشد‪:‬پیغام خطا نشان داده شده و پارامتر ‪ login‬اسیب پذیر است‪.‬‬
‫‪13‬‬
Inference attack (continue)
Timing Attack-2
sql ‫با استفاده از ساختارهای‬،‫به دست اوردن اطالعات با توجه به تاخیر های زمانی در عکس العمل پایگاه داده‬
‫که زمان مشخصی برای اجرا می گیرند‬
SELECT accounts FROM users WHERE
login=’legalUser’and ASCII(SUBSTRING((select top 1
name from sysobjects),1,1)) > X WAITFOR 5 -- ’ AND
pass=’’ AND pin=0
14
‫راه های پیشگیری و کشف‬
‫‪ ‬تست جعبه سیاه (‪)WAVES‬‬
‫‪ ‬چککنندههای کد ایستا (‪)JDBC-Checker‬‬
‫‪ ‬ترکیب تحلیل ایستا و پویا‬
‫‪ ‬نمونه های توسعه یافته پرس و جوی جدید‬
‫‪ ‬سیستمهای تشخیص نفوذ ( ‪)Valeur‬‬
‫‪ ‬فیلترکردن ‪proxy‬‬
‫‪ ‬تصادفی کردن مجموعه دستورات (‪)SQLrand‬‬
‫‪15‬‬
‫راه های پیشگیری و کشف (ادامه)‬
‫‪ ‬تست جعبه سیاه (‪)WAVES‬‬
‫‪ ‬استفاده از یک ‪web crawler‬برای شناسای ی تمام نقاط موجود در یک برنامه وب‬
‫‪ ‬ساخت حمالت‪ ،‬مانیتور کردن پاسخ به این حمالت‪ ،‬استفاده ازشیوههای یادگیری ماشین برای بهبود‬
‫روش حمالت‬
‫‪ ‬چککنندههای کد ایستا (‪)JDBC-Checker‬‬
‫‪ ‬بررسی ایستا صحت پرس و جوها‬
‫‪ ‬جلوگیری از حمالت عدم تطابق در پرس و جو‬
‫‪ ‬دامنه محدودی از حمالت‬
‫‪16‬‬
‫راه های پیشگیری و کشف (ادامه)‬
‫‪ ‬ترکیب تحلیل ایستا و پویا ( ‪)AMNESIA‬‬
‫‪ ‬در مرحله استاتیک‬
‫• استفاده از تحلیل استاتیک برای ساخت مدلهای متفاوت پرسوجو‬
‫‪ ‬در مرحله پویا‬
‫• جلوی تمام پرسوجوها را قبل از فرستادن به پایگاه داده میگیرد‪.‬‬
‫• مقایسه هر پرس و جو با مدل های ایستا ساخته شده‬
‫‪ ‬محدودیت‬
‫• وابستگی موفقیت ان به صحت تحلیل ایستا برای ساختن مدل های پرس و جو‬
‫‪17‬‬
‫راه های پیشگیری و کشف (ادامه)‬
‫‪ ‬نمونه های توسعه یافته پرس و جوی جدید (‪Safe Query ،SQL DOM‬‬
‫‪)Objects‬‬
‫‪ ‬فشرده کردن پرسوجوهای پایگاه داده‬
‫‪ ‬عدم استفاده از الحاق یک سری رشته برای ایجاد پرس و جو‬
‫‪ ‬استفاده از ‪ API‬برای بررسی پرس و جو‬
‫‪ ‬بررسی نوع ورودی کاربر و فیلتر کردن ورودی‬
‫‪ ‬نقض‪:‬‬
‫• نیاز به یادگیری و توسعه یک نمونه برنامه نویسی جدید یا فرایند توسعه پرس وجو جدید‬
‫• عدم تامین حفاظت یا امنیت سیستم های منطقی موجود‬
‫‪18‬‬
‫راه های پیشگیری و کشف (ادامه)‬
‫‪ ‬سیستمهای تشخیص نفوذ (‪)Valeur‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪19‬‬
‫مبتنی بر تکنیک های یادگیری ماشین‬
‫ساخت مدل از پرس و جوها‪ ،‬بررسی تطابق پرس و جوها با مدل‬
‫حمالت را به خوبی تشخیص می دهد‪.‬‬
‫موفقیت ان وابسته به دنباله مجموعه یادگیری استفاده شده‬
‫‪ false positive‬و ‪ false negative‬زیاد‬
‫راه های پیشگیری و کشف (ادامه)‬
‫‪ ‬فیلترکردن ‪)Security Gateway( proxy‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫اجرای قوانین تصدیق ورودی بر روی جریان داده یک برنامه وب‬
‫زبان توصیف خط مشی امنیتی )‪(SPDL‬‬
‫اعمال تغییرات و محدودیت‪ ،‬قبل از فرستاده شدن پارامترهای کاربردی به سرور‬
‫مشکل‬
‫• وابسته به انسان‬
‫• طراحان باید بدانند روی چه داده های ی و با چه ساختاری باید فیلترینگ انجام دهند‪.‬‬
‫‪20‬‬
‫راه های پیشگیری و کشف (ادامه)‬
‫‪ ‬تصادفی کردن مجموعه دستورات (‪)SQLrand‬‬
‫‪ ‬اجازه ایجاد پرسوجوها با استفاده از دستورالعملهای تصادفی بجای کلمات کلیدی ‪SQL‬‬
‫‪ ‬یک فیلتر ‪ proxy‬پرس و جوها را از پایگاه داده جدا می کند‪.‬‬
‫‪ ‬مشکل‪:‬‬
‫• سربار زیاد‬
‫• استفاده از يک کليد سري براي تغيير دستورات‬
‫‪21‬‬
‫مقایسه راه های پیشگیری و کشف‬
‫‪22‬‬
‫راه های دفاعی‬
CODE
SECURELY
BLOCK
ATTACKS
MONITOR
FOR
ATTACKS
23
‫‪CODE SECURELY‬‬
‫‪ ‬اموزش توسعه دهندگان‬
‫‪ ‬پرهیز از خطا در هنگام توسعه نرم افزار‬
‫‪ ‬پیروی از بهترین شیوه ها‬
‫‪ ‬استفاده از استانداردهای برنامهنویسی‬
‫‪ ‬استفاده از جمالت اماده‬
‫‪ ‬فیلتر کردن ورودی‬
‫‪ ‬برنامه نویسی امن با ‪Perl‬‬
‫‪ ‬برنامه نویسی امن با ‪Java‬‬
‫‪ ‬برنامه نویسی امن با ‪VB.NET‬‬
‫‪24‬‬
‫برنامه نویسی امن با ‪Java‬‬
‫‪25‬‬
‫‪MONITOR FOR ATTACKS‬‬
‫‪ ‬کشف حمله در حین اجرا‬
‫‪ ‬گزینه های کشف حمله‬
‫‪ ‬سیستم تشخیص نفوذ شبکه (‪)NIDS‬‬
‫قوانین ‪pattern-matching‬‬
‫• پایگاه داده ای از‬
‫ِ‬
‫• مثالی از نحوه ساخت یک امضا در ‪snort‬‬
‫• ‪ regular expression‬هسته ساخت هر راه حل ‪IDS‬‬
‫‪ ‬سیستم تشخیص نفوذ میزبان (‪)HIDS‬‬
‫‪ ‬سیستم تشخیص نفوذ برنامه کاربردی (‪)AppIDS‬‬
‫‪26‬‬
‫‪BLOCK ATTACKS‬‬
‫‪Application firewalls ‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪Web-application firewalls‬‬
‫بین مرورگرها و برنامههای وب‬
‫مانند ‪ IDS‬شبکه‬
‫دریافت داده در نقطه نهای ی‬
‫عدم تداخل با ترافیک قانونی یک برنامه وب‬
‫‪ ‬قادر به مشاهده‬
‫‪‬‬
‫‪ ‬ترافیک نرمال‬
‫ترافیک رمزگشای ی شده ‪SSL‬‬
‫‪27‬‬
‫‪BLOCK ATTACKS‬‬
‫نرم افزار فایروال برای‬
‫حفاظت‬
‫‪ModSecurity‬‬
‫•یک ماژول متن باز‬
‫•کاربر میتواند قوانین خود را‬
‫اضافه کند‪.‬‬
‫‪28‬‬
‫‪Cisco Application‬‬
‫‪Velocity System‬‬
‫)‪(AVS‬‬
‫•برای بهبود کارائی‪ ،‬اندازهگیری زمان‬
‫پاسخ و حفاظت از برنامههای وب‬
‫•قوانین توکار (‪)built-in‬‬
‫•به مدیران اجازه افزودن قوانین را‬
‫میدهد‪.‬‬
‫مراجع‬
1. Bravenboer, M., Dolstra, E., Visser, E., "Preventing injection attacks with syntax
embeddings", Science of Computer Programming, vol. 75, pp. 473-495, 2010.
2. Clarke, J., "SQL Injection Attacks and Defense", Elsevier, Syngress Publishing, Inc., 2009.
3. Halfond, W. G. J., Viegas, J., Orso, A., "A Classification of SQL Injection Attacks and
Countermeasures", Computing, 2006.
4. Jeong, I. Lee, S., Yeo, S., Moond, J., "A novel method for SQL injection attack detection
based on removing SQL query attribute values", Mathematical and Computer Modelling, vol.
55, pp. 58–68, 2012.
5. Mackay, C. A., "SQL Injection Attacks and Some Tips on How to Prevent Them", Technical
report, The Code Project, 2005,
http://www.codeproject.com/cs/database/SqlInjectionAttacks.asp.
6. Moyle, S., "The blackhat’s toolbox: SQL injections", Network Security, pp. 12-14, 2007.
7. Muthuprasanna, M., Kothari, W. Ke, S., "Eliminating SQL Injection Attacks - A Transparent
Defense Mechanism", Analysis‫و‬.
8. Nystrom, M. G., "SQL Injection Detection", O'Reilly Media, Inc, 2007.
9. Ping-Chen, X., "SQL injection attack and guard technical research", Procedia Engineering,
vol. 15, pp. 4131- 4135, 2011.
29
‘ or 1=1 - ‘ ) or ‘1’ = ‘1 - exec(0x73687574646f776e) - - ”
Select @@version
ASCII(SUBSTRING((select top 1 name from
sysobjects),1,1)) > X WAITFOR 5 --’’