Bilgisayar korsanlığı teknikleri daha gelişmiş hale gelse ve bilgisayar korsanları için yeni saldırı vektörleri mevcut olsa bile, bazı eski yöntemler hala her zamanki kadar etkilidir.
SQL injection, siber suçlular tarafından onlarca yıldır kullanılan bu tekniklerden biridir. Öyle ki SQL enjeksiyonları düzenli olarak Open Web Application Security Project (OWASP) en iyi 10 web güvenlik açığı arasında yer almaktadır.
SQL Sorguları Nedir?
Sorgular, kullanıcı tarafından belirlenen kriterleri kullanarak belirli verileri bulmak için kullanılabilir. SQL, uygulamaların veri tabanlarını çalıştıran bir dildir. Bir işletme tarafından dahili olarak kullanılabilir veya internette herkese açık hale getirilebilir. SQL sorguları verileri bulabilir ve hesaplamalar yapabilir, verileri özetleyebilir veya görevleri otomatikleştirebilir.
SQL Injection Nedir?
SQL injection, bir bilgisayar korsanının uygulama tarafından veri tabanına gönderilen SQL sorgularını manipüle etmesine olanak tanıyan bir güvenlik tehdidi türüdür. Bilgisayar korsanı, izni olmayan verilere erişim elde edebilir.
SQL, SQL sorguları olarak bilinen komutlar aracılığıyla veri tabanlarına erişmek ve bunları manipüle etmek için kullanılan yapılandırılmış bir sorgu dilidir. SQL injection saldırıları, bir web sayfasındaki web formu gibi bir kullanıcı girişi doğrulama yöntemi aracılığıyla bir SQL komutunun veya sorgu dizesinin eklenmesini içerir.
Bir SQL injection güvenlik açığı MySQL, Oracle, SQL Server vb. SQL veri tabanlarına dayanan uygulamaları etkileyebilir. Bilgisayar korsanları SQL enjeksiyonu yoluyla uygulama güvenlik önlemlerini atlayabilir ve veri tabanlarına yetkisiz erişim elde etmek için kimlik doğrulama süreçlerini atlatabilir.
Örneğin, gizli şirket belgelerine, kullanıcı verilerine, müşteri verilerine ve diğer hassas bilgilere izinsiz olarak erişebilirler. Bilgisayar korsanları ayrıca verileri değiştirebilir veya silebilir, veri tabanı üzerinde yönetim işlemleri gerçekleştirebilir ve veri tabanı yönetim sistemini kapatabilir. Hatta altta yatan SQL sunucusuna ve hatta işletim sistemine komutlar uygulayarak işletmeye ciddi zararlar verebilir.
SQL Injection Tarihçesi
SQL enjeksiyonunun kökenleri, web uygulamalarının veri depolama ve alma için veri tabanlarına büyük ölçüde güvenmeye başladığı 1990’ların sonlarına kadar uzanmaktadır. Web siteleri kullanıcı girdilerini uygun doğrulama ve temizleme olmadan kabul etmeye başladığında, bilgisayar korsanları girdi alanlarına kötü niyetli SQL ifadeleri ekleyerek bu güvenlik açığından yararlanabileceklerini keşfettiler.
Bunu yaparak bilgisayar korsanları kimlik doğrulamasını atlayabilir, hassas verileri çıkarabilir, veri tabanı kayıtlarını değiştirebilir veya silebilir ve hatta altta yatan sunucuda rastgele komutlar çalıştırabilir.
Yıllar boyunca SQL enjeksiyon saldırıları yaygın ve zarar verici olmaya devam etmiş, dünya çapında kuruluşlar için önemli veri ihlallerine ve mali kayıplara yol açmıştır.
Web teknolojilerinin sürekli gelişimi, web uygulamalarının artan karmaşıklığı ve farklı veri tabanı yönetim sistemlerinin benimsenmesi SQL enjeksiyon saldırılarını güncel tutmuştur.
SQL Injection Saldırısı Nasıl Çalışır?
SQL injection saldırıları, veri tabanında belirli komutları çalıştırmak için kullanıcı giriş alanlarına SQL komutları enjekte ederek çalışır. Bu veri tabanı sorgularına verilen yanıta dayanarak, bir bilgisayar korsanı veri tabanı mimarisini anlayabilir ve bir uygulama içinden kısıtlanmış bilgilere erişebilir.
Örneğin, bir bilgisayar korsanı “1=1” gibi her zaman doğru olan ifadeleri kullanarak bir uygulamadan veri almak için SQL enjeksiyonu gerçekleştirebilir. Bu ifade her zaman doğru olduğundan, sorgu dizesi bir tablonun ayrıntılarını içeren bir yanıt döndürecektir.
Bilgisayar korsanları ayrıca “105; DROP TABLE Supplier” gibi noktalı virgüllerle ayrılmış bir dizi SQL deyiminin kullanıldığı Batched SQL enjeksiyonunu da kullanabilir. Burada noktalı virgülden sonraki ifade uygulama veri tabanından tedarikçi tablosunu silecektir.
SQL Enjeksiyonlarının Türleri Nelerdir?
Genel olarak SQL enjeksiyonları aşağıdaki türlere ayrılır:
1. Bant içi SQLi (Klasik)
Saldırıları başlatmak ve sonuçları toplamak için bilgisayar korsanı iletişim için aynı kanalı kullanır. Basitliği ve verimliliği nedeniyle SQLi saldırılarının en popüler türlerinden biridir. Bu yöntemin iki alt varyasyonu vardır:
- Hata tabanlı: Bir bilgisayar korsanı, hedeflenen belirli eylemleri gerçekleştirerek veri tabanının hata mesajları üretmesine neden olur. Bilgisayar korsanı bu hata mesajlarını veri tabanının yapısı ve yapılandırması hakkında bilgi edinmek için kullanabilir.
- Birlik tabanlı: Bu teknik, UNION SQL operatörünü kullanarak veri tabanındaki birden fazla select ifadesini tek bir HTTP yanıtında birleştirir. Bilgisayar korsanı bu yanıttaki verilerden yararlanabilir.
2. Çıkarımsal SQLi (Kör)
Bilgisayar korsanı, sunucunun yapısı hakkında daha fazla bilgi edinmek için veri yükleri gönderir ve yanıtını izler.
Blind SQL enjeksiyonları normalden daha yavaştır, çünkü sunucunun davranış kalıplarına ve yanıtına güvenirler. Ancak, bir o kadar da tehlikeli olabilir. Aşağıdakiler blind SQL enjeksiyonu türleridir:
- Boolean: Bilgisayar korsanı veri tabanına bir SQL sorgusu göndererek uygulamadan sonuçları döndürmesini ister. Sorgunun doğru ya da yanlış olması sonucu etkileyecektir. HTTP yanıtının bilgileri sonuca bağlı olarak değişir veya değişmeden kalkar. Bilgisayar korsanı daha sonra mesajın doğru ya da yanlış bir sonuç döndürüp döndürmediğini belirleyebilir.
- Zaman tabanlı: Bilgisayar korsanı veri tabanına bir SQL sorgusu gönderir (bir SQL sorgusu kullanarak). Veri tabanı daha sonra yanıt vermeden önce saniyelik bir süre bekler. Bilgisayar korsanı, veri tabanının yanıt süresinden sorgunun doğru veya yanlış olduğunu belirleyebilir. Sonuca bağlı olarak, bir HTTP yanıtı ya hemen ya da bir bekleme süresinden sonra oluşturulacaktır. Bilgisayar korsanı, veri tabanı verilerine güvenmeden, gönderdiği mesajın doğru mu yanlış mı olduğunu belirleyebilir.
3. Bant dışı SQLi
Bu saldırı yalnızca web uygulamasının veri tabanı sunucusundaki belirli özellikler etkinleştirilirse gerçekleştirilebilir. Bu saldırı öncelikle bant içi veya çıkarımsal SQLi’ye alternatif olarak kullanılır.
Bilgisayar korsanı saldırmak ve bilgi toplamak için aynı kanalı kullanamadığında veya bir sunucu bu eylemleri gerçekleştirmek için çok yavaşsa, bant dışı SQLi kullanılabilir. Bu teknikler, sunucunun bilgisayar korsanı veri göndermek için DNS istekleri veya HTTP istekleri yapabilmesine bağlıdır.
4. İkinci dereceden SQL enjeksiyonu
Web uygulamalarında kullanıcı tarafından sağlanan verilerin bir veri tabanında saklandığı ve saklanan veriler daha sonra farklı bir bağlamda kullanıldığında kötü amaçlı SQL kodunun çalıştırıldığı bir güvenlik açığı türüdür. Bu durum, uygulama depolanan verileri düzgün bir şekilde sterilize etmediğinde veya doğrulamadığında ortaya çıkabilir.
5. Zaman tabanlı SQL enjeksiyonu
Zaman tabanlı saldırılar, enjekte edilen SQL kodunun çalışıp çalışmadığını belirlemek için veri tabanının yanıtındaki gecikme veya zamanlama farklılıklarından yararlanır. Bilgisayar korsanı, zaman gecikmeli SQL deyimleri enjekte ederek, uygulamanın yanıt vermesi için geçen süreyi gözlemleyerek bilgi çıkarabilir veya veri tabanını manipüle edebilir.
6. Union tabanlı SQL enjeksiyonu
Union tabanlı saldırılar, birden fazla SELECT deyiminin sonuç kümelerini birleştirmek için SQL’deki UNION operatöründen yararlanır. Bilgisayar korsanı, hazırlanmış bir UNION deyimi enjekte ederek diğer veri tabanı tablolarından veri alabilir veya açığa çıkması amaçlanmayan ek bilgileri çıkarabilir.
7. Hata tabanlı SQL enjeksiyonu
Hata tabanlı saldırılar, bilgi elde etmek için veri tabanı tarafından oluşturulan hata mesajlarından ve yanıtlarından yararlanır. Bilgisayar korsanı, bir hatayı tetikleyen kötü amaçlı SQL kodu enjekte ederek veri tabanı yapısı, tablo adları veya belirli veriler hakkında ayrıntılar elde edebilir.
SQL Injection Saldırıları Neden Var?
SQL injection saldırıları, web uygulamalarında bulunan çeşitli faktörler ve güvenlik açıkları nedeniyle mevcuttur. SQL enjeksiyon saldırılarının yaygın bir tehdit olmaya devam etmesinin bazı temel nedenleri aşağıdaki şekildedir:
- Yetersiz girdi doğrulama: Geliştiriciler kullanıcı girdisini doğrulamada ve sterilize etmede başarısız olur, bu da bilgisayar korsanının sorguları manipüle etmesine ve kötü amaçlı kod enjekte etmesine olanak tanır.
- Eski kod ve zayıf güvenlik uygulamaları: Eski uygulamalar, parametrelendirilmiş sorgular gibi sağlam güvenlik önlemlerinden yoksun olabilir.
- Web uygulamalarının karmaşıklığı: Karmaşık mimariler, güvenlik açıklarını gözden kaçırma ve uygun güvenlik önlemlerini uygulamada başarısız olma olasılığını artırır.
- Güvenlik farkındalığı eksikliği: Geliştiriciler arasında yetersiz eğitim ve farkındalık, güvenlik açıklarının kasıtsız olarak ortaya çıkmasına neden olabilir.
- Bilgisayar korsanları için kalıcılık ve karlılık: Başarılı SQL enjeksiyon saldırıları değerli verilere erişim sağlayarak siber suçlular için kazançlı bir girişim haline gelir.
- Hızla gelişen teknikler: Bilgisayar korsanları savunmaları atlatmak için sofistike yöntemleri adapte eder ve geliştirir.
SQL Enjeksiyon Saldırısı Riskleri – Ne Kadar Tehlikeli?
SQL injection saldırılarının tehlikesi, bilgisayar korsanlarının yetkisiz verilere erişebilmesinde yatmaktadır. Bu veriler şifreler, kredi kartı bilgileri veya kullanıcıların ya da müşterilerin kişisel olarak tanımlanabilir bilgileri gibi hassas verilerle ilgili olduğunda, bilgisayar korsanları bir işletmeye ciddi mali ve itibar hasarı verebilir. Bazen SQL injection saldırıları da bilgisayar korsanlarına fark edilmeden bir kuruluşun sistemine uzun süreli erişim sağlayabilir.
Geçmişte SQL enjeksiyonunu kullanan çok sayıda yüksek profilli veri ihlali olmuştur. Örneğin, 2013 yılında APT grubunun GhostShell saldırısı, 53 üniversitedeki öğrenci ve personelin 36.000 kişisel kaydını çalmak ve yayınlamak için SQL enjeksiyonunu kullandı. Aynı yıl bir başka grup olan RedHack de SQL enjeksiyonunu kullanarak Türk hükümetinin web sayfasını ihlal etmiş ve devlet kurumlarına olan borçları silmiştir.
SQL Injection Örnekleri
Bilgisayar korsanlarının SQL enjeksiyonu güvenlik açıklarından yararlanabileceği çeşitli yollar vardır. Bilgisayar korsanının ne aradığına ve bir veri tabanında bulunabilecek bilgi türüne bağlı olarak, SQL enjeksiyon örnekleri genellikle aşağıdaki türlere ayrılır:
- Gizli verileri almak: Bir alışveriş sitesinde yayınlanmamış ürünler gibi gizli sonuçları görüntülemek için SQL sorgularının değiştirildiği saldırılardır.
- Uygulama mantığını yıkmak: Bu, bir sorgu dizesini değiştirerek bir uygulamanın mantığına müdahale etmeyi içerir. Örneğin, parolanın doğru olup olmadığını kontrol eden sorgunun tarafını yorumlayarak parola girmeden kullanıcı olarak oturum açmak.
- Veri tabanını incelemek: Yapı ve sürümün yanı sıra tabloların kendileri de dahil olmak üzere veri tabanı hakkında bilgilerin alındığı saldırılardır.
- Ek tabloları almak için UNION tabanlı SQL enjeksiyonu: Bunlar, bilgisayar korsanının SQL veri tabanındaki hassas olabilecek diğer tablolardan veri almak için UNION select gibi bir anahtar kelime kullanarak orijinal meşru bir sorgunun sonuçlarını ek bir sorguyla eklediği saldırılardır.
SQL Injection Saldırıları Nasıl Tespit Edilir?
SQL injection saldırılarını azaltmak kolaydır, ancak en yetenekli geliştiriciler bile hata yapar. SQL injection saldırısı tehdidini azaltmanın temel bileşeni tespittir. Bir web uygulaması güvenlik duvarı (WAF), temel SQL enjeksiyon saldırılarını tespit edip engelleyebilse de, tek önleyici tedbir olarak buna güvenilmemelidir.
SQL enjeksiyon saldırılarını tespit etmek için hem ağ hem de ana bilgisayar tabanlı saldırı tespit sistemleri (IDS) kurulabilir. Ağ tabanlı IDS’ler veri tabanı sunucunuza giden tüm bağlantıları izlemek ve şüpheli etkinlikleri işaretlemek için kullanılabilir. Ana bilgisayar tabanlı IDS’ler web sunucularından gelen günlükleri izleyebilir ve bir sorun olduğunda sizi uyarabilir.
Neyse ki doğru farkındalıkla SQL enjeksiyon saldırıları kolayca önlenebilir.
SQL Injection Saldırıları Nasıl Önlenir?
1. Parametrelendirilmiş sorgular içeren hazır deyimler
Bu, bir saldırıyı önlemek için güçlü bir korumadır. Geliştiriciler, veri ve uygulama kodu arasında ayrım yapamayan dinamik sorgular yazmaktan kaçınmak için hazır deyimler tarafından zorlanmaktadır. Bunun yerine, statik SQL sorguları kullanmalı ve sorguya harici girdi aktarmalıdırlar. Bu, SQL yorumlayıcısının kod ve veri arasında ayrım yapmasını sağlar.
2. Saklı yordamlar
Bunlar, bir veri tabanında tanımlanıp saklanan ve daha sonra bir uygulamadan çağrılabilen SQL deyimleridir. Geliştiricilerin genellikle otomatik olarak parametrelendirilebilen parametrelere sahip SQL deyimleri oluşturmaları gerekir. Bununla birlikte, saklı yordamlar içinde dinamik SQL sorguları oluşturmak mümkündür.
3. Girdi doğrulama
Kötü niyetle hazırlanmış girdi, SQL enjeksiyonunun yaygın bir kaynağıdır. En iyisi, girdi doğrulama olarak bilinen bir uygulama ile yalnızca onaylanmış girdiyi kabul etmektir. Buna karşı koruma sağlamak için iki tür girdi doğrulaması vardır: blok listesi doğrulaması veya izin listesi doğrulaması.
- Engelleme listesi doğrulaması harici girdiyi bilinen kötü amaçlı girdilere karşı kontrol eder. Bir uygulama bilinen tüm kötü amaçlı girdileri derler, ardından harici girdiyi bu listeye göre doğrular. Bir bilgisayar korsanı, kara liste doğrulamasını atlamak için birden fazla kötü amaçlı girdi türü oluşturabilir.
- İzin listesi riski azaltmanın mükemmel bir yoludur. İzin listesi doğrulaması, harici bir girdiyi onaylanmış girdiler listesine karşı doğrular. İzin listesi girdi doğrulaması, uygulamanın tam olarak ne istediğini anlamasını sağlar ve bilinen, onaylanmış bir girdiye karşı testi geçemeyen tüm girdileri reddeder.
4. En az ayrıcalık ilkesi
Bu güvenlik önlemi, başarılı bir saldırının neden olabileceği hasarı en aza indirmeye yardımcı olur. Uygulama hesaplarına veri tabanı sunucusuna DBA ve admin erişimi verilmemelidir. Erişim, erişim gereksinimlerine bağlı olarak her zaman en kısıtlı olarak ayarlanmalıdır. Yalnızca okuma erişimi gerektiren hesaplara yalnızca ihtiyaç duydukları tablolara erişim izni verilecektir. Bu, uygulamanın ele geçirilmesi durumunda bir saldırganın veri tabanına yazma erişimine sahip olmayacağı anlamına gelir.
Bir SQLi saldırısının iş dünyasına etkisi nedir?
Bir SQL enjeksiyon saldırısının işletmeniz üzerinde ciddi bir etkisi olabilir. Aşağıda bazı önemli sonuçları bulabilirsiniz:
1. Veri ihlali
SQLi saldırıları, veri tabanlarında saklanan hassas verilere yetkisiz erişimle sonuçlanabilir. Bu veriler arasında müşterilerin kişisel bilgileri, mali kayıtlar, fikri mülkiyet, ticari sırlar veya gizli iş bilgileri yer alabilir. Bir veri ihlali yasal yükümlülüklere, düzenleyici cezalara, müşteri güveninin kaybına ve kuruluşun itibarının zedelenmesine yol açabilir.
2. Finansal kayıplar
SQLi saldırıları, çalınan finansal bilgiler, hileli işlemler veya saldırganlardan gelen fidye taleplerinden kaynaklanan doğrudan mali kayıplara neden olabilir. Ayrıca, Dijital Adli Tıp ve Olay Müdahale soruşturmaları, yasal işlemler, veri kurtarma ve gelişmiş güvenlik önlemlerinin uygulanması ile ilgili maliyetlerden kaynaklanan dolaylı kayıplara da neden olabilirler.
3. İtibari zarar
Bir saldırı bir kuruluşun itibarını zedeleyebilir, müşteri güvenini aşındırabilir ve marka imajını etkileyebilir. Bir veri ihlalinin veya gizliliğinin ifşa edilmesi medyada olumsuz haberlere, kamuoyu incelemesine ve mevcut ve potansiyel müşterilerin kaybına yol açabilir. Ayrıca, güveni yeniden inşa etmek uzun ve zorlu bir süreç olabilir.
4. Yasal ve uyumluluk sorunları
Kuruluşlar genellikle veri koruma ve gizlilikle ilgili çeşitli yasal ve düzenleyici yükümlülüklere tabidir. Veri ihlalleri, veri koruma yasalarının ihlali, ihlal bildirim gereklilikleri ve etkilenen bireylerden veya düzenleyici kurumlardan gelebilecek potansiyel davalar dahil olmak üzere yasal ve uyumluluk sorunlarına yol açabilir.
5. Operasyonel aksaklıklar
SQLi saldırıları iş operasyonlarını sekteye uğratarak sistem kesintilerine, hizmetlerin kullanılamamasına veya işlevselliğin tehlikeye girmesine neden olabilir. Bu durum çalışan verimliliğini, müşteri deneyimini ve genel iş sürekliliğini etkileyebilir. Kuruluşlar olay müdahalesi, sistem restorasyonu ve gelecekteki saldırıları önlemek için güvenlik önlemlerinin uygulanması için ek maliyetlere maruz kalabilir.
6. Rekabet dezavantajı
Bir SQLi saldırısı, hedef alınan kuruluşun itibarına, müşteri güvenine ve marka değerine zarar vererek rakiplere avantaj sağlayabilir. Müşteriler daha güvenli ve güvenilir olarak algıladıkları rakiplere geçmeyi tercih edebilirler. Pazar payı kaybı ve müşteri sadakatinin azalması da kuruluşun rekabet gücü ve büyümesi açısından uzun vadeli sonuçlar doğurabilir.