SQL Injection Nedir?
Aslında hack ile ilgili pek bilgi eklemek istemiyorum bloğa fakat dün gece yani 10 Eylül 2011 Cumartesi 00:38 civarında SQL Injection Atağı bloğuma oluyor diye mailime bilgi düşünce hem bu atağı herkese kısa da olsa söylüyeyim hemde az sonra atağı yapan IP sini vereceğim kişinin belki uyarılmasını sağlayailirim diye bu bilgiyi giriyorum.
SQL Injection saldırganların veri çalma/değiştirmede kullandıkları web saldırı metodlarından biridir. Belkide günümüzde en çok kullanılan uygulama seviyesi tekniklerden biridir. Web uygulamasındaki güvensiz kodlamalardan yararlanarak login formu gibi kullanıcı girişlerinin SQL sorgusunda kullanıldığı yerlerde SQL komutları eklenmesi ile veritabanına yetkisiz erişim sağlar.
Web sitenizi ve uygulamalarınızı SQL Enjeksiyon saldırılarından korumak 3 bölümlük bir işlemden oluşur:
1. Sitenizin, SQL Enjeksiyon ve diğer açıklara karşı tam bir güvenlik denetiminin yapılması ile güvenliğinizin mevcut halinin analiz edilmesi.
2. Web uygulamalarının ve BT altyapısının diğer tüm bileşenlerinin steril olması için en uygun kodlama standartlarının / tekniklerinin kullanılması.
3. Web bileşenlerindeki her değişiklik veya eklemeden sonra düzenli web güvenlik denetimi uygulanması.
Ek olarak, SQL Enjeksiyon ve diğer tüm hack tekniklerinin kontrolünde aklınızda olması gereken ana ilke şudur: “Web sitesinde güvenli olduğunu düşündüğümüz hangi bölümler hack saldırılarına açık?” ve “Bir uygulamaya hangi veriyi göndererek normalde yapmaması gereken bir şeyi yaptırabiliriz?”.
SQL Enjeksiyon’un etkileri nedir?
Bir saldırgan sistemin SQL Enjeksiyon saldırısından etkilendiğini tespit ettiğinde bir giriş alanından SQL sorgu ( komutlarını çalıştırmaya başlar. Bu veritabanınızı saldırganın eline verip istediği SQL komutlarını çalıştırmasına, istediği verileri silmesine ve değiştirebilmesine izin vermek gibidir.
Saldırganın istediği komutları çalıştırması veritabanı bütünlüğünün bozulmasına ve önemli bilgilerin görülmesi ile sonuçlanır. Arka planda kullanılan veritabanına bağlı olarak SQL enjeksiyon açıkları saldırgan için değişik seviyelerde veri/sistem erişimi sunar.
Bazı durumlarda dosyalardan okumak veya dosyalara yazmak, ya da işletim sisteminde komutlar çalıştırmak mümkün olabilir. Micorosft SQL sunucusu gibi bazı SQL sunucuları stored ve extended prosedürler (veritabanı sunucusu fonksiyonları) içerirler. Eğer bir saldırgan bu prosedürlere ulaşabilirse bu tam bir felaket olacaktır.
Maalesef SQL enjeksiyon etkileri sadece veri hırsızlığı veya hack sonrası farkediliyor.
SQL Injection: Basit bir örnek
Normal bir kullanıcının kendi kullanıcı adı ve şifre kombinasyonu ile giriş yaptığı bir login sayfası düşünün.
Normal kullanıcı bilgilerini gönderdiğinde bu bilgilerden bir SQL sorgusu yaratılarak doğrulama için veritabanına gönderilir. Eğer geçerli ise kullanıcının erişimine izin verilir. Diğer bir deyişle login sayfasını kontrol eden web uygulaması kullanıcı adı şifre kombinasyonunu doğrulamak için planlanmış komutları kullanarak veritabanı ile haberleşir. Doğrulandığında da kullanıcının erişimine izin verilir.
SQL Enjeksiyoni ile saldırganlar login formu engelini aşarak arkasındakileri görmek için özel olarak hazırlanmış SQL komutları girerler. Bu sadece eğer kullanıcı tarafından sağlanan girişler doğru olarak filtrelenmiyor ve direk olarak SQL sorgusu ile veritabanına gönderiliyorsa mümkün olabiliyor. SQL Enjeksiyon açıkları saldırganların direk olarak veritabanı ile haberleşmesini sağlarlar.
Bu tip saldırılardan etkilenen teknolojiler ASPi, ASP.NET, PHPi, JSPi ve CGI gibi dinamik script dilleridir. SQL Enjeksiyon saldırısı yapacak olan bir saldırganın tek ihtiyacı olan bir web tarayıcısı, SQL sorguları hakkında bilgidir. SQL Enjeksiyonun basitliği onu popüler yapan en büyük etken.
Bir SQL Enjeksion saldırısı örneği
login ve şifre den oluşan iki giriş kabul eden basit bir HTML formunu inceleyelim:
Formun Üstü
Formun Altı
login.asp’nin en kolay çalışma şekli aşağıdaki gibi bir veritabanı sorgusu hazırlamakla olabilir:
SELECT id
FROM logins
WHERE username = ’$username’
AND password = ’$password’
Eğer $username ve $password değişkenleri kullanıcı girişinden direk olarak alınıp SQL sorgusunda kullanılıyorsa çok kolay bir şekilde hack edilebilir demektir. Kullanıcı adı olarak “Olympos” verdiğimizi ve şifre için de aşağıdakini yazdığımızı varsayalım:
falan’ OR ’x’=’x
SELECT id
FROM logins
WHERE username = ’Olympos’
AND password = ’falan’ OR ’x’=’x’
Web uygulamasında kullanıcı girişleri doğru olarak filtrelenmediği için, tek tırnak kullanımı WHERE sql komutunu iki-bileşenli bir sorguya dönüştürdü.
’x’=’x’ bölümü ilk bölüm ne olursa olsun şartın doğru olmasını garantiler.
Bu da saldırganın login form’unu geçerli bir kullanıcı / şifre kombinasyonu bilmesine gerek kalmadan aşabilmesini sağlar.
SQL Enjeksiyon saldırılarını nasıl engellerim?
Güvenlik duvarları ve benzer saldırı tespit mekanizmaları bu konuda tam bir koruma sağlamayabilir. Web sitenizin herkese açık olması gerektiği için güvenlik mekanizmaları web trafiğinin veritabanı sunucularınız ile web uygulaması aracılığı ile haberleşmesine izin verecektir. Zaten bunun için tasarlanmadılarmı?
Sunucularınızı, veritabanlarını, programlama dillerini ve işletim sistemlerinizi güncelleyip yamalarını geçmeniz kritik öneme sahip fakat SQL Enjeksiyon saldırılarını engellemede tam çözüm değildir.
IP address
88.233.116.176 Istanbul Istanbul NATurkey