SQL Injection Nedir? 

İnternet siteleri üzerinden yapılan işlemlerde en büyük tehditler siber saldırılardır. Her yıl binlerce kişiye ait kişisel veriler, çok güvenli diye düşünülen sistemler üzerinden çalınır. Çalınan veriler dolandırıcılık için kullanılabileceği gibi, farklı şirketlere satışı da yapılabilir. 

SQL Injection (SQLi) 1998 yılında fark edilen, veri tabanı olan sistemlere yapılan bir siber saldırı biçimidir. Bu yöntemle veriler çalınabilir, değiştirilebilir ya da bloke edilebilir. Açık Web Uygulama Güvenliği Projesi (OWASP) Vakfı tarafından yayınlanan verilere göre güvenlik açığı bulunan sitelere yapılan saldırıların en ç1ok tercih ettiği üçüncü yöntem SQLi’dir. Büyük kuruluşlar bu saldırıya maruz kalmamak için her yıl milyonlarca dolar bütçe ayırır. 

SQL Nedir? 

SQL, sitenizde kullanılan veri tabanına erişmenizi ve işlem yapmanızı sağlayan bir araçtır. Structered Query Language’in baş harflerinin kısaltması olan SQL, Türkçeye Yapılandırılmış Sorgu Dili biçiminde çevrilebilir. Dil olarak adlandırılsa da bildiğimiz programlama dillerinin işlevini yapmaz. Daha çok veri tabanlarında kullanılan dilleri bilen ve bu dillerle konuşabilen bir alt dil olarak tanımlanabilir.

SQL, veri tabanı olan sistemlerde veri tabanaları ile etkileşim sağlayabilmek için geliştirilmiştir. Veri tabanında bulunan verilere erişimi, değiştirmeyi, sorgulamayı sağlar. Bugün, uluslararası alanda en yaygın kullanılan veri tabanları SQL ile ilişkilidir. Tablo halinde bulunan veriler, SQL ile sorgulanarak kolayca elde edilebilir, yeni kayıt açılabilir, değiştirilebilir ya da silinebilir. Veri tabanına erişim yetkileri de SQL aracılığı ile düzenlenebilir. 

SQL’in kullanıldığı veri tabanlarına aşağıdaki örnekler verilebilir:

  • Oracle
  • MySQL
  • Microsoft SQL Server
  • Microsoft Access
  • Firebird
  • IBM DB2 ve Informix
  • Progress

SQL ile ilgili ayrıntılı bilgiye buradaki yazımızdan da ulaşabilirsiniz.

SQL Injection ile ilgili detaylı bilgilere geçmeden önce, SQL’in çalışma mantığını anlamak gerekir. 

SQL Nasıl Çalışır? 

Veri tabanında bazı işlemleri gerçekleştirebilmek için SQL’de tanımlı komutlar girilir. Bu işleme kısaca sorgu denir. Sorgu sisteme girdi olarak gelir. İstenen işlemin sonucunu da çıktı olarak sunar. Kullanıcı, SQL sunucuya üç aşamada ulaşır. 

  • Ayrıştırma: Kullanıcının verdiği talimat sistem içinde sunucunun kullandığı dile çevrilerek iletilir. Talimatlarda oluşan hatalar da bu aşamada kontrol edilir.
  • Bağlama: Talimatı vermenin farklı yolları vardır. Bu aşamada, talimatın en verimli şekilde iletilebilmesi için sorgu iyileştirme yapılır. 
  • Optimizasyon: Bu aşamada sorgunun en kısa sürede sonuçlanması için optimizasyon yapılır. Sistem ilgili tüm kombinasyonları değerlendirerek sonucu en kısa sürede çıktı olarak kullanıcıya yeniden iletir. 

SQL Komutları Nelerdir? 

