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.
Yorum Gönder