1. SQL ENJEKSYONA KARI SAVUNMA NursultanTURDALIEV Gazi
niversitesi
2. SQL enjeksiyon nedir? Saldr trleri Savunmasz kodlama
deneyimleri SQL enjeksiyona kar savunma Ara destei
3. SQL enjeksiyon nedir?
4. OWASP SQL enjeksiyon saldrs kullancnn SQL sorgusunu girdi
verileri zerinden eklemesiyle veya enjeksiyon etmesiyle gerekleir.
Baarl SQL enjeksiyon kullanm hassas verileri okuyabilir, veritaban
verilerini deitirebilir (nsert/Update/Delete), ynetim ilemlerini
yrtebilir ( rnein Veri Taban Ynetim Sistemini kapatma).
5. Ulusal Standartlar ve Teknoloji Enstits Ulusal
GvenlikVeritaban 0.00 5.00 10.00 15.00 20.00 25.00 2002 2003 2004
2005 2006 2007 2008 2009 2010 2011 2012 2013 SQL enjeksiyon gvenlik
a grafii Yzde
6. Paolo Passeri
http://hackmageddon.com/2013-cyber-attacks-statistics/
7. SQL ENJEKSYON SALDIRI TRLER SaklYordamlar Gayri Meru veya
MantksalYanl Alternatif kodlama
8. Totolojiler Totoloji-tabanl saldrnn genel amac kod enjekte
ederek koullu ifadeleri her zaman doru deerlendirmektir. ou zaman
kimlik dorulamay geerek veriyi elde etmek amacnda kullanlr. SELECT
accounts FROM users WHERE login = OR 1=1-- AND pass= AND pin=
9. Union Union sorgu saldrlarnda saldrgan savunmasz parametreyi
faydalanarak getirilen veri kmesini deitirmeye alr. Bu saldr tryle
saldrgan gelitirici isteyen tablodan deil baka tablodan veri
kartabilir. Saldrganlar UNION SELECT kalbn kullanarak saldry
gerekletirirler. kinci sorguyu tamamen kontrol altna alabildii iin
belirtilen tablodan veriyi alabilir
10. Piggy-Backed Bu sorgu trnde, orijinal sorguya ekstra
sorguyu sokmaya alr. Sonu olarak veritaban birden fazla SQL
sorgusunu almaktadr. SELECT accounts FROM usersWHERE login=doe AND
pass=; DROPTABLE users -- AND pin=123
11. Sakl yordamlar Bu tr saldrlar veritabanndaki sakl yordamlar
yrtmeye alrlar. Gnmzde veritaban sunucular varsaylan sakl yordamlar
( rnein iletim sistemi ile iletiim kuran) sunmaktadrlar. Bu
nedenle, saldrgan veritabannn adn rendii zaman veritabanna zel sakl
yordamlarn ieren SQL enjeksiyon saldrlarn, iletim sistemi ile
iletiim kuran yordamlar yrtebilir. SELECT accounts FROM users WHERE
login=doe AND pass= ; SHUTDOWN; -- AND pin=
12. Anlamn karma Anlamn karma tabanl saldr trnn iki bilinen
saldr tekni vardr.
13. Kr Saldr Bazen gelitiriciler kullanclardan hata mesajlarn
gizli tutar. Bu durumda saldrganlar hata mesajl sayfa yerine normal
bir sayfayla karlarlar. SQL enjeksiyon saldrs imkansz deil biraz
zor gerekleir. Saldrgan yine de Doru/Yanl sorularn sorarak verileri
alabilirSELECT accounts FROM users WHERE login= 'doe' AND 1 = 1 --
AND pass = AND pin=O Eer uygulama gvenliyse iki sorgu da baarsz
olur. Ama eer girdi dorulamas yoksa saldrgan ansn deneyebilir.
Birinci saldrgan birinci sorguyu gnderir. 1=0 olmadndan hata mesajn
alr. Bylece saldrgan hatann bir sorgudaki mantk hatas veya girdi
dorulama hatas olduunu anlamaz.Sonra her zaman doru olan ikinci
sorguyu gnderir. Eer bir kullanc hesab hatas yoksa, saldrgan
kullanc hesab alannn SQL enjeksiyona kar savunmasz olduunu
renir
14. Zamanlama Saldr Zamanlama saldrlar veritaban cevaplarnn
zamanlama gecikmelerini izleyerek veritaban hakkndaki bilgileri
toplar. Bu teknik if-then deyimlerini kullanarak SQL veritaban
sunucusunun uzak sren sorgular veya zaman geciktirme deyimlerininin
yrtmesini salar. declare @s varchar(8000) select @s = db_name() if
(ascii(substring(@s, 1, 1)) & (power(2, 0))) > 0 waitfor
delay '0:0:5'
15. Sorgu reddedildii zaman veritabannan ayklama(debug) iin
faydal olan hata mesaj gnderilir. Bu hata mesajlar uygulamadaki
savunmasz olan parametreleri bulmaya yardmc olur. Gayri Meru veya
Mantksal Yanl http://ww.arch.polimi.itleventil?id _ nav=8864
http://www.arch.polimLitieventil?id_nav=8864' SELECT name FROM
EmployeeWHERE id =8864'
16. Alternatif kodlama Bu teknikte saldrganlar ekjeksiyon
sorgusunu alternatif kodlama, rnein onaltlk, ASCII, ve Unicode,
kullanarak deitirir. Byle yaparak, saldrganlar gelitiricilerin kt
karakter diye bilinen karakterleri filtreleyen taramalarnan
atlatabilirler. SELECT accounts FROM usersWHERE login= AND pin= 0;
EXEC(CHAR(0X73687574645F776E))Shutdown;
17. SAVUNMASIZ KODLAMA DENEYMLER Gelitiriciler ounlukla SQL
deyimleriyle dizileri birletirerek dinamik sorgu kurma yntemini
kullanrlar. Sistem alma srasnda dardan gelen girdi bilgilerini
direk sorgu kurmada kullanr. Bu yntem kullancnn girdileriyle trl
sorgular yapmaya yol aar. Bu yntemi trl SQL enjeksiyon gvenlik
aklarna neden olduunu renen gelitiriciler parametreli veya sakl
yordamlar kullanmay tercih ederler. Parametreli veya sakl yordamlar
kullanma daha gvenli olsa da onlarn uygun kullanmama yine de
savunmasz kodu oluturabilir
18. DenetlemeninYokluu Uygulama gelitiricilerin en ok yapt hata
SQL deyimlerinde girdileri hi denetleme yapmadan kullanmasndadr.
$query = SELECT info FROM user WHERE name=$_GET[name] AND pwd =
$_GET[pwd]; 'x OR '1'='1
19. Yetersiz nceleme Eer gelitirici SQL'e anlaml olan
karakterleri ncelerse zmleyici onlar SQL komutlar olarak zmlemez.
Ancak gelitiricilerin ou SQL zmleyicisine anlaml olan tm
karakterleri bilmemektedir veya onlarn uygun kullanm ekillerini
bilmiyorlardr. $name = mysql_real_escape_string($_GET["name"]);
$query = "SELECT info FROM user WHERE pwd LIKE '%$pwd%'";
mysql_real_escape_string SQL deyimlerini korur, ama desen eletirme
operatrlerini rnein LIKE, GRANT, REVOKE ncelemez. Bu durumda
saldrgan joker (wildcard) karakterlerini ,% ve _ , ifre alannda
kullanarak daha ok ifrelerin denk gelme ihtimalini artrabilir
20. Veri Tipi Kontrol Yapmama Gelitiricilerin baka hatas olarak
SQL sorgulama gerekletirme yapmadan nce veri tipi kontrol yapmamas.
Bunun yerine programla dili veya veritaban tarafndan nerilmi
filtreleme fonksiyonlarn, addslashes ve mysql_real_escape_string,
uygulamaya alrlar. Ancak, sorgu veritabannn saysal veya veri tipi
olmayan stunlarna erimek olduu zaman, SQL enjeksiyon saldrsnda
ncelenmi veya temizlenmi karakterlere gerek yok $id =
mysql_real_escape_string($_GET["id"]); $query = "SELECT info FROM
user WHERE id = $id"; if(is_numeric($id))
21. Sorgu Dizisinde Ayralarn Yokluu Veya Yanl Kullanm Programc
sorgu dizisini girdileri kullanarak kurarken girdinin veri tipinin
ayralarn doru kullanarak belirtmeli. Ayralar doru kullanmama veya
yokluu SQL enjeksiyon saldr yaplmasna girdiyi derin dorulama,
nceleme, veri tipi kontrol yaplsa dahi yol am olabilir. $name =
mysql_real_escape_string($_GET[name]); $query = SELECT info FROM
userWHERE name = $name; 0x270x780x270x200x4f0x520x200x310x3d0x31 x
OR 1=1
22. Yanl Parametrelenmi SorgularVeya SaklYordamlar
Gelitiricilerin ou parametrelenmi sorgular kullanlrsa SQL
enjeksiyonun imkansz olduuna inanrlar. Byle yaklam genelde doru
olsa da, baz programclar eer parametrelilenmi sorgu dizilerinin
veya sakl yordamlarn parametrelilenmemi girdileri kabul ederse SQL
enjeksiyon yine de mmkn olduunun farkna varmamaktadrlar. $query =
SELECT info FROM user WHERE name =?.ORDER BY $_GET[ORDER] ; $stmt =
$dbo->prepare($query); $stmt->bindParam(1,$_GET[name]);
$stmt->execute();
23. SQL ENJEKSIYONA KARI SAVUNMA SQL enjeksiyona kar savunmalar
genel olarak e ayrabiliriz SQL enjeksiyon gvenlik an bulma SQL
enjeksiyon saldrsn alma zamanl nleme
24. Savunmal Kodlama SQL enjeksiyon gvenlik akl dorudan
gelitiricinin savunmasz kodlama deneyiminden kaynaklandndan,
savunmal kodlama dorudan bir zmdr. Manuel savunmal kodlama
deneyimleri SQL DOM Parametrelenmi sorgu sokma
25. Manuel savunmal kodlama deneyimleri OWASPn SQL enjeksiyon
nleme rapor kad (https://owasp.org/index.php/SQL_Injection_Prev
ention_Cheat_Sheet) ve Chris Anleyin beyaz kad yararl manuel
savunmal kodlama kurallarn salamaktadr
26. Manuel savunmal kodlama deneyimleri Parametrelilenmi
sorgular veya sakl yordamlar. Dinamik sorgular uygun ekilde kodlanm
parametrelilenmi sorgularla veya sakl yordamlarla deitirmek
gelitiricilere parametreleri sorguya sokmadan nce sorgunun yapsn
tanmlamasn gerektirir. Parametreler belirlenmi SQL sorgusuna bal
olduundan ek SQL kodunu sokmak mmkn olmaz.
27. Manuel savunmal kodlama deneyimleri ncelemek Dinamik
sorgular kullanmak kanlmaz durum ise, kullanc tarafndan salanan
parametreleri ncelemek en iyi seenektir. Yetersiz veya yanl
deneyimleri yaygn olduundan, gelitiriciler tm girdi kaynaklarn
veritabanna zel nceleme yordamlar, standart nceleme metotlarn
kullanarak ncelemeli.
28. Manuel savunmal kodlama deneyimleri Veri tipi dorulama
Gelitiriciler ncelemeye ek olarak veri tipi dorulamay kullanmal.
Girdi tipi dizi veya saysal olup olmadn dorulamak kolaylkla tip
uyumsuzluu olan girdilerini reddedebilir. Bu, dorulanm saysal
girdini ileride daha fazla temizleme gerektirmediinden, nceleme
srecini de kolaylatrr ve gvenli kullanlabilir.
29. Manuel savunmal kodlama deneyimleri Beyaz kat szme
Gelitiriciler genelde zel karakterleri szmek iin siyah dizi szme
metodunu kullanrlar. Oysa sadece meru olan girdi parametrelerini
kabul etmek daha gvenlidir. Byle szme metodu mail adresi, tarih,
posta kodu, Kimlik Numaras gibi iyi yaplandrlm verilere daha
uygundur. Gelitiriciler sadece meru olan veri kalplarnn dizisini
saklamas yeter.
30. SQL DOM Manuel savunmal kodlama deneyimleri ok gl SQL
enjeksiyona kar savunma teknii olsa da, uygulamas zahmetli ve
hataya aktr. Bu problemleri kolaylatrmak iin MCClure ve Ingolf
Krger SQL DOMu oluturmutur. SQL DOM otomatik veri tipi dorulama ve
nceleme yapan snflarn setidir. Gelitiriciler kendi veritaban emasn
salar ve bunun APIsini kullanarak SQL deyimlerini kurarlar. SQL DOM
gelitiriciler parametrelilenmi sorgularn yerine dinamik sorgular
kullanmas gerektii zaman daha kullanldr.Ama onlarn yeni sorgu
gelitirme yntemini renmesi gerekir
31. Parametrelilenmi sorgu sokma Otomatik gvenlik kaldrma
yaklam potansiyel savunmasz(dinamik) SQL deyimlerini program iinden
bularak onlar parametrelinmi SQL deyimleriyle yerletirir$rs =
mysql_query(SELECT info FROM user WHERE id=$id); $dbh = new
PDO(mysql:host=xxx;dbname=xxx;,root,pwd); $PSinput00[] = Array();
$PSquery00 = SELECT info FROM user WHERE id = ?; $PSInput00[] =
$id; $stmt = $dbh->prepare($query); $i = 1; foreach($PSinput00
as $input){ $stmt->binParam($i++,$input); } $rs =
$stmt->execute();
32. SQL Enjeksiyon Gvenlik Akl Bulma Aratrmaclar SQL enjekiyon
gvenlik an bulmak iin birka metotlar gelitirmitir
33. SQL Enjeksiyon Gvenlik Akl Bulma Kod-tabanl gvenlik akl
testi Bu yaklam genelde SQL enjeksiyon gvenlik akl bulmak iin uygun
test paketlerini retmeyi amalar.Ama bu gvenlik a olan program
noktalarn tam olarak bulmadndan manel kod denetlemeyi gerektirir.
SQLUnitGen statik analiz kullanarak SQL enjeksiyon saldr kalbn
ieren birim test raporlarn retir
34. SQL Enjeksiyon Gvenlik Akl Bulma Kod-tabanl gvenlik akl
testi Bu yaklam genelde SQL enjeksiyon gvenlik akl bulmak iin uygun
test paketlerini retmeyi amalar.Ama bu gvenlik a olan program
noktalarn tam olarak bulmadndan manel kod denetlemeyi gerektirir.
SQLUnitGen statik analiz kullanarak SQL enjeksiyon saldr kalbn
ieren birim test raporlarn retir
35. SQL Enjeksiyon Gvenlik Akl Bulma Somut saldr oluturma Bu
yaklam simgesel yrtme tekniini kullanarak SQL enjeksiyon gvenlik an
bulacak olan test girdilerini otomatik olarak oluturur
36. alma Zamanl SQL Enjeksiyon Saldrsn nleme Aratrmaclar meru
sorgulara kar fiili alma zamannda kontrol ederek SQL enjeksiyon
saldrlarn nleyebilen alet ve teknikleri gelitirmitir. Ancak alma
zaman kontrol performans sorunlarna neden olur. Baz yaklamlar kod
enstrumentasyonun etkin hale gelmesini gerektirir. Bu gvenlik
aklklarn ayklamay(debug) daha karmak hale getirebilir
37. Rastgelemeler SELECT gender, AVG( age ) FROM cs101.students
WHERE dept = %d GROUP BY gender SELECT123 gender, AVG123 (age)
FROM123 cs101.students WHERE123 dept = %d GROUP123 BY123
gender
38. renme-tabanl nleme Bu yaklam uygulama sunucusu ve veritaban
sunucusu ortasna bulunarak alan alma zamanl gzleme sistemini
kullanr. Sistem tm SQL sorgularn uygulama veritabanna gndermeden
nce ortadan yakalayarak, sorgunun meru olup olmadn kontrol
eder
39. Ara Destei Gelitiricilere ve gvenlik a test edicilere
yardmc olmak iin baz aratrmaclar kendi almalarn veya uygulamalarn
internet zerinde yaynlamlar Nikto2 (http://cirt.net/nikto2) SQLMap
(http://SQLmap.org HPWebInstpect
(http://www8.hp.com/us/en/softwaresolutions/software.html?compURI=1341991#!)
IBM Rational AppScan
(http://www.ibm.com/developerworks/downloads/r/appscank/index.html?ca=dat-
Acunetix WebVulnerability Scanner
(http://www.acunetix.com/vulnerability-scanner/) Netsparker
(https://www.mavitunasecurity.com/netsparker/) Ticari
40. Sonu SQL enjeksiyonu koruma tekniklerinin nn de zayf ve gl
taraf vardr. Savunmal kodlama deneyimleri gvenli kodu salar.Ancak,
zaman alc ve zahmetli bir savunma tekniidir. SQL enjeksiyon gvenlik
ag bulma yaklam neredeyse tm enjeksiyonlar nleyebilir ama ok yanl
uyarlar retebilir. SQL enjeksiyon alma zaman nleme metotlar SQL
enjeksiyon saldrlarn nleyebilir, ama dinamik izleme sistemlerini
gerektirir. Dinamik izleme sistemleri de uygulamann yava almasna
neden olabilmektedir. En etkili strateji tekniini birleik
kullanmaktr. Mevcut olan tekniklerin ou herkese ak deil veya
kullanmay renmek zor. Hazr aralar gelitiricileri SQL enjeksiyona
kar savunmaya motive ederdi. Hem de, aratrmaclar sadece yeni
yollara odaklanmak yerine var olan savunma dzenlerini etkili ve
kolay birletirme yollarn bulmal