Bu aşamalar içinde kullanılan komutları gerçekleştirmek için en optimal diller geliştirilir. Bunlar şu şekilde sıralanabilir:

  • Veri Sorgulama Dili (DQL): Veri almak için “SELECT” komutu ile kullanılır.
  • Veri Tanımlama Dili (DDL): Veri tabanında yer alan nesnelerin yapısını oluşturmak ve değiştirmek için yapılacak işleme göre “CREATE”, “DROP”, “ALTER”, “TRUNCATE”, “COMMENT”, “RENAME” komutlarından biri ile kullanılır. 
  •  Veri İşleme Dili (DML): Verileri saklamak, değiştirmek ya da silmek için “INSERT”, “UPDATE”, “DELETE” ve “MERGE” gibi komutlar ile kullanılır.
  • Veri Kontrol Dili (DCL): Verilerle ilgili kullanıcı yetkilerini oluşturmak ya da kaldırmak için “GRANT”, “REVOKE” gibi komutlar ile kullanılır.
  • İşlem Kontrol Dili (TCL): DML komutu ile yapılan değişiklikler TCL komutu ile kontrol edilir. Burada, değişiklik yapılır ya da yapılmaz. SQL’de kullanılan komutlar “TRANSACTION”, “COMMIT”, “ROLLBACK”, “SAVEPOINT” şeklindedir. 

SQL’ın finans sektöründen, mobil uygulamalara kadar çok geniş kullanım alanı vardır. İnternet üzerinden işlem yapan nüfusun neredeyse tamamı verileri, SQL ile ilişkili veri tabanlarında saklanır. Bu anlamda SQL ile ilgili güvenlik açıkları oldukça önemlidir.

SQL Injection Nedir? 

Ayrı bir veri tabanına sahip siteler saldırıları önlemek için güvenlik duvarı kullanılır. Siber saldırı düzenleyerek verilere ulaşmak isteyenlerin temel hedefi bu güvenlik duvarlarıdır. SQL Injection (SQLi) web sitelerindeki güvenlik önlemlerini aşmayı hedefleyen dijital korsanlık yöntemlerinden biridir. Bu yöntem ile veri tabanına giriş yapılabilir. Verilerin kopyalanması, değiştirilmesi, silinmesi, yetki izinlerinin değiştirilmesi mümkün olur. Oracle, MySQL gibi SQL ile çalışan veri tabanları kullananlar, bu saldırılara oldukça açıktır.

SQLi kısaca, giriş verilerinin kullanılmasıyla yeni bir sorgu tanımlanarak yapılır. Bu sorgu girişi, daha önce kullanılan komutların işletilmesine etki eder. Bunu veri düzlemi enjeksiyonu ile yaptığı için yönteme SQL injection denmiştir. Bu yöntemle, örneğin müşterilerinize ait tüm veriler ele geçirilebilir. Bir bankada bulunan carilerin hepsi değiştirilebilir. Veri tabanınız bloke edilerek, kullanımınız engellenebilir. Bu şirketler ve kurumlar için hem maddi kayıplara hem ciddi itibar kaybına sebep olur. 

SQLi yalnızca şirketler için değil kişiler için de önemli bir tehdittir. Bu yöntemle, kredi kartı bilgilerinizin tamamı çalınabilir. Elektronik posta bilgileriniz ele geçirilerek, korsan olarak satışa sunulabilir. 

SQLi Saldırıları Örnekleri 

Uzmanlar, SQL üzerinden yapılan saldırılara 20 yıldan uzun süredir hakim olmasına rağmen, henüz bu saldırıları engellemek için sistemli bir çözüm bulunamadı. Bu saldırıların, ne kadar ciddi sonuçlar doğurduğunu anlamak için örneklere bakmak yeterli olacaktır. 

  • 2009 yılında, 7-Eleven perakende zincirinde fark edilen SQLi saldırısı ile farklı birçok şirketten 130 milyona yakın kredi kartı bilgisinin ele geçirildiği açıklandı. 
  • 2012 yılında birçok üniversiteye aynı anda yapılan SQLi saldırısı ile üniversitelerle bağlantılı 36 bin kişinin kişisel kayıtlarına ulaşılabildiği belirtildi.
  • Tesla, 2014 yılında şirket içinde yaptırdığı çalışma ile web sitesi arka planına erişebildiklerini, yetki izinlerini değiştirebildiklerini raporlandı.
  • 2018-2020 yıllarında oyun sektörüne karşı 152 milyondan fazla SQLi saldırısı gerçekleştirildiği tespit edildi. 
  • Ücretsiz resim platformu Frepik 2020 yılında kullanıcı verilerinin SQLi saldırısı ile çalındığını açıkladı. Bu yöntemle, 8 milyon kullanıcının verilerinin çalındığı belirtildi. 

