330 likes | 616 Views
حمله تزریق SQL. پروژه درس امنیت پایگاه داده استاد : دکتر جلیلی ارائه دهندگان: ساجده حرّاز نرگس یوسف نژاد. فهرست مطالب. تعریف Sql Injection Attack. 1. معماری WEB APPLICATION. 2. انواع SQLIA. 3. روش های پیشگیری وتشخیص SQLIA. 4.
E N D
حمله تزریق SQL پروژه درس امنیت پایگاه داده استاد : دکتر جلیلی ارائه دهندگان: ساجده حرّاز نرگس یوسف نژاد
فهرست مطالب تعریفSql Injection Attack 1 معماری WEB APPLICATION 2 انواعSQLIA 3 روش های پیشگیری وتشخیص SQLIA 4 روش های دفاعی SQLIA 3
تعریف SQLIA • تهدید کاربردهای تحت وب SQLIA • عدم اعتبارسنجي وروديهايي كه در توليد • يك پرس وجو • دسترسی غیر مجاز به اطلاعات موجود • در پایگاه داده
انواع SQLIA • Tautologies • Illegal/Logically Incorrect Queries • Union Query • Piggy- Backed Queries • Stored Procedures • Inference • Alternate Encodings
Tautologies attack • هدف : دور زدن مکانیزمهای احراز اصالت ، استخراج داده و تشخیص پارامترهای قابل تزریق • SELECT ∗ FROM user WHERE • id = ‘1’ or ‘1 = 1’—’ AND password = ‘1111’
Illegal/Logically Incorrect Queries attack هدف: تشخیص شمای پایگاه داده ، استخراج داده ،تشخیص پارامترهای قابل تزریق به دست آوردن اطلاعات با توجه به خطاهای پایگاه داده • وارد کردن عبارت زیر در قسمت pin : convert (int,(select top 1 name from sysobjectswheretype=’u’)) • Query تولید شده در CGI layer: SELECT accounts FROM users WHERE login=’’ AND pass=’’ AND pin= convert (int,(select top 1 name from sysobjects where xtype=’u’)) • پیغام خطا در sql: "Microsoft OLE DB Provider for SQL Server (0x80040E07) Error converting nvarchar value ’CreditCards’ to a column of data type int.“ حمله کننده میفهمد: 1-پایگاه داده sql server است. 2- نام اولين جدول تعريف شده ي كاربر در پايگاه داده “credit card”
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 -- حمله کننده نسخه پایگاه داده را می فهمد.
Piggy- Backed Queries attack هدف: استخراج داده، اضافه كردن يا اصلاح داده، انجام دادن عدم سرويس دهي، اجرای دستورات دور وارد کردن مقدار “;drop table users - - “در فیلد پسورد SELECT accounts FROM users WHERE login=’doe’ AND pass=’’; drop table users -- ’ AND pin=123 نتیجه:حذف جدول users
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 وارد کردن “ ’ ; SHUTDOWN; - -” در فيلد pass: SELECT accounts FROM users WHERE login=’doe’ AND pass=’ ’; SHUTDOWN; -- AND pin= نتیجه : پایگاه داده خاموش می شود!
Alternate Encodings attack هدف: دور زدن مکانیزم های تشخیص تزریق عبارت “legalUser’; exec(0x73687574646f776e) - -“ در فیلد login SELECT accounts FROM users WHERE login=’legalUser’; exec(char(0x73687574646f776e)) -- AND pass=’’ اعداد معادل رشته shut down است در نتیجه پایگاه داده خاموش می شود.
Inference attack هدف:مشخص کردن پارامترهای قابل تزریق ، استخراج داده و مشخص کردن شمای پایگاه داده -1Blind Injection: استنتاج اطلاعات با توجه به رفتار صفحه با پرسیدن سوال های 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 آسیب پذیر است.
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
راه های پیشگیری و کشف • تست جعبه سیاه (WAVES) • چککنندههای کد ایستا (JDBC-Checker) • ترکیب تحلیل ایستا و پویا • نمونه های توسعه یافته پرس و جوی جدید • سیستمهای تشخیص نفوذ (Valeur) • فیلترکردن proxy • تصادفی کردن مجموعه دستورات (SQLrand)
راه های پیشگیری و کشف (ادامه) • تست جعبه سیاه (WAVES) • استفاده از یکweb crawler برای شناسایی تمام نقاط موجود در یک برنامه وب • ساخت حملات، مانیتور کردن پاسخ به این حملات، استفاده ازشیوههای یادگیری ماشین برای بهبود روش حملات • چککنندههای کد ایستا (JDBC-Checker) • بررسی ایستا صحت پرس و جوها • جلوگیری از حملات عدم تطابق در پرس و جو • دامنه محدودی از حملات
راه های پیشگیری و کشف (ادامه) • ترکیب تحلیل ایستا و پویا (AMNESIA ) • در مرحله استاتیک • استفاده از تحلیل استاتیک برای ساخت مدلهای متفاوت پرسوجو • در مرحله پویا • جلوی تمام پرسوجوها را قبل از فرستادن به پایگاه داده میگیرد. • مقایسه هر پرس و جو با مدل های ایستا ساخته شده • محدودیت • وابستگی موفقیت آن به صحت تحلیل ایستا برای ساختن مدل های پرس و جو
راه های پیشگیری و کشف (ادامه) • نمونه های توسعه یافته پرس و جوی جدید (SQL DOM، Safe Query Objects) • فشرده کردن پرسوجوهای پایگاه داده • عدم استفاده از الحاق یک سری رشته برای ایجاد پرس و جو • استفاده از API برای بررسی پرس و جو • بررسی نوع ورودی کاربر و فیلتر کردن ورودی • نقض: • نیاز به یادگیری و توسعه یک نمونه برنامه نویسی جدید یا فرآیند توسعه پرس وجو جدید • عدم تامین حفاظت یا امنیت سیستم های منطقی موجود
راه های پیشگیری و کشف (ادامه) • سیستمهای تشخیص نفوذ (Valeur) • مبتنی بر تکنیک های یادگیری ماشین • ساخت مدل از پرس و جوها، بررسی تطابق پرس و جوها با مدل • حملات را به خوبی تشخیص می دهد. • موفقیت آن وابسته به دنباله مجموعه یادگیری استفاده شده • false positive و false negativeزیاد
راه های پیشگیری و کشف (ادامه) • فیلترکردن proxy (Security Gateway) • اجرای قوانین تصدیق ورودی بر روی جریان داده یک برنامه وب • زبان توصیف خط مشی امنیتی (SPDL) • اعمال تغییرات و محدودیت، قبل از فرستاده شدن پارامترهای کاربردی به سرور • مشکل • وابسته به انسان • طراحان باید بدانند روی چه داده هایی و با چه ساختاری باید فیلترینگ انجام دهند.
راه های پیشگیری و کشف (ادامه) • تصادفی کردن مجموعه دستورات (SQLrand) • اجازه ایجاد پرسوجوها با استفاده از دستورالعملهای تصادفی بجای کلمات کلیدی SQL • یک فیلتر proxy پرس و جوها را از پایگاه داده جدا می کند. • مشکل: • سربار زیاد • استفاده از يک کليد سري براي تغيير دستورات
راه های دفاعی CODE SECURELY • BLOCK ATTACKS MONITOR FOR ATTACKS
CODE SECURELY • آموزش توسعه دهندگان • پرهیز از خطا در هنگام توسعه نرم افزار • پیروی از بهترین شیوه ها • استفاده از استانداردهای برنامهنویسی • استفاده از جملات آماده • فیلتر کردن ورودی • برنامه نویسی امن با Perl • برنامه نویسی امن با Java • برنامه نویسی امن با VB.NET
MONITOR FOR ATTACKS • کشف حمله در حین اجرا • گزینه های کشف حمله • سیستم تشخیص نفوذ شبکه (NIDS) • پایگاه داده ای از قوانینِ pattern-matching • مثالی از نحوه ساخت یک امضا در snort • regular expression هسته ساخت هر راه حل IDS • سیستم تشخیص نفوذ میزبان (HIDS) • سیستم تشخیص نفوذ برنامه کاربردی (AppIDS)
BLOCK ATTACKS • Application firewalls • Web-application firewalls • بین مرورگرها و برنامههای وب • مانند IDS شبکه • دریافت داده در نقطه نهایی • عدم تداخل با ترافیک قانونی یک برنامه وب • قادر به مشاهده • ترافیک رمزگشایی شدهSSL • ترافیک نرمال
BLOCK ATTACKS نرم افزار فایروال برای حفاظت • ModSecurity • یک ماژول متن باز • کاربر میتواند قوانین خود را اضافه کند. • Cisco Application Velocity System (AVS) • برای بهبود کارائی، اندازهگیری زمان پاسخ و حفاظت از برنامههای وب • قوانین توکار (built-in) • به مدیران اجازه افزودن قوانین را میدهد.
مراجع • Bravenboer, M., Dolstra, E., Visser, E., "Preventing injection attacks with syntax embeddings", Science of Computer Programming, vol. 75, pp. 473-495, 2010. • Clarke, J., "SQL Injection Attacks and Defense", Elsevier, Syngress Publishing, Inc., 2009. • Halfond, W. G. J., Viegas, J., Orso, A., "A Classification of SQL Injection Attacks and Countermeasures", Computing, 2006. • 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. • 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. • Moyle, S., "The blackhat’s toolbox: SQL injections", Network Security, pp. 12-14, 2007. • Muthuprasanna, M., Kothari, W. Ke, S., "Eliminating SQL Injection Attacks - A Transparent Defense Mechanism", Analysisو. • Nystrom, M. G., "SQL Injection Detection", O'Reilly Media, Inc,2007. • Ping-Chen, X., "SQL injection attack and guard technical research", Procedia Engineering, vol. 15, pp. 4131- 4135, 2011.
‘ or 1=1 - - ‘ ) or ‘1’ = ‘1 - - exec(0x73687574646f776e) - - ” Question? Select @@version ASCII(SUBSTRING((select top 1 name from sysobjects),1,1)) > X WAITFOR 5 --’’