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.
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, 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 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ı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.
Genel olarak SQL enjeksiyonları aşağıdaki türlere ayrılır:
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:
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:
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.
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.
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.
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.
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.
QL 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:
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.
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:
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.
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.
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.
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ı.
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 SQL enjeksiyon saldırısının işletmeniz üzerinde ciddi bir etkisi olabilir. Aşağıda bazı önemli sonuçları bulabilirsiniz:
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.
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.
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.
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.
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.
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.