sql enjeksiyona karşi savunma

41
SQL ENJEKSİYONA KARŞI SAVUNMA Nursultan TURDALIEV Gazi Üniversitesi

Upload: nursultan-turdaliev

Post on 12-Aug-2015

167 views

Category:

Software


0 download

TRANSCRIPT

  1. 1. SQL ENJEKSYONA KARI SAVUNMA NursultanTURDALIEV Gazi niversitesi
  2. 2. SQL enjeksiyon nedir? Saldr trleri Savunmasz kodlama deneyimleri SQL enjeksiyona kar savunma Ara destei
  3. 3. SQL enjeksiyon nedir?
  4. 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. 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. 6. Paolo Passeri http://hackmageddon.com/2013-cyber-attacks-statistics/
  7. 7. SQL ENJEKSYON SALDIRI TRLER SaklYordamlar Gayri Meru veya MantksalYanl Alternatif kodlama
  8. 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. 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. 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. 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. 12. Anlamn karma Anlamn karma tabanl saldr trnn iki bilinen saldr tekni vardr.
  13. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 32. SQL Enjeksiyon Gvenlik Akl Bulma Aratrmaclar SQL enjekiyon gvenlik an bulmak iin birka metotlar gelitirmitir
  33. 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. 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. 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. 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. 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. 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. 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. 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
  41. 41. Teekkrler