SQL ENJEKSİYON SALDIRILARI
SQL Enjeksiyonuna Giriş
SQL Enjeksiyonu (SQLi), bir saldırganın bir uygulama tarafından yürütülen SQL sorgularını manipüle edebildiği zaman oluşan önemli bir güvenlik açığıdır. Bu manipülasyon, hassas verilere yetkisiz erişime, veri bozulmasına veya hatta veritabanı üzerinde tam kontrole yol açabilir. SQL enjeksiyonunu anlamak, web uygulaması geliştirme veya güvenlikle ilgilenen herkes için çok önemlidir.SQL Enjeksiyon Saldırıları Nasıl Gerçekleştirilir
Adım 1: Savunmasız Girdileri Belirleme
Saldırganlar, SQL enjeksiyonuna karşı hassas olan bir web uygulaması içindeki kullanıcı girdilerini belirleyerek başlar. Yaygın güvenlik açığı girdileri şunları içerir:- Metin Alanları: Kullanıcıların veri girdiği formlardaki giriş alanları (örneğin, oturum açma formları).
- URL Parametreleri: Veritabanı sorgularını doğrudan etkileyen URL'lerdeki sorgu dizeleri.
- Çerezler: İstemci tarafında saklanan ve sunucuya geri gönderilebilen veriler.
Uygulama bu girdileri düzgün bir şekilde doğrulamaz veya temizlemezse, bir saldırgan bunları manipüle edebilir.
Adım 2: Kötü Amaçlı SQL Sorguları Oluşturma
Bir güvenlik açığı tanımlandığında, saldırganlar orijinal sorguyu değiştirmeyi amaçlayan kötü amaçlı SQL ifadeleri oluşturur. Örneğin, bir saldırgan şunları girerse:Sonuçta ortaya çıkan SQL sorgusu şu şekilde olur:
Bu sorgu her zaman true değerini döndürecektir çünkü her zaman true olarak değerlendirilen bir koşuldur ve saldırganın kimlik doğrulamasını atlamasına olanak tanır.
1=1
Adım 3: Güvenlik Önlemlerini Aşma
Saldırganların genellikle giriş doğrulama veya özel karakterlerden kaçış gibi güvenlik önlemlerini atlatması gerekir. Teknikler şunları içerir:- Dize Birleştirme: Kullanıcı girdisini SQL komutlarıyla birleştirmek için birleştirmeyi kullanma.
- Sorguların Bazı Bölümlerini Yorum Dışına Çıkarma: Orijinal sorgunun bazı bölümlerini yok saymak için veya kullanılır .
--
/*
SQL Enjeksiyon Saldırılarının Türleri
- Bant içi SQL Enjeksiyonu:
- Hata Tabanlı SQL Enjeksiyonu: Veritabanının yapısı hakkında bilgi edinmek için veritabanından dönen hata mesajlarından yararlanır.
- Birleşim tabanlı SQL Enjeksiyonu: Birden fazla SELECT ifadesinden gelen sonuçları birleştirmek için operatörü kullanır ve saldırganların diğer tablolardan veri almasına olanak tanır.
UNION
- Kör SQL Enjeksiyonu:
- Boole tabanlı Kör SQLi: Saldırganların uygulama davranışına göre bilgi çıkarmasına olanak tanıyan, doğru veya yanlış yanıtları döndüren sorgular gönderir.
- Zaman Tabanlı Kör SQLi: Bilgiyi çıkarsamak için yanıtlardaki zaman gecikmelerine güvenir.
- Bant Dışı SQL Enjeksiyonu:
- Bu tür saldırılar, verilerin enjeksiyon için kullanılan kanaldan farklı bir kanal kullanılarak alınması durumunda gerçekleşir (örneğin, sonuçları e-posta yoluyla göndermek).
Başarılı SQL Enjeksiyon Saldırılarının Etkisi
Başarılı SQL enjeksiyon saldırılarının sonuçları ciddi olabilir:- Çalınan Kimlik Bilgileri: Saldırganlar kullanıcı kimlik bilgilerini ele geçirebilir ve kullanıcıları taklit edebilir.
- Yetkisiz Erişim: Saldırganlar, veritabanlarında saklanan hassas verilere erişim sağlar.
- Veri Manipülasyonu: Saldırganlar mevcut verileri değiştirebilir veya yeni veriler ekleyebilir.
- Veri Silme: Saldırganlar kayıtları silebilir veya tüm tabloları düşürebilir, bu da veri kaybına ve uygulama kesintisine yol açabilir.
Önleme Stratejileri
SQL enjeksiyon saldırılarının riskini azaltmak için kuruluşlar sağlam güvenlik önlemleri uygulamalıdır:1. Parametreli Sorguları Kullanın
Parametreli sorgular, kullanıcı girdisinin yürütülebilir kod yerine veri olarak ele alınmasını sağlar. Örneğin, bir .NET uygulamasında:2. Giriş Doğrulama ve Temizleme
Tüm kullanıcı girdilerinde sıkı doğrulama uygulayın:- Beyaz Liste Giriş Doğrulaması: Kullanıcı girdileri için kabul edilebilir biçimleri tanımlayın ve bu parametrelerin dışındaki her şeyi reddedin.
- Özel Karakterlerden Kaçış: SQL'de özel anlamları olan karakterlerden doğru şekilde kaçış.
3. Veritabanı Güvenlik Önlemleri
- En Az Ayrıcalık İlkesi: Başarılı saldırılardan kaynaklanabilecek olası zararı azaltmak için uygulama hesaplarına ilişkin veritabanı izinlerini sınırlayın.
- Düzenli Güvenlik Denetimleri: Potansiyel güvenlik açıklarını belirlemek ve gidermek için düzenli denetimler ve kod incelemeleri gerçekleştirin.