SQL Injection Nasıl Gerçekleşir? 

SQLi saldırısının gerçekleşmesi için, korsanlar web sitelerini teknik anlamda ayrıntılı bir şekilde inceler. Sitede herhangi bir güvenlik açığı bulduklarında, bu açıktan içeri sızmaya çalışırlar. Giriş sağlandığında, uygulamadaki istemciye SQL sorgu girişi enjekte eder. Bu sorguyu kullanarak veri tabanının nasıl bir yapıda tasarlanmış olduğunu anlayabilir. Gizli bilgilerine ulaşabilir. Tek bir sorgu ile teker teker tüm güvenlik kapılarını aşabilir. 

SQL Injection Yolları Nelerdir? 

Sorgu enjeksiyonu farklı yollardan yapılabilir.

  • Kullanıcı girişi üzerinden yapılan enjeksiyonlar

Herhangi bir internet sitesine giriş yaptığınızda, giriş bilgileriniz bir form üzerinden veri tabanına iletilir. Eğer bu süreçte bir açık var ise saldırganlar form içinde bulunan alanlar aracılığı ile sorgu enjeksiyonu yapabilir. 

Örneğin, kullanıcı adı ile giriş yapılan bir sistemde, kullanıcı adınızı ve şifrenizi girdiğinizde sisteme şu şekilde bir form iletilir.

SELECT*FROM kullanicilar WHERE kullaniciadi=’ali’ AND sifre=’tt.12.t’ 

Saldırgan şifre sorgusunu kaldırarak çeşitli kullanıcılar üzerinden sisteme girmeye çalışır. 

  • Çerezler üzerinden yapılan enjeksiyonlar

Birçok internet sitesi çerez uygulaması kullanır. Hatta bunu yaparken kullanıcı onayını bile alır. Çerezlere izin verdiğinizde, internet sitesi bilgisayarınıza bir tanımlama dosyası bırakır. Genellikle internet siteleri bu yöntemi reklam ve pazarlama için kullanır. Bu dosyalar, kötü amaçlı yazılımlar tarafından SQL enjeksiyonu için de kullanılabilir. 

Çerezlerin nasıl kullanıldığına dair ayrıntılı bilgi almak için blog yazımızı okuyabilirsiniz. 

  • http başlıkları üzerinden SQL enjeksiyonları

Girdileri http başlıkları üzerinden kabul eden internet uygulamaları vardır. Bu uygulamalara, sorgu enjekte etmek için sahte başlıklar eklenebilir. 

Bunların dışında dolaylı olarak kullanılabilecek SQLi yolları vardır. Bu yöntemler ile sorgular uzun süre aktif olmadan kalabilir. Herhangi bir zamanda veri tabanına erişim için kullanılabilir. Tespiti en zor yöntemlerden biridir.

SQL Injection Türleri Nelerdir? 

Veri tabanına erişim için sorgu enjeksiyonun üç temel türü vardır.

  • Bant İçi SQL enjeksiyonları

Bant içi enjeksiyonlar, sistem içi işlemleri kullanarak giriş yapar. Örneğin hata tabanlı enjeksiyonlar, veri tabanı tarafından gönderilen hata mesajlarını kullanır. Sistemin hangi sorgulara hata mesajı ile dönüş yapıldığı tespit edilir. 

Bu yönteme başka bir örnek de UNION tabanlı uygulamadır. Bir alışveriş platformunda arama yaparken, sisteme aşağıdaki gibi bir form gönderilir. 

SELECT*FROM urunler WHERE category =’ELBISE’

Saldırgan bu sorgunun başına UNION ekleyerek veri tabanında bulunan farklı tablolara erişmeye çalışır. 

  • Çıkarımsal SQL enjeksiyonları 

