Siber suçluların sevdiği bir şey varsa, o da verilerdir. Çalınan veriler yasa dışı pazarlarda oldukça değerlidir ve özel veritabanlarına erişim, kötü niyetli aktörlerin girişimlerinden kar elde etmeleri için harika bir yol olabilir. Özel verilere erişmenin bir yolu SQL enjeksiyonudur. Ancak SQL enjeksiyonu tam olarak nedir, nasıl çalışır ve böyle bir saldırı önlenebilir mi?
SQL Enjeksiyonu Nedir?
Yazılım programları, çalışmak için koda güvenir. Kod aynı zamanda makinelerin işlemleri yürütmek için kullandığı dildir ve birçok biçimde olabilir (Python, JavaScript, C++, vb.). Siber suçlular genellikle kod aracılığıyla kurbanlara saldırabilir ve SQL enjeksiyonları (veya SQLis) farklı değildir. Bunlar, kötü niyetli aktörlerin bir SQL ifadesine zararlı kod "enjekte etmesine" izin verir.
Öncelikle SQL'in ne anlama geldiğine bakalım.
SQL, Yapılandırılmış Sorgu Dili anlamına gelir. Bu başka bir tür programlama dilidir özellikle veritabanlarıyla uğraşırken kullanılır. 1970'lerde IBM tarafından geliştirilen SQL, veritabanı bilgilerini işleyebilir, depolayabilir ve alabilir. Dünyanın dört bir yanındaki birçok veritabanı iletişim sistemi SQL kullanır, bu nedenle tehdit aktörlerinin veritabanlarını hedeflemek için onu kötüye kullanmanın yollarını bulmaları şaşırtıcı değildir.
SQL ifadeleri, veritabanı iletişiminin önemli bir bölümünü oluşturur. Bir SQL ifadesi bir komuttur bu birçok farklı biçimde gelir. Bazıları verileri değiştirir, bazıları alır veya siler ve bazıları da veritabanının yapısını değiştirebilir. Bir SQL enjeksiyonu gerçekleştiğinde, kötü amaçlı kod bir SQL ifadesine enjekte edilir.
Elbette, bir SQL enjeksiyonunun mümkün olabilmesi için bir web sitesinin veya uygulamanın SQL programlama dilini kullanması gerekir. Ancak bu saldırı vektörü nasıl çalışır?
Diyelim ki bir uygulama tarafından kullanılan normal bir kod satırınız var. Bir siber suçlu kötü niyetli bir SQL enjeksiyonu eklediğinde, uygulamanın veritabanına gönderdiği sorguları engelleyebilecek bir kod satırı eklenir. Bunu yaparak, veritabanından, tehdit aktörünün başka türlü erişemeyecekleri verileri görüntülemesine izin verecek şekilde yararlanılabilir.
Buradan, siber suçlu verileri doğrudan kullanmak için çalabilir veya karanlık ağda veya başka bir yerde sat. Ayrıca, hedeflenen veritabanındaki verileri değiştirebilir, ekleyebilir veya silebilir. SQL enjeksiyon saldırısının derecesine bağlı olarak çok fazla hasar verilebilir. Ödeme ayrıntılarına, sosyal güvenlik numaralarına veya diğer türde özel verilere erişilirse, birçok kişi istismar edilme riskiyle karşı karşıya kalabilir.
Öte yandan, saldırgan veritabanını önemli ölçüde değiştirmeyi başarırsa, büyük miktarda veri kalıcı olarak kaybolabilir. Sonuç olarak, SQL enjeksiyonları tek bir saldırıyla tüm veritabanlarını yok edebilir. 1998'den beri var olmalarına rağmen, günümüzde hala geçerli ve tehlikelidirler.
tarafından bulunduğu gibi Açık Web Uygulaması Güvenlik Projesi (OWASP), 2021'de bu tür bir saldırının varlığı için uygulamalar test edilirken 274.000 SQL enjeksiyonu örneği tespit edildi.
SQL Enjeksiyon Türleri
Başlıca üçü kör, bant içi ve bant dışı enjeksiyon olmak üzere birkaç farklı türde SQL enjeksiyonu vardır.
Kör (veya çıkarımsal) bir SQL enjeksiyonu, uygulama veya site tarafından saldırıya uğradığında gerçekleşir. enjeksiyon, ancak sağlanan HTTP (Köprü Metni Aktarım Protokolü) yanıtları, enjeksiyonun sonucunu içermez. SQL sorgusu. Diğer bir deyişle, saldırıya uğrayan veri tabanından hiçbir veri siber suçluya verilmez. Peki, bunun anlamı ne?
Saldırgan, kör bir SQL enjeksiyonu kullanarak hedef sunucuya veri gönderir ve ardından HTTP yanıtının kendisinin doğası aracılığıyla bir veritabanıyla ilgili belirli şeyleri ayırt edebilir. Bunun da ötesinde, HTTP yanıtıyla ilişkili faktörler, saldırganın veritabanına erişmek için daha etkili başka bir SQL enjeksiyonu oluşturmasına yardımcı olabilir.
Zaman tabanlı ve boolean olarak bilinen iki temel kör SQL enjeksiyon türü vardır. Bu iki varyant, doğaları gereği oldukça benzerdir. Hem boole hem de zamana dayalı bir SQL enjeksiyonu, bir dizi evet veya hayır yanıtlı soru gönderir, ancak ikincisi, sorgulara yanıt vermeden önce veritabanının kısa bir süre beklemesini gerektirir.
Sırada, bant içi SQL enjeksiyonları var. Bant içi SQL enjeksiyonları, operatörün saldırıyı gerçekleştirmesini ve aynı kanalı kullanarak istenen sonucu almasını sağlar. Bant içi SQL enjeksiyonları en sık kullanılanlardır, çünkü yalnızca bir kanala ihtiyaç duymaları nedeniyle gerçekleştirmesi en kolay olanlardır.
Son olarak, bant dışı bir SQL enjeksiyonunuz var. Bu, esas olarak, saldırganın tek bir kanal kullanarak saldırıyı toplam olarak gerçekleştiremediği, bant içi bir SQL enjeksiyonunun alternatif versiyonudur. Alternatif olarak, hedef sunucu sonuç sağlayacak kadar hızlı değilse, bir saldırının bant dışı bir SQL enjeksiyonuna başvurması gerekebilir.
Bu faktörler, süreci biraz daha zorlaştırır, yani başarı için hedeflenen veritabanında aktif olması için belirli özelliklere dayanması gerekir. Örneğin, saldırıya uğrayan platformda giriş temizliği bulunmamalıdır. Bu nedenle, bant içi SQL enjeksiyonları, bant dışı SQL enjeksiyonlarından çok daha yaygındır. Ama yine de oluyorlar.
SQL Enjeksiyonlarından Kaçınılabilir mi?
SQL enjeksiyonları, normal bireylerden çok işletmeler ve kuruluşlar için bir endişe kaynağıdır. Ancak bu potansiyel hedeflerin böyle bir saldırı tarafından vurulma şansını azaltmak için yapabilecekleri şeyler vardır.
Girdi temizleme, SQL enjeksiyonlarından kaçınmak için temel yaygın uygulamadır. Bu, tehlikeli karakterlerin girişini tarayan ve temizleyen bir filtreleme işlemidir. SQL kodu sterilize edilmeden önce işlenirse, SQL enjeksiyon şansı doğal olarak artacaktır.
Ek olarak, parametreleştirilmiş sorgular, SQL enjeksiyonlarından uzak durmanıza yardımcı olabilir. Bunlar, yürütme için en az bir parametre gerektiren sorgulardır. Parametrelerin uygulanması, siber suçluların başarılı bir SQL enjeksiyon saldırısı gerçekleştirmesini zorlaştırır.
Ancak bir SQL enjeksiyonunu önlemenin kesin bir yolu yoktur. Birçok siber saldırıda olduğu gibi, cihazlarınızı ve sistemlerinizi tamamen sızdırmaz tutmak neredeyse imkansızdır. SQL enjeksiyonları söz konusu olduğunda, yapabileceğiniz en iyi şey tüm girdileri sterilize etmek ve parametreleştirilmiş sorgular oluşturmaktır.
SQL Enjeksiyonları Eskidi, Ama Hala Bir Tehdit
SQL enjeksiyonları 20 yılı aşkın bir süredir var olsa da, birçok web sitesi ve uygulama için hala risk oluşturmaktadır. Gelecekte bir noktada veritabanlarınız için bir tehdit oluşturabileceğinden, bu tür bir saldırıyı akılda tutmak ve bunu denemek ve önlemek için gerekli adımları atmak iyi bir fikirdir.