Data Base Security (SQL Injection Attacks)

38
SQL Injection Attack (SQLIA) بهار1393 م خدا نا ب کنندهیه ته: وشککی حسن ک امنیت پایگاه داد هEmail: [email protected]

Transcript of Data Base Security (SQL Injection Attacks)

Page 1: Data Base Security (SQL Injection Attacks)

SQL Injection Attack (SQLIA)

1393بهار

بنام خدا

:تهیه کننده

حسن کوشککی

هدادپایگاه امنیت

Email: [email protected]

Page 2: Data Base Security (SQL Injection Attacks)

فهرست مطالب

SQLIAتعریف . 1

SQLIAانواع حمالت . 2

SQLIAروش های دفاع در مقابل . 3

SQLIAروش های جلوگیری و تشخیص در . 4

مقایسه روش ها و نتیجه گیری. 5

Page 3: Data Base Security (SQL Injection Attacks)

SQLIAتعریف

ادهدکاربردیهایبرنامهازاستفادهجهت(مخرب)کدتزریقتکنیک•محور

دونبافرادوکندمیتهدیدراوبتحتکاربردهایبیشترحملهاین•رتصوبههادادهپایگاهدرموجوداطالعاتبهشوندهویتاحرازاینکه

کنندمیدسترسیمجازغیر

مقدمه

Page 4: Data Base Security (SQL Injection Attacks)

مقدمهSQLIAتعریف

SQLمراحل اجرای تزریق

Page 5: Data Base Security (SQL Injection Attacks)

SQLIAتعریف

:SQLدسته بندی حمالت

حمالت مرتبه اول

تغییر ساختارSQL

حمالت مرتبه دوم

تزریق کد مخرب به محل ذخیره سازی داده ها

مشاهده نتایج در اجراهای بعد

حمالت کوتاه سازی دستورات

بافرهااستفاده از سایز

مقدمه

Page 6: Data Base Security (SQL Injection Attacks)

SQLIAانواع حمالت

Tautologies

Illegal/Logically Incorrect Queries

Union Query

Piggy- Backed Queries

Stored Procedures

Inference

Alternate Encodings

حمالت SQL

مقدمه

Page 7: Data Base Security (SQL Injection Attacks)

حمالت SQL

مقدمه

; می شودجوهاباعث جداسازی دستورات یا پرس و

“ برای مشخص کردن رشته ها استفاده می شود‘یا

هر دستوری که بعد از- بیاید نادیده گرفته می شود/*...*/ یا -

SQLIAانواع حمالت

Page 8: Data Base Security (SQL Injection Attacks)

فرض کنیم از شبه کد زیر برای کنترل مجوز ورود کاربران استفاده می شود:

Session_Start();

$username=$_post[username];

$password=$_post[password];

Select * from user where login=' $username ' and pass=‘password';

SQLIAتعریف

حمالت SQL

مقدمه

Page 9: Data Base Security (SQL Injection Attacks)

Tautologies attack

اضافه کردن کد به قسمت های شرطی

فرار از احراز هویت و استخراج داده: هدف

وارد کردن عبارت : مثالor 2=2 - :جای نام کاربری در ورودیب”-

SELECT accounts FROM users WHERE

login=’’ or 2=2 - - AND pass=’’

حمالت SQL

مقدمه

Page 10: Data Base Security (SQL Injection Attacks)

Illegal/Logically Incorrect Queries attack

خطای نحویمنطقیخطاهاینوعتبدیلخطاهای

مثال :convert (int,(select top 1 name from sysobjects where xtype=’u’))

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."

حمله کننده نام پایگاه داده و نام جدول و نوع ستون را می فهمد

حمالت SQL

مقدمه

Page 11: Data Base Security (SQL Injection Attacks)

Union Query attack

اضافه کردنUnion

استخراج دادهوبازگشتی، فرار از احراز هویت رکوردهایتغییر : هدف

وارد کردن عبارت زیر در قسمت : مثالlogin:

“ UNION SELECT cardNo from CreditCards where acctNo=10032 - -

SELECT accounts FROM users WHERE login=’’ UNION SELECT cardNofrom CreditCards where acctNo=10032 -- AND pass=’’

اطالعات جدول دوم نیز برای شرط مورد نظر نمایش داده می شود

حمالت SQL

مقدمه

Page 12: Data Base Security (SQL Injection Attacks)

