SlideShare a Scribd company logo
1 of 38
Download to read offline
SQL Injection Attack (SQLIA)
‫بهار‬1393
‫خدا‬‫نام‬‫ب‬
‫کننده‬ ‫تهیه‬:
‫کوشککی‬ ‫حسن‬
‫امنیت‬‫پایگاه‬‫داد‬‫ه‬
Email: hassan.kooshkaki@gmail.com
‫مطالب‬ ‫فهرست‬
1.‫تعریف‬SQLIA
2.‫حمالت‬ ‫انواع‬SQLIA
3.‫مقابل‬ ‫در‬ ‫دفاع‬ ‫های‬ ‫روش‬SQLIA
4.‫در‬ ‫تشخیص‬ ‫و‬ ‫جلوگیری‬ ‫های‬ ‫روش‬SQLIA
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 cardNo
from 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.
Data Base Security (SQL Injection Attacks)

More Related Content

Similar to Data Base Security (SQL Injection Attacks)

Web Application Security Test
Web Application Security TestWeb Application Security Test
Web Application Security Test
Saeid Sadeghi
 

Similar to Data Base Security (SQL Injection Attacks) (19)

ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬
ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬
ترکیب داده های ساختار یافته و نیمه ساختار یافته در MariaDB 10.2‬‬
 
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش نهم
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش نهمآموزش مدیریت بانک اطلاعاتی اوراکل - بخش نهم
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش نهم
 
Variables and options
Variables and optionsVariables and options
Variables and options
 
Oracle database firewall
Oracle database firewallOracle database firewall
Oracle database firewall
 
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش هفتم
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش هفتمآموزش مدیریت بانک اطلاعاتی اوراکل - بخش هفتم
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش هفتم
 
Spring security configuration
Spring security configurationSpring security configuration
Spring security configuration
 
امن سازی پایگاه داده با 
 AcraServer
 امن سازی پایگاه داده با 
 AcraServer  امن سازی پایگاه داده با 
 AcraServer
امن سازی پایگاه داده با 
 AcraServer
 
Security in MySQL Database
Security in MySQL DatabaseSecurity in MySQL Database
Security in MySQL Database
 
Softwares : Vuln discovery , attack and deffence technologies
Softwares : Vuln discovery , attack and deffence technologiesSoftwares : Vuln discovery , attack and deffence technologies
Softwares : Vuln discovery , attack and deffence technologies
 
SQL Injection; Attack & Prevention
SQL Injection; Attack & PreventionSQL Injection; Attack & Prevention
SQL Injection; Attack & Prevention
 
Controller in asp.net mvc
Controller in asp.net mvcController in asp.net mvc
Controller in asp.net mvc
 
Introduction to oracle
Introduction to oracleIntroduction to oracle
Introduction to oracle
 
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش چهارم
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش چهارمآموزش مدیریت بانک اطلاعاتی اوراکل - بخش چهارم
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش چهارم
 
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش هشتم
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش هشتمآموزش مدیریت بانک اطلاعاتی اوراکل - بخش هشتم
آموزش مدیریت بانک اطلاعاتی اوراکل - بخش هشتم
 
Javan Cloud Security 950526 (oCCc63)
Javan Cloud Security 950526 (oCCc63)Javan Cloud Security 950526 (oCCc63)
Javan Cloud Security 950526 (oCCc63)
 
امنیت در نرم افزارهای وب
امنیت در نرم افزارهای وبامنیت در نرم افزارهای وب
امنیت در نرم افزارهای وب
 
معرفی و ببرسی امنیت سیستم بلاک چین
معرفی و ببرسی امنیت سیستم بلاک چینمعرفی و ببرسی امنیت سیستم بلاک چین
معرفی و ببرسی امنیت سیستم بلاک چین
 
Web Application Security Test
Web Application Security TestWeb Application Security Test
Web Application Security Test
 
Default
DefaultDefault
Default
 