Çıkarımsal yöntemler temel olarak veri tabanının yapısını anlamaya dayanır. Belli sorgular gönderilerek sistem çıktılarının nasıl olduğu incelenir. Örneğin, boole tabanlı enjeksiyonlarda sistemin doğru ya da yanlış olarak çıktı vereceği sorgular gönderilir. 

  • Bant Dışı SQL enjeksiyonları

Bant dışı yöntemler ise dışsal olarak sisteme giriş yapılmaya çalışılan yöntemlerdir. Tespiti daha kolay olduğu için daha az kullanılır. 

Güvenlik Açıkları Tespit Edilebilir mi? 

Diğer tüm saldırı yöntemleri gibi SQLi de güvenlik açıklarına dayanır. SQLi, diğer saldırı yollarına göre daha kolay ve kullanım potansiyeli de daha yüksektir. SQL üzerindeki güvenlik açıklarını tespit etmek de son derece hayati bir rol alır.

Güvenlik açıklarını tespitte en iyi savunma saldırıdır. Başka bir deyişle, güvenlik açığı olabilecek yerleri tespit için SQLi denenir. Bu yapay saldırılar, otomatik olarak yapılabileceği gibi geliştirilen otomatik araçlarla da yapılabilir. 

Web sitenizin güvenliğini sağlamak için kullanacağınız yöntemleri ayrıntılı olarak blog yazımızdan inceleyebilirsiniz. 

SQL Injection Nasıl Önlenir?

SQLi saldırısını önlemenin en iyi yolu, kullanıcı girdilerini önden izlemek ve herhangi bir sorgunun enjekte edilmediğinden emin olmaktır. Bunun manuel olarak denetlenmesi oldukça güçtür. Web uygulamaları için geliştirilen güvenlik duvarları ise tam olarak bu işlevi görür. Bu doğrultuda, SQL ile temas eden tüm internet sitelerinde güvenlik duvarı kullanımı önerilir. 

Bu temel yönteme ek olarak ikincil sorgulamalarla SQLi saldırıları engellenebilir. Bunlardan bazıları aşağıda sıralanmıştır: 

  • Sorgu türlerine göre parametreler belirlenebilir. Bu parametreler dışında gelişen sorgulamalar tehlikeli kabul edilir ve girişe izin verilmez.
  • SQL sorguları için aktif kullanılmasa dahi izin verilen girişler için doğrulama istenebilir. İzin listesinde olmayan girişler başarısız olur.
  • Güvenlik açığı verme olasılığı, dinamik olunan zamanlarda daha yüksektir. Bu nedenle dinamik SQL kullanmak yerine, parametre ya da sistemde daha önce kaydedilmiş saklı prosedürler kullanılabilir. 
  • Daha önce yapılan bir saldırının web sitenizi hedef almaması için, kullandığınız cihazların ve uygulamaların yeni sürümlerini takip ederek yükleyebilirsiniz.
  • Kullanıcı girişlerinde her form gönderildiğinde “ben robot değilim” doğrulamasının kullanılmasını sağlayabilirsiniz. Böylece otomatik olarak yapılan güvenlik açık sorgulamalarını önleyebilirsiniz. 
  • Genel bir güvenlik önlemi olarak çift faktörlü giriş yapılmasını sağlayabilirsiniz. 
  • Uygulamalarda kullanılan sorguları belli periyotlarla gözden geçirmelisiniz. Şüpheli sorguları takip edebileceğiniz gibi saldırıya açık durumları da tespit edebilirsiniz. NULL karakterlerin bulunduğu talimatları yeniden düzenlemelisiniz. 
  • Sistemde yer alan kullanıcıları ve rollerini de sık sık kontrol etmelisiniz. Sistemde tam yetkili olanların “yönetici”, “admin” gibi kullanıcı adlarına sahip olmadıklarından emin olmalısınız. Bu saldırganların ilk deneyeceği kullanıcı kodlarından biri olur. Kullanıcıların gerçek isimlerini kullanmamaları da kolay tahmin edilememesi açısından önemlidir.
0 Shares:
Benzer İçerikler