Piggy- Backed Queries attack

داده و استخراج دادهتغییر، سرویسجهت منع : هدف

فیلدوارد کردن عبارت زیر در : مثالOrderID :12345 ; drop table Order - -

SELECT * FROM Order

WHERE OrderID=12345 ; drop table Order

پاک شدن تمام جداول کاربر

حمالت SQL

مقدمه

Page 13: Data Base Security (SQL Injection Attacks)

Stored Procedures attack

وامتیازاتتشدید،سرویسازجلوگیری:هدفremote command

باشدشکلبدینسرورسمتدرپارامترهااعتبارکردنچکروالاگر:مثال:

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’);

- ;SHUTDOWN ; “با وارد کردن :passدر فیلد -

SELECT accounts FROM users WHERE

login=’Alice’ AND pass=’’; SHUTDOWN; -- AND pin=

خاموش شدن پایگاه داده و عدم سرویس دهی سرور

حمالت SQL

مقدمه

Page 14: Data Base Security (SQL Injection Attacks)

Inference attack

دادهپایگاهشمایتعیینودادهاستخراجپذیر،آسیبهایپارامترشناسایی:هدف

Blind Injection .1 : استنتاج اطالعات با توجه به رفتار صفحه

- legalUser’ and 1=0“وارد کردن : مثال - legalUser’ and 1=1“و ”- را در قسمت ”-login در دو مرحله:

SELECT accounts FROM users WHERE login=’legalUser’ and 1=0 -- ’ AND pass=’’ AND pin=0

SELECT accounts FROM users WHERE login=’legalUser’ and 1=1 -- ’ AND pass=’’ AND pin=0

مهاجم رفتار سیستم را در برابر پرس و جوهای درست یا غلط مشاهده می کند

حمالت SQL

مقدمه

Page 15: Data Base Security (SQL Injection Attacks)

Timing Attack .2 : کسب اطالعات از طریق تاخیر در جوابquery

:loginفیلدزیردروارد کردن مقدار : مثال’legalUser’ and ASCII( SUBSTRING( (select top 1 name from sysobjects),1,1)) > X

WAITFOR 5 - -

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

با توجه به میزان تاخیر و بدست آوردن نام اولین جدول طی چند مرحلهxتغییر مقدار

حمالت SQL

مقدمه ( ادامه) Inference attack

Page 16: Data Base Security (SQL Injection Attacks)

Alternate Encodings attack

فرار از احراز هویت: هدف

:وارد کردن عبارت زیر: مثال

“legalUser’; exec(0x73687574646f776e) - loginفيلددر -

SELECT accounts FROM users WHERE login=’legalUser’;

exec(char(0x73687574646f776e)) -- AND pass=’’ AND pin=

خاموش شدن پایگاه داده

حمالت SQL

مقدمه

Page 17: Data Base Security (SQL Injection Attacks)

SQLIAروشهای دفاع در مقابل

Prepared statement

Stored Procedure

Escaping All User Supplied Input

Least Privilege

White List Input Validation

روشهای دفاع

حمالت SQL

مقدمه

Page 18: Data Base Security (SQL Injection Attacks)

Prepared statement

شدهپارامتربندیجستجوهای

نویسبرای برنامه راهکاراولين

کاربرورودیازمستقلاطالعاتیبانک

کدکاملتعریفSQLپارامترهامقدارگذاریبدون

استفاده از آن در زبان های مختلف:

• Java EE – use PreparedStatement()

• * .NET – use SqlCommand() or OleDbCommand()

• * PHP – use PDO )(...

روشهای دفاع

حمالت SQL

مقدمه

Page 19: Data Base Security (SQL Injection Attacks)

Stored procedure

امنسازیپيادهصورتدر

آنهافراخوانیوبدنهدرکدهاذخيره

کاربراندسترسیکردنمحدود

هایکدآوریجمعSQLکاربراندسترسازدورآنهانگهداریومکانیکدر

روشهای دفاع

حمالت SQL

مقدمه

Page 20: Data Base Security (SQL Injection Attacks)

Escaping User Input ایجاد یکblacklist

تغيير کاراکترهای با معنی درquery(با ( ‘) جایگزینی(‘ ‘) )

پيچيدگی زمانی

استفاده از تابع : مثال()mysql_real_escape_string درPHP:

$Username =mysql_real_escape_string($Username);

$Password =mysql_real_escape_string($Password));