Data Base Security (SQL Injection Attacks)

  • 1. SQL Injection Attack (SQLIA) ‫بهار‬1393 ‫خدا‬‫نام‬‫ب‬ ‫کننده‬ ‫تهیه‬: ‫کوشککی‬ ‫حسن‬ ‫امنیت‬‫پایگاه‬‫داد‬‫ه‬ Email: hassan.kooshkaki@gmail.com
  • 2. ‫مطالب‬ ‫فهرست‬ 1.‫تعریف‬SQLIA 2.‫حمالت‬ ‫انواع‬SQLIA 3.‫مقابل‬ ‫در‬ ‫دفاع‬ ‫های‬ ‫روش‬SQLIA 4.‫در‬ ‫تشخیص‬ ‫و‬ ‫جلوگیری‬ ‫های‬ ‫روش‬SQLIA 5.‫گیری‬ ‫نتیجه‬ ‫و‬ ‫ها‬ ‫روش‬ ‫مقایسه‬
  • 5. ‫تعریف‬SQLIA ‫حمالت‬ ‫بندی‬ ‫دسته‬SQL: ‫اول‬ ‫مرتبه‬ ‫حمالت‬ ‫ساختار‬ ‫تغییر‬SQL ‫دوم‬ ‫مرتبه‬ ‫حمالت‬ ‫ها‬ ‫داده‬ ‫سازی‬ ‫ذخیره‬ ‫محل‬ ‫به‬ ‫مخرب‬ ‫کد‬ ‫تزریق‬ ‫بعد‬ ‫اجراهای‬ ‫در‬ ‫نتایج‬ ‫مشاهده‬ ‫دستورات‬ ‫سازی‬ ‫کوتاه‬ ‫حمالت‬ ‫سایز‬ ‫از‬ ‫استفاده‬‫بافرها‬ ‫مقدمه‬
  • 6. ‫حمالت‬ ‫انواع‬SQLIA Tautologies Illegal/Logically Incorrect Queries Union Query Piggy- Backed Queries Stored Procedures Inference Alternate Encodings ‫حمالت‬ SQL ‫مقدمه‬
  • 7. ‫حمالت‬ SQL ‫مقدمه‬ ;‫و‬ ‫پرس‬ ‫یا‬ ‫دستورات‬ ‫جداسازی‬ ‫باعث‬‫جوها‬‫شود‬ ‫می‬ “‫یا‬‘‫شود‬ ‫می‬ ‫استفاده‬ ‫ها‬ ‫رشته‬ ‫کردن‬ ‫مشخص‬ ‫برای‬ ‫از‬ ‫بعد‬ ‫که‬ ‫دستوری‬ ‫هر‬- -‫یا‬/*...*/‫شود‬ ‫می‬ ‫گرفته‬ ‫نادیده‬ ‫بیاید‬ ‫حمالت‬ ‫انواع‬SQLIA
  • 8. ‫شود‬ ‫می‬ ‫استفاده‬ ‫کاربران‬ ‫ورود‬ ‫مجوز‬ ‫کنترل‬ ‫برای‬ ‫زیر‬ ‫کد‬ ‫شبه‬ ‫از‬ ‫کنیم‬ ‫فرض‬: Session_Start(); $username=$_post[username]; $password=$_post[password]; Select * from user where login=' $username ' and pass=‘password'; ‫تعریف‬SQLIA ‫حمالت‬ SQL ‫مقدمه‬
  • 9. Tautologies attack ‫شرطی‬ ‫های‬ ‫قسمت‬ ‫به‬ ‫کد‬ ‫کردن‬ ‫اضافه‬ ‫هدف‬:‫داده‬ ‫استخراج‬ ‫و‬ ‫هویت‬ ‫احراز‬ ‫از‬ ‫فرار‬ ‫مثال‬:‫عبارت‬ ‫کردن‬ ‫وارد‬or 2=2 - -”‫ب‬‫ورودی‬ ‫در‬ ‫کاربری‬ ‫نام‬ ‫جای‬: SELECT accounts FROM users WHERE login=’’ or 2=2 - - AND pass=’’ ‫حمالت‬ SQL ‫مقدمه‬
  • 10. 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 ‫مقدمه‬
  • 11. Union Query attack ‫کردن‬ ‫اضافه‬Union ‫هدف‬:‫تغییر‬‫رکوردهای‬‫هویت‬ ‫احراز‬ ‫از‬ ‫فرار‬ ،‫بازگشتی‬‫و‬‫داده‬ ‫استخراج‬ ‫مثال‬:‫قسمت‬ ‫در‬ ‫زیر‬ ‫عبارت‬ ‫کردن‬ ‫وارد‬login: “ UNION SELECT cardNo from CreditCards where acctNo=10032 - - SELECT accounts FROM users WHERE login=’’ UNION SELECT cardNo from CreditCards where acctNo=10032 -- AND pass=’’ ‫شود‬ ‫می‬ ‫داده‬ ‫نمایش‬ ‫نظر‬ ‫مورد‬ ‫شرط‬ ‫برای‬ ‫نیز‬ ‫دوم‬ ‫جدول‬ ‫اطالعات‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 12. Piggy- Backed Queries attack ‫هدف‬:‫منع‬ ‫جهت‬‫سرویس‬،‫تغییر‬‫داده‬ ‫استخراج‬ ‫و‬ ‫داده‬ ‫مثال‬:‫در‬ ‫زیر‬ ‫عبارت‬ ‫کردن‬ ‫وارد‬‫فیلد‬OrderID: 12345 ; drop table Order - - SELECT * FROM Order WHERE OrderID=12345 ; drop table Order ‫کاربر‬ ‫جداول‬ ‫تمام‬ ‫شدن‬ ‫پاک‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 13. 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 ‫مقدمه‬
  • 14. 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 ‫مقدمه‬
  • 15. 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
  • 16. Alternate Encodings attack ‫هدف‬:‫هویت‬ ‫احراز‬ ‫از‬ ‫فرار‬ ‫مثال‬:‫زیر‬ ‫عبارت‬ ‫کردن‬ ‫وارد‬: “legalUser’; exec(0x73687574646f776e) - -‫در‬‫فيلد‬login SELECT accounts FROM users WHERE login=’legalUser’; exec(char(0x73687574646f776e)) -- AND pass=’’ AND pin= ‫داده‬ ‫پایگاه‬ ‫شدن‬ ‫خاموش‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 17. ‫مقابل‬ ‫در‬ ‫دفاع‬ ‫روشهای‬SQLIA  Prepared statement  Stored Procedure  Escaping All User Supplied Input  Least Privilege  White List Input Validation ‫روشهای‬ ‫دفاع‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 18. Prepared statement ‫جستجوهای‬‫پارامتربندی‬‫شده‬ ‫اولين‬‫راهکار‬‫برنامه‬ ‫برای‬‫نویس‬ ‫بانک‬‫اطالعاتی‬‫مستقل‬‫از‬‫ورودی‬‫کاربر‬ ‫تعریف‬‫کامل‬‫کد‬SQL‫بدون‬‫مقدارگذاری‬‫پارامترها‬ ‫مختلف‬ ‫های‬ ‫زبان‬ ‫در‬ ‫آن‬ ‫از‬ ‫استفاده‬: • Java EE – use PreparedStatement() • * .NET – use SqlCommand() or OleDbCommand() • * PHP – use PDO )(... ‫روشهای‬ ‫دفاع‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 20. 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 ‫مقدمه‬
  • 21. Least privilege ‫اثر‬ ‫کاهش‬SQLIA‫اعطای‬ ‫طریق‬ ‫از‬privilege‫داده‬ ‫پایگاه‬ ‫کاربران‬ ‫به‬ ‫کمتر‬ ‫از‬ ‫استفاده‬view ‫دسترسی‬ ‫دادن‬read‫حق‬ ‫فقط‬ ‫که‬ ‫کاربری‬ ‫به‬read‫دارد‬ ‫از‬ ‫استفاده‬stored procedure ‫و‬... ‫روشهای‬ ‫دفاع‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 22. White List Input Validation ‫معتبر‬ ‫های‬ ‫ورودی‬ ‫دقيق‬ ‫تعریف‬ ‫جو‬ ‫و‬ ‫پرس‬ ‫به‬ ‫آن‬ ‫فرستادن‬ ‫از‬ ‫قبل‬ ‫ورودی‬ ‫سنجی‬ ‫اعتبار‬ ‫ساختار‬ ‫ایجاد‬‫اعتبارسنجی‬‫قوی‬ ‫ورودی‬ ‫طول‬ ‫کردن‬ ‫محدود‬(‫های‬ ‫ورودی‬text free‫مشکل‬‫مورد‬ ‫ترین‬) ‫توابع‬ ‫از‬ ‫استفاده‬‫اعتبارسنجی‬‫مانند‬:  getValidDate()  getValidSafeHTML()  getValidInput()  getValidNumber()  getValidFileName() ‫روشهای‬ ‫دفاع‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 23. ‫جلوگيری‬ ‫های‬ ‫روش‬SQLIA  WAVES  DBC-Checker  WebSSARI  Java Static Tainting  SecuriFly  SQL DOM ‫های‬ ‫روش‬ ‫جلوگیری‬ ‫روشهای‬ ‫دفاع‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 24. ‫جلوگيری‬ ‫های‬ ‫روش‬SQLIA (WAVES 1: ‫تکنيک‬‫تست‬‫جعبه‬‫سياه‬ ‫شناسایی‬‫تمام‬‫نقاط‬‫مورد‬‫هدف‬SQLIA ‫بهبود‬‫شناسایی‬‫حمله‬‫با‬‫استفاده‬‫از‬‫تکنيک‬‫های‬‫یادگيری‬‫ماشين‬ ‫کامل‬‫نيست‬ (DBC 2-Checker: ‫روش‬‫بررسی‬‫ایستای‬‫کد‬ ‫بررسی‬‫صحت‬query‫های‬‫دایناميک‬ ‫شناسایی‬‫تعداد‬‫محدودی‬‫از‬‫حمله‬‫ها‬ ‫بررسی‬‫نامناسب‬‫بودن‬‫نوع‬‫ورودی‬‫را‬‫تشخيص‬‫دهد‬ ‫های‬ ‫روش‬ ‫جلوگیری‬ ‫روشهای‬ ‫دفاع‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 25. (WebSSARI 3: ‫پشتيبانی‬‫از‬PHP ‫عالمتگذاری‬‫قسمت‬‫های‬‫آسيب‬‫پذیر‬‫کد‬(runtime guard) ‫کنترل‬‫اطالعات‬‫نامعتبر‬‫با‬‫قرار‬‫دادن‬‫توابع‬‫پاکسازی‬‫درقسمت‬‫های‬‫آسيب‬‫پذیر‬. (Java 4Static Tainting: ‫بررسی‬‫کد‬‫به‬‫طور‬‫ایستا‬‫جهت‬‫پيدا‬‫کردن‬taint ‫بررسی‬‫جریان‬‫اطالعاتی‬‫جهت‬‫شناسایی‬‫زمان‬‫استفاده‬‫ی‬‫ورودی‬taint. ‫ایراد‬‫روش‬: ‫شناسایی‬‫ساختارهای‬‫شناخته‬‫شده‬SQLIA ‫توليد‬false positive‫زیاد‬ ‫جلوگيری‬ ‫های‬ ‫روش‬SQLIA(‫ادامه‬) ‫های‬ ‫روش‬ ‫جلوگیری‬ ‫روشهای‬ ‫دفاع‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 26. ‫جلوگيری‬ ‫های‬ ‫روش‬SQLIA(‫ادامه‬) (SecuriFly 5: ‫استفاده‬‫از‬‫زبان‬PQL ‫بررسی‬‫جریان‬‫داده‬‫ها‬ ‫پاکسازی‬‫ورودی‬‫های‬taint‫قبل‬‫از‬‫آسيب‬‫دیدن‬‫سيستم‬‫توسط‬‫حمالت‬ (SQL 6DOM: ‫کپسوله‬‫کردن‬‫پایگاه‬‫داده‬ ‫استفاده‬‫از‬‫فایل‬SQLDOM‫جهت‬‫بررسی‬query‫به‬‫جای‬‫ایجاد‬query‫توسط‬ ‫الحاق‬‫یک‬‫سری‬‫رشته‬. ‫های‬ ‫روش‬ ‫جلوگیری‬ ‫روشهای‬ ‫دفاع‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 27. ‫جلوگيری‬ ‫های‬ ‫روش‬ ‫مقایسه‬ ‫های‬ ‫روش‬ ‫جلوگیری‬ ‫روشهای‬ ‫دفاع‬ ‫حمالت‬ SQL ‫مقدمه‬
  • 28. ‫تشخيص‬ ‫های‬ ‫روش‬SQLIA  SQL Guard  SQL Check  Proxy filtering  SQLrand  CANDID  IDS  Java Dynamic Tainting  AMNESIA  Tautology Checker ‫حمالت‬ SQL ‫مقدمه‬ ‫روشهای‬ ‫دفاع‬ ‫های‬ ‫روش‬ ‫پیشگیری‬ ‫های‬ ‫روش‬ ‫تشخیص‬
  • 29. ‫تشخيص‬ ‫های‬ ‫روش‬SQLIA (SQL 1Guard ‫دارای‬‫تحليل‬‫ایستا‬‫و‬‫پویا‬ ‫ایجاد‬‫مدل‬‫برای‬‫ورودی‬‫های‬‫درست‬ ‫مقایسه‬‫ورودی‬‫کاربر‬‫با‬‫مدل‬ (SQL 2Check ‫مشابه‬‫روش‬‫قبل‬ ‫تفاوت‬:‫ایجاد‬‫مدل‬‫به‬‫طور‬‫مستقل‬‫توسط‬‫طراح‬ ‫حمالت‬ SQL ‫مقدمه‬ ‫روشهای‬ ‫دفاع‬ ‫های‬ ‫روش‬ ‫پیشگیری‬ ‫های‬ ‫روش‬ ‫تشخیص‬
  • 30. ‫تشخيص‬ ‫های‬ ‫روش‬SQLIA(‫ادامه‬) (Proxy 3filtering ‫اعمال‬‫محدودیت‬‫توسط‬‫زبان‬‫توصيف‬‫خط‬‫مشی‬‫امنيتی‬(SPDL) ‫ایراد‬‫روش‬:human-base (SQLrand 4 ‫استفاده‬‫از‬‫دستورالعمل‬‫تصادفی‬‫به‬‫جای‬‫کلمات‬‫کليدی‬sql‫و‬‫تبدیل‬‫آنها‬‫در‬‫پایگاه‬‫داده‬ ‫توسط‬proxy filter،‫به‬‫کلمات‬‫کليدی‬sql ‫ایراد‬‫روش‬:‫استفاده‬‫از‬،‫کليد‬‫سربار‬‫زیاد‬‫بدليل‬‫استفاده‬‫از‬proxy ‫حمالت‬ SQL ‫مقدمه‬ ‫روشهای‬ ‫دفاع‬ ‫های‬ ‫روش‬ ‫پیشگیری‬ ‫های‬ ‫روش‬ ‫تشخیص‬
  • 31. ‫تشخيص‬ ‫های‬ ‫روش‬SQLIA(‫ادامه‬) (IDS 5 ‫استفاده‬‫از‬‫تکنيک‬‫های‬‫داده‬‫کاوی‬‫و‬‫یادگيری‬‫ماشين‬ ‫تشخيص‬‫حمله‬‫با‬‫استفاده‬‫از‬‫مدل‬‫یادگرفته‬‫شده‬ ‫وابسته‬‫به‬‫مجموعه‬‫آموزشی‬ (Java 6Dynamic Tainting ‫بررسی‬‫کد‬‫جهت‬‫پيدا‬‫کردن‬taint‫در‬‫زمان‬‫اجرا‬ ‫استفاده‬‫از‬flag‫برای‬‫عالمت‬‫گذاری‬‫ورودی‬taint ‫حمالت‬ SQL ‫مقدمه‬ ‫روشهای‬ ‫دفاع‬ ‫های‬ ‫روش‬ ‫پیشگیری‬ ‫های‬ ‫روش‬ ‫تشخیص‬
  • 32. ‫تشخيص‬ ‫های‬ ‫روش‬SQLIA(‫ادامه‬) (CANDID 7 ‫برای‬‫زبان‬‫جاوا‬ ‫تشخيص‬‫ساختار‬query‫با‬‫روش‬dynamic candidate evolution ‫تشخيص‬‫حمله‬‫با‬‫مقایسه‬‫کد‬‫کاربر‬‫با‬‫ساختار‬‫مورد‬‫نظر‬‫برنامه‬‫نویس‬. ‫بسيار‬‫مناسب‬‫جهت‬‫تشخيص‬‫حمالت‬sql (Tautology 8Checker ‫روشی‬‫جهت‬‫تشخيص‬‫حمله‬‫ی‬tautology ‫حمالت‬ SQL ‫مقدمه‬ ‫روشهای‬ ‫دفاع‬ ‫های‬ ‫روش‬ ‫پیشگیری‬ ‫های‬ ‫روش‬ ‫تشخیص‬
  • 33. ‫تشخيص‬ ‫های‬ ‫روش‬SQLIA(‫ادامه‬) (AMNESIA 9 ‫روشی‬‫مبتنی‬‫بر‬‫مدل‬‫و‬‫دارای‬‫تحليل‬‫ایستا‬‫و‬‫پویا‬ ‫تحليل‬‫ایستا‬:‫ایجاد‬‫مدل‬‫بر‬‫اساس‬‫پرس‬‫و‬‫جوهای‬‫درست‬ ‫تحليل‬‫پویا‬:‫مقایسه‬query‫کاربر‬‫با‬‫مدل‬ ‫واکنش‬‫خوب‬‫در‬‫مقابل‬‫حمالت‬SQLI ‫وابسته‬‫به‬‫مجموعه‬‫آموزشی‬ ‫حمالت‬ SQL ‫مقدمه‬ ‫روشهای‬ ‫دفاع‬ ‫های‬ ‫روش‬ ‫پیشگیری‬ ‫های‬ ‫روش‬ ‫تشخیص‬
  • 34. ‫دیگر‬ ‫های‬ ‫روش‬ ‫برخی‬ 1) PHPMiner 2) Ardilla 3) SUSHI 4) WASP 5) SQLPro 6) MUSIC 7) SQLUnitGen 8) String Analyzer 9) firewall ‫حمالت‬ SQL ‫مقدمه‬ ‫روشهای‬ ‫دفاع‬ ‫های‬ ‫روش‬ ‫پیشگیری‬ ‫های‬ ‫روش‬ ‫تشخیص‬
  • 35. ‫تشخيص‬ ‫های‬ ‫روش‬ ‫مقایسه‬ ‫حمالت‬ SQL ‫مقدمه‬ ‫روشهای‬ ‫دفاع‬ ‫های‬ ‫روش‬ ‫پیشگیری‬ ‫های‬ ‫روش‬ ‫تشخیص‬
  • 36. ‫گيری‬ ‫نتيجه‬ ‫جلوگيری‬ ‫یا‬ ‫تشخيص‬ ‫عدم‬stored procedure‫اکثر‬ ‫در‬‫ها‬ ‫روش‬ ‫جلوگيری‬ ‫و‬ ‫تشخيص‬tautology attack‫ها‬ ‫روش‬ ‫اکثر‬ ‫در‬ ‫حمالت‬ ‫شده‬ ‫گفته‬ ‫مطالب‬ ‫به‬ ‫توجه‬ ‫با‬SQLIA‫نگه‬ ‫روز‬ ‫به‬ ‫با‬ ‫باید‬ ‫ما‬ ‫بنابراین‬ ‫دارد‬ ‫وجود‬ ‫همواره‬ ‫حفظ‬ ‫را‬ ‫داده‬ ‫پایگاه‬ ‫امنيت‬ ‫جدید‬ ‫های‬ ‫شيوه‬ ‫از‬ ‫استفاده‬ ‫و‬ ‫حفاظتی‬ ‫های‬ ‫سيستم‬ ‫داشتن‬‫کنيم‬ ‫حمالت‬ SQL ‫مقدمه‬ ‫های‬ ‫روش‬ ‫دفاع‬ ‫های‬ ‫روش‬ ‫پیشگیری‬ ‫های‬ ‫روش‬ ‫تشخیص‬ ‫نتیجه‬
  • 37. ‫مراجع‬ 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.