Web application attacks using Sql injection and countermasures
Data Base Security (SQL Injection Attacks)
-
Upload
hassan-kooshkaki -
Category
Software
-
view
166 -
download
8
Transcript of Data Base Security (SQL Injection Attacks)
SQL Injection Attack (SQLIA)
1393بهار
بنام خدا
:تهیه کننده
حسن کوشککی
هدادپایگاه امنیت
Email: [email protected]
فهرست مطالب
SQLIAتعریف . 1
SQLIAانواع حمالت . 2
SQLIAروش های دفاع در مقابل . 3
SQLIAروش های جلوگیری و تشخیص در . 4
مقایسه روش ها و نتیجه گیری. 5
SQLIAتعریف
ادهدکاربردیهایبرنامهازاستفادهجهت(مخرب)کدتزریقتکنیک•محور
دونبافرادوکندمیتهدیدراوبتحتکاربردهایبیشترحملهاین•رتصوبههادادهپایگاهدرموجوداطالعاتبهشوندهویتاحرازاینکه
کنندمیدسترسیمجازغیر
مقدمه
مقدمهSQLIAتعریف
SQLمراحل اجرای تزریق
SQLIAتعریف
:SQLدسته بندی حمالت
حمالت مرتبه اول
تغییر ساختارSQL
حمالت مرتبه دوم
تزریق کد مخرب به محل ذخیره سازی داده ها
مشاهده نتایج در اجراهای بعد
حمالت کوتاه سازی دستورات
بافرهااستفاده از سایز
مقدمه
SQLIAانواع حمالت
Tautologies
Illegal/Logically Incorrect Queries
Union Query
Piggy- Backed Queries
Stored Procedures
Inference
Alternate Encodings
حمالت SQL
مقدمه
حمالت SQL
مقدمه
; می شودجوهاباعث جداسازی دستورات یا پرس و
“ برای مشخص کردن رشته ها استفاده می شود‘یا
هر دستوری که بعد از- بیاید نادیده گرفته می شود/*...*/ یا -
SQLIAانواع حمالت
فرض کنیم از شبه کد زیر برای کنترل مجوز ورود کاربران استفاده می شود:
Session_Start();
$username=$_post[username];
$password=$_post[password];
Select * from user where login=' $username ' and pass=‘password';
SQLIAتعریف
حمالت SQL
مقدمه
Tautologies attack
اضافه کردن کد به قسمت های شرطی
فرار از احراز هویت و استخراج داده: هدف
وارد کردن عبارت : مثالor 2=2 - :جای نام کاربری در ورودیب”-
SELECT accounts FROM users WHERE
login=’’ or 2=2 - - AND pass=’’
حمالت SQL
مقدمه
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
مقدمه
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
مقدمه
Piggy- Backed Queries attack
داده و استخراج دادهتغییر، سرویسجهت منع : هدف
فیلدوارد کردن عبارت زیر در : مثالOrderID :12345 ; drop table Order - -
SELECT * FROM Order
WHERE OrderID=12345 ; drop table Order
پاک شدن تمام جداول کاربر
حمالت SQL
مقدمه
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
مقدمه
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
مقدمه
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
Alternate Encodings attack
فرار از احراز هویت: هدف
:وارد کردن عبارت زیر: مثال
“legalUser’; exec(0x73687574646f776e) - loginفيلددر -
SELECT accounts FROM users WHERE login=’legalUser’;
exec(char(0x73687574646f776e)) -- AND pass=’’ AND pin=
خاموش شدن پایگاه داده
حمالت SQL
مقدمه
SQLIAروشهای دفاع در مقابل
Prepared statement
Stored Procedure
Escaping All User Supplied Input
Least Privilege
White List Input Validation
روشهای دفاع
حمالت SQL
مقدمه
Prepared statement
شدهپارامتربندیجستجوهای
نویسبرای برنامه راهکاراولين
کاربرورودیازمستقلاطالعاتیبانک
کدکاملتعریفSQLپارامترهامقدارگذاریبدون
استفاده از آن در زبان های مختلف:
• Java EE – use PreparedStatement()
• * .NET – use SqlCommand() or OleDbCommand()
• * PHP – use PDO )(...
روشهای دفاع
حمالت SQL
مقدمه
Stored procedure
امنسازیپيادهصورتدر
آنهافراخوانیوبدنهدرکدهاذخيره
کاربراندسترسیکردنمحدود
هایکدآوریجمعSQLکاربراندسترسازدورآنهانگهداریومکانیکدر
روشهای دفاع
حمالت SQL
مقدمه
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
مقدمه
Least privilege
کاهش اثرSQLIA از طریق اعطایprivilegeکمتر به کاربران پایگاه داده
استفاده ازview
دادن دسترسیread به کاربری که فقط حقreadدارد
استفاده ازstored procedure
و...
روشهای دفاع
حمالت SQL
مقدمه
White List Input Validation
تعریف دقيق ورودی های معتبر
اعتبار سنجی ورودی قبل از فرستادن آن به پرس و جو
قویاعتبارسنجیایجاد ساختار
محدود کردن طول ورودی( ورودی هایtext free ترین موردمشکل)
ماننداعتبارسنجیاستفاده از توابع: getValidDate()
getValidSafeHTML()
getValidInput()
getValidNumber()
getValidFileName()
روشهای دفاع
حمالت SQL
مقدمه
SQLIAروش های جلوگيری
WAVES
DBC-Checker
WebSSARI
Java Static Tainting
SecuriFly
SQL DOM
روش هایجلوگیری
روشهای دفاع
حمالت SQL
مقدمه
SQLIAروش های جلوگيری
(WAVES 1:
سياهجعبهتستتکنيک
هدفموردنقاطتمامشناساییSQLIA
ماشينیادگيریهایتکنيکازاستفادهباحملهشناساییبهبود
نيستکامل
(DBC 2-Checker:
کدایستایبررسیروش
صحتبررسیqueryدایناميکهای
هاحملهازمحدودیتعدادشناسایی
دهدتشخيصراورودینوعبودننامناسببررسی
روش هایجلوگیری
روشهای دفاع
حمالت SQL
مقدمه
(WebSSARI 3:
ازپشتيبانیPHP
کدپذیرآسيبهایقسمتعالمتگذاری(runtime guard)
پذیرآسيبهایدرقسمتپاکسازیتوابعدادنقراربانامعتبراطالعاتکنترل.
(Java 4Static Tainting:
کردنپيداجهتایستاطوربهکدبررسیtaint
ورودییاستفادهزمانشناساییجهتاطالعاتیجریانبررسیtaint.
روشایراد:
شدهشناختهساختارهایشناساییSQLIA
توليدfalse positiveزیاد
(ادامه)SQLIAروش های جلوگيری
روش هایجلوگیری
روشهای دفاع
حمالت SQL
مقدمه
(ادامه)SQLIAروش های جلوگيری (SecuriFly 5:
زبانازاستفادهPQL
هادادهجریانبررسی
هایورودیپاکسازیtaintحمالتتوسطسيستمدیدنآسيبازقبل
(SQL 6DOM:
دادهپایگاهکردنکپسوله
فایلازاستفادهSQLDOMبررسیجهتqueryایجادجایبهqueryتوسط
.رشتهسرییکالحاق
روش هایجلوگیری
روشهای دفاع
حمالت SQL
مقدمه
مقایسه روش های جلوگيری
روش هایجلوگیری
روشهای دفاع
حمالت SQL
مقدمه
SQLIAروش های تشخيص
SQL Guard
SQL Check
Proxy filtering
SQLrand
CANDID
IDS
Java Dynamic Tainting
AMNESIA
Tautology Checker
حمالت SQL
مقدمه
روشهای دفاع
روش هایپیشگیری
روش هایتشخیص
SQLIAروش های تشخيص
(SQL 1Guard
پویاوایستاتحليلدارای
درستهایورودیبرایمدلایجاد
مدلباکاربرورودیمقایسه
(SQL 2Check
قبلروشمشابه
طراحتوسطمستقلطوربهمدلایجاد:تفاوت
حمالت SQL
مقدمه
روشهای دفاع
روش هایپیشگیری
روش هایتشخیص
(ادامه)SQLIAروش های تشخيص (Proxy 3filtering
امنيتیمشیخطتوصيفزبانتوسطمحدودیتاعمال(SPDL)
روشایراد:human-base
(SQLrand 4
کليدیکلماتجایبهتصادفیدستورالعملازاستفادهsqlدادهپایگاهدرآنهاتبدیلو
proxyتوسط filter،کليدیکلماتبهsql
ازاستفادهبدليلزیادسربارکليد،ازاستفاده:روشایرادproxy
حمالت SQL
مقدمه
روشهای دفاع
روش هایپیشگیری
روش هایتشخیص
(ادامه)SQLIAروش های تشخيص (IDS 5
ماشينیادگيریوکاویدادههایتکنيکازاستفاده
شدهیادگرفتهمدلازاستفادهباحملهتشخيص
آموزشیمجموعهبهوابسته
(Java 6Dynamic Tainting
کردنپيداجهتکدبررسیtaintاجرازماندر
ازاستفادهflagورودیگذاریعالمتبرایtaint
حمالت SQL
مقدمه
روشهای دفاع
روش هایپیشگیری
روش هایتشخیص
(ادامه)SQLIAروش های تشخيص
(CANDID 7
جاوازبانبرای
ساختارتشخيصqueryروشباdynamic candidate evolution
نویسبرنامهنظرموردساختارباکاربرکدمقایسهباحملهتشخيص.
حمالتتشخيصجهتمناسببسيارsql
(Tautology 8Checker
یحملهتشخيصجهتروشیtautology
حمالت SQL
مقدمه
روشهای دفاع
روش هایپیشگیری
روش هایتشخیص
(ادامه)SQLIAروش های تشخيص
(AMNESIA 9
پویاوایستاتحليلدارایومدلبرمبتنیروشی
درستجوهایوپرساساسبرمدلایجاد:ایستاتحليل
مقایسه:پویاتحليلqueryمدلباکاربر
حمالتمقابلدرخوبواکنشSQLI
آموزشیمجموعهبهوابسته
حمالت SQL
مقدمه
روشهای دفاع
روش هایپیشگیری
روش هایتشخیص
برخی روش های دیگر
1) PHPMiner
2) Ardilla
3) SUSHI
4) WASP
5) SQLPro
6) MUSIC
7) SQLUnitGen
8) String Analyzer
9) firewall
حمالت SQL
مقدمه
روشهای دفاع
روش هایپیشگیری
روش هایتشخیص
مقایسه روش های تشخيص
حمالت SQL
مقدمه
روشهای دفاع
روش هایپیشگیری
روش هایتشخیص
نتيجه گيری
عدم تشخيص یا جلوگيریstored procedure روش هادر اکثر
تشخيص و جلوگيریtautology attackدر اکثر روش ها
با توجه به مطالب گفته شده حمالتSQLIA همواره وجود دارد بنابراین ما باید با به روز نگه
کنيمداشتن سيستم های حفاظتی و استفاده از شيوه های جدید امنيت پایگاه داده را حفظ
حمالت SQL
مقدمه
روش های دفاع
روش هایپیشگیری
روش هایتشخیص
نتیجه
مراجع
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.