SQL İnjection


 

Sql nedir?

SQL Injection ; bir web uygulamasındaki SQL sorgularına dışarıdan müdahale ile yeni komutlar ekleyerek yapılan bir saldırı yöntemidir. 2000`li yıllardan beri etkili bir şekilde kullanılan bu saldırı yöntemi saldırganın veritabanını yönetmesini sağlar.

Başka bir deyişle  bilgisayar korsanlarının tetiklediği sorguyu başarıyla çalıştıran dinamik SQL ifadelerini zehirlediği bir saldırı türüdür. Örneğin, bir saldırgan site veritabanınıza erişebilir ve herhangi bir tabloyu silebilir.

Genellikle SQL Injection, kötü tasarlanmış web uygulamalarından kaynaklanır. Bu nedenle saldırganlar, SQL ifadelerinden yararlanarak ve kötü niyetli SQL kodlarını uygulayarak bundan yararlanır. Bazen saldırganlar, sunucunun veya arka uç altyapısının güvenliğini tehlikeye atabilecek bir  saldırı yükseltebilir veya hizmet reddi saldırıları gibi başka saldırılar gerçekleştirebilir.


Saldırıları Türleri

Uzun yıllar OWASP TOP 10 listesinin başında yer alarak en tehlikeli saldırı türü seçilmiştir.

Union Based SQL Injection

En az iki “SELECT” sorgusunu tek bir sorguda birleştirerek yapılan saldırı yöntemidir. Yapılan istek sonrasında dönen HTTP yanıtı saldırgan tarafından kullanılabilecek veriler içerebilir.

Blind SQL Injection 

Blind SQL Injection, genellikle diğer  saldırı türlerinden daha karmaşık ve gerçekleştirilmesi daha zordur. Bu saldırıda, hedeflenen kurban genel hata mesajları aldığında bilgisayar korsanları bir saldırı gerçekleştirir.

Veri tabanından bilgi aldığı için diğer  saldırılarından farklıdır. Örneğin bilgisayar korsanları doğru veya yanlış sorular için veritabanını sorgular ve daha sonra alınan cevaba göre cevap belirlenir. Son olarak, zamana dayalı bir saldırı olduğunda bir sunucu yanıtı almak için zaman alınır.

Boolean Based SQL Injection

Veritabanı üzerinden tam sorgu sonuçları ve kritik bilgiler döndüren hata mesajları kullanır. Ayrıca bu yöntem aynı zamanda bir web uygulamasının veya web sitesinin savunmasız olup olmadığını öğrenmek ve kötü niyetli ve zararlı sorguları yeniden yapılandırmaya yardımcı olan diğer bilgileri bulmak için de kullanılır.

Time-Based SQL Injection

Veritabanına yapılan isteğin saniye cinsinden belirlenen sürede içerisinde tepki vermesini bekleyerek yapılansaldırı yöntemidir.Saldırgan, veri tabanının yanıt vermesi için geçen süreyi, bir sorgunun doğru mu yanlış mı olduğunu görebilir.

Benzer şekilde, bu zamana saldırıları, Blind  saldırısı sırasında Boolean Based  yöntemlerle birlikte hedeflenen web uygulamalarında veya web sitelerinde güvenlik açıklarının olup olmadığını belirlemeye çalışırken saldırganlar tarafından yaygın olarak kullanılır.

SQL Injection Araçları

  • SQLMap – Otomatik SQLi ve Veritabanı Devralma Aracı
  • jSQL Injection – Otomatik SQLi için Java Aracı
  • BBQSQL – Bir Blind SQLi Sömürü Aracı
  • NoSQLMap  – Otomatik NoSQL Veritabanı Yönetimi
  • Whitewidow – SQL Güvenlik Açığı Tarayıcısı
  • DSSS – Küçük SQLi Tarayıcı
  • Blind-Sql-Bitshifting – Bitshifting ile Blind SQLi
  • Leviathan – Geniş Kapsamlı Kitle Denetim Araç Seti
  • Blisqy – HTTP Başlıklarında Zamana dayalı Blind SQL yararlanma (MySQL/MariaDB)

Korunma Yöntemleri ?

  • Veritabanlarınızı güncel tutun.
  • Önemli verilerin düz metin olarak saklanmasından kaçının
  • Dinamik SQL kullanmamaya özen gösterin.
  • Web uygulaması güvenlik duvarı (WAF) kullanın.
  • Kullanıcı girdilerini direk göndermek yerine filtreden geçirerek gönderin.
  • Hata mesajlarının görüntülenmesini engelleyin.
  • Veritabanı izin ve ayrıcalıklarını sınırlayın.
  • Düzenli olarak güvenlik taraması yapın ve güncel zaafiyetleri kontrol edin.
  • Güvenli yazılım geliştirme eğitim ve seminerlerine katılın.
  • Yapılan kötü amaçlı sorguları loglayın ve kara liste oluşturun.
  • Düz sorgular yerine parametleri sorgular kullanın.

Teknoloji var oldukça hayatımızda olacak SQL injection saldırılarına karşı koruma sağlamak öncelikle güvenli kod geliştirme ve farkındalık eğitimleri ile başlamalıdır. Her ne kadar güvenli olduğunu düşündüğümüz uygulamalar geliştirsekte bunun %100 mümkün olmadığı değiştirilemez bir gerçektir. 3. bir göz olarak kritik uygulamalarımızı korumak için Web Application Firewall kullanmak ve belirli aralıklarla sızma testi yaptırmak güvenlik seviyemizi arttırmak için faydalı olacaktır.

Ayrıca web uygulama güvenliği için geliştirilmiş olan yazılımlar sayesinde de  güvenlik seviyelerini test edebilirsiniz.


SQL Injection Nasıl Çalışır?

SQL injection saldırısıSQL injection yöntemi, web sitenizdeki herkese açık olarak sunulan giriş, iletişim gibi formlarda etkilidir. Kodlaması yanlış ya da eksik yapılan formlarda girilen bir metnin veya sorgu dizisinin, yabancı birisi tarafından veri tabanına yetkisiz erişim imkânı sağlar. Web sitenizde bulunan bu tarz formlar bu şekilde bir saldırıya açıktır. Bu sayfaların güvenliğini önemsemelisiniz. Bu sayfalardaki en ufak bir zafiyet, şirketiniz için geri dönülemez veri ihlallerine sebep olabilir.

2020 yılında milyonlarca üyesi olan ücretsiz resim stok sitesi Frepik kullanıcılarının verileri SQL injection hack yöntemiyle çalındı. Şirket 8 milyon kullanıcının verilerinin çalındığını, verilerin arasında yaklaşık 3,5 milyon kullanıcının şifresinin olduğunu bildirdi. KOBİ ya da kurumsal bir firma olun, böyle bir durum yaşamak ister misiniz?

Bu konuyu SQL injection örnek sorgular ile daha iyi anlayabilirsiniz. Kullanıcı adı ve şifre ile oturum açması sağlanan bir uygulama giriş sayfanız var diyelim. Burada bir kullanıcının “ahmet” kullanıcı adı ile birlikte “ahm.135” şifresini kullanarak uygulamaya giriş yaptığını varsayın. Bu durumda uygulama aşağıdaki sorguyu sorup, doğru cevap alırsa kullanıcıya giriş izni verir.

SQL injection örneği 1

Bir hacker, bu sorgudaki parola sorgusunu kaldırarak giriş yapmayı dener. Bu şekilde veri tabanına sızma girişiminde bulunur. Oturum açma ekranındaki POST isteğini aşağıdaki sorguyla düzenleyip gönderirse veri tabanına yönetici rolüyle erişir.

SQL injection örneği 2

Buna benzer başka SQL injection örnek sorguları da yapılarak veri ihlalleri ile karşı karşıya kalabilirsiniz. Örneğin bir e-ticaret sitenizde filtreleme esnasında aşağıdakine benzer bir sorgu döner.

SQL injection örneği 3

Saldırgan bu sorgunun yanına UNION komutunu ekleyerek farklı tablolardan veri çekmeye çalışır.

SQL injection örneği 4

Gördüğünüz gibi web uygulamanızda SQL injection açığı varsa sistemde kayıtlı kullanıcı adları, şifreler ve diğer kişisel veriler bu şekilde kolay bir şekilde erişime açık olur.



Yorumlar