$query = sprintf("SELECT * FROM `Users` WHERE

UserName='$Username 'AND Password='$Password'(;

mysql_query($query);

(ممکن است یک سری کاراکتر فراموش شود) دارای ریسک

استفاده از این روش درOracle ،MySQL وSQL Server

روشهای دفاع

حمالت SQL

مقدمه

Page 21: Data Base Security (SQL Injection Attacks)

Least privilege

کاهش اثرSQLIA از طریق اعطایprivilegeکمتر به کاربران پایگاه داده

استفاده ازview

دادن دسترسیread به کاربری که فقط حقreadدارد

استفاده ازstored procedure

و...

روشهای دفاع

حمالت SQL

مقدمه

Page 22: Data Base Security (SQL Injection Attacks)

White List Input Validation

تعریف دقيق ورودی های معتبر

اعتبار سنجی ورودی قبل از فرستادن آن به پرس و جو

قویاعتبارسنجیایجاد ساختار

محدود کردن طول ورودی( ورودی هایtext free ترین موردمشکل)

ماننداعتبارسنجیاستفاده از توابع: getValidDate()

getValidSafeHTML()

getValidInput()

getValidNumber()

getValidFileName()

روشهای دفاع

حمالت SQL

مقدمه

Page 23: Data Base Security (SQL Injection Attacks)

SQLIAروش های جلوگيری

WAVES

DBC-Checker

WebSSARI

Java Static Tainting

SecuriFly

SQL DOM

روش هایجلوگیری

روشهای دفاع

حمالت SQL

مقدمه

Page 24: Data Base Security (SQL Injection Attacks)

SQLIAروش های جلوگيری

(WAVES 1:

سياهجعبهتستتکنيک

هدفموردنقاطتمامشناساییSQLIA

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

نيستکامل

(DBC 2-Checker:

کدایستایبررسیروش

صحتبررسیqueryدایناميکهای

هاحملهازمحدودیتعدادشناسایی

دهدتشخيصراورودینوعبودننامناسببررسی

روش هایجلوگیری

روشهای دفاع

حمالت SQL

مقدمه

Page 25: Data Base Security (SQL Injection Attacks)

(WebSSARI 3:

ازپشتيبانیPHP

کدپذیرآسيبهایقسمتعالمتگذاری(runtime guard)

پذیرآسيبهایدرقسمتپاکسازیتوابعدادنقراربانامعتبراطالعاتکنترل.

(Java 4Static Tainting:

کردنپيداجهتایستاطوربهکدبررسیtaint

ورودییاستفادهزمانشناساییجهتاطالعاتیجریانبررسیtaint.

روشایراد:

شدهشناختهساختارهایشناساییSQLIA

توليدfalse positiveزیاد

(ادامه)SQLIAروش های جلوگيری

روش هایجلوگیری

روشهای دفاع

حمالت SQL

مقدمه

Page 26: Data Base Security (SQL Injection Attacks)

(ادامه)SQLIAروش های جلوگيری (SecuriFly 5:

زبانازاستفادهPQL

هادادهجریانبررسی

هایورودیپاکسازیtaintحمالتتوسطسيستمدیدنآسيبازقبل

(SQL 6DOM:

دادهپایگاهکردنکپسوله

فایلازاستفادهSQLDOMبررسیجهتqueryایجادجایبهqueryتوسط

.رشتهسرییکالحاق

روش هایجلوگیری

روشهای دفاع

حمالت SQL

مقدمه

Page 27: Data Base Security (SQL Injection Attacks)

مقایسه روش های جلوگيری

روش هایجلوگیری

روشهای دفاع

حمالت SQL

مقدمه

Page 28: Data Base Security (SQL Injection Attacks)

SQLIAروش های تشخيص

SQL Guard

SQL Check

Proxy filtering

SQLrand

CANDID

IDS

Java Dynamic Tainting

AMNESIA

Tautology Checker

حمالت SQL

مقدمه

روشهای دفاع

روش هایپیشگیری

روش هایتشخیص

Page 29: Data Base Security (SQL Injection Attacks)

SQLIAروش های تشخيص

(SQL 1Guard

پویاوایستاتحليلدارای

درستهایورودیبرایمدلایجاد

مدلباکاربرورودیمقایسه

(SQL 2Check

قبلروشمشابه

طراحتوسطمستقلطوربهمدلایجاد:تفاوت

حمالت SQL

مقدمه

روشهای دفاع

روش هایپیشگیری

روش هایتشخیص

Page 30: Data Base Security (SQL Injection Attacks)

(ادامه)SQLIAروش های تشخيص (Proxy 3filtering

امنيتیمشیخطتوصيفزبانتوسطمحدودیتاعمال(SPDL)

روشایراد:human-base

(SQLrand 4

کليدیکلماتجایبهتصادفیدستورالعملازاستفادهsqlدادهپایگاهدرآنهاتبدیلو

proxyتوسط filter،کليدیکلماتبهsql

ازاستفادهبدليلزیادسربارکليد،ازاستفاده:روشایرادproxy

حمالت SQL

مقدمه

روشهای دفاع

روش هایپیشگیری

روش هایتشخیص

Page 31: Data Base Security (SQL Injection Attacks)

(ادامه)SQLIAروش های تشخيص (IDS 5

ماشينیادگيریوکاویدادههایتکنيکازاستفاده

شدهیادگرفتهمدلازاستفادهباحملهتشخيص

آموزشیمجموعهبهوابسته

(Java 6Dynamic Tainting

کردنپيداجهتکدبررسیtaintاجرازماندر

ازاستفادهflagورودیگذاریعالمتبرایtaint

حمالت SQL

مقدمه

روشهای دفاع

روش هایپیشگیری

روش هایتشخیص

Page 32: Data Base Security (SQL Injection Attacks)

(ادامه)SQLIAروش های تشخيص

(CANDID 7

جاوازبانبرای

ساختارتشخيصqueryروشباdynamic candidate evolution

نویسبرنامهنظرموردساختارباکاربرکدمقایسهباحملهتشخيص.

حمالتتشخيصجهتمناسببسيارsql

(Tautology 8Checker

یحملهتشخيصجهتروشیtautology

حمالت SQL

مقدمه

روشهای دفاع

روش هایپیشگیری

روش هایتشخیص

Page 33: Data Base Security (SQL Injection Attacks)

(ادامه)SQLIAروش های تشخيص

(AMNESIA 9

پویاوایستاتحليلدارایومدلبرمبتنیروشی

درستجوهایوپرساساسبرمدلایجاد:ایستاتحليل

مقایسه:پویاتحليلqueryمدلباکاربر

حمالتمقابلدرخوبواکنشSQLI

آموزشیمجموعهبهوابسته

حمالت SQL

مقدمه

روشهای دفاع

روش هایپیشگیری

روش هایتشخیص

Page 34: Data Base Security (SQL Injection Attacks)

برخی روش های دیگر

1) PHPMiner

2) Ardilla

3) SUSHI

4) WASP

5) SQLPro

6) MUSIC

7) SQLUnitGen

8) String Analyzer

9) firewall

حمالت SQL

مقدمه

روشهای دفاع

روش هایپیشگیری

روش هایتشخیص

Page 35: Data Base Security (SQL Injection Attacks)

مقایسه روش های تشخيص

حمالت SQL

مقدمه

روشهای دفاع

روش هایپیشگیری

روش هایتشخیص

Page 36: Data Base Security (SQL Injection Attacks)

نتيجه گيری

عدم تشخيص یا جلوگيریstored procedure روش هادر اکثر

تشخيص و جلوگيریtautology attackدر اکثر روش ها

با توجه به مطالب گفته شده حمالتSQLIA همواره وجود دارد بنابراین ما باید با به روز نگه

کنيمداشتن سيستم های حفاظتی و استفاده از شيوه های جدید امنيت پایگاه داده را حفظ

حمالت SQL

مقدمه

روش های دفاع

روش هایپیشگیری

روش هایتشخیص

نتیجه

Page 37: Data Base Security (SQL Injection Attacks)

مراجع

1. Amirmohammad Sadeghian, Mazdak Zamani, Azizah Abd. Manaf, “A Taxonomy

of SQL Injection Detection and Prevention Techniques”, International

Conference on Informatics and Creative Multimedia, IEEE, 2013.

2. William G.J. Halfond, Jeremy Viegas, and Alessandro Orso , “A Classification of

SQL Injection Attacks and Countermeasures “, College of Computing Georgia

Institute of Technology,IEEE ,2006 , Pages:1-11

3. WWW. wikipedia.org.

Page 38: Data Base Security (SQL Injection Attacks)