SQL Injection Nedir?

SQL Injection, bir web uygulamasının güvenlik açığını sömürerek veritabanı (MySql, MSSql, Oracle gibi) üzerinde istenmeyen SQL sorgularının çalıştırılmasına izin veren bir saldırı türüdür. Bu saldırıcı sonucunda saldırgan normalde şartlarde erişememesi gereken verilere erişebilir, bu verileri silebilir veya değiştirebilir.

Web uygulamaları genellikle kullanıcı girişi veya farklı formlar (üye olma, üyelikten ayrılma gibi) aracılığıyla kullanıcıdan veri gerişi yapmasını ister ve bu verileri veritabanına işler. SQL Injection zafiyeti, kötü niyetli bir kullanıcının kullanıcı girişi veya form alanlarına özel olarak oluşturulmuş kötü amaçlı veriler göndererek, uygulamanın veritabanı sorgularını  kötüye kullanmasına olanak tanır.

SQL Injection Nasıl Yapılır?

Web uygulamalarında kullanıcı girişi, üyelik veya arama formları gibi giriş alanları, saldırganların injection yapabilecekleri hedef noktalarıdır. Siber saldırganlar, bu giriş alanlarına kötü amaçlı SQL kodlarını enjekte ederek veritabanına zarar verebilir veya hassas verilere erişebilirler.

SQL Injection saldırısının nasıl yapıldığını aşağıdaki görsel üzerinden hızlıca ve basit şekilde anlatabiliriz. Görselde yer alan web sitesinde bir “Unsubscribe”, yani üyelikten ayrılma formu görülmektedir. Normal şartlarda bu forma bir eposta adresi girilmesi lazım. Fakat saldırgan eposta adresi yerine, eposta adresine eklenmiş bir SQL sorgusu gönderir. Eğer web sitesinde söz konusu zafiyet varsa bu sorguyla erişmemesi gereken verilere erişebilir.

Siber saldırganlar, web uygulamalarında kullanılan sorgu dizinlerini inceleyerek injection yapabilecekleri açıklar bulabilirler. Özellikle kullanıcı tarafından sağlanan verileri doğrudan sorgu dizinlerine birleştiren uygulamalarda bu tür zafiyetler sık görülür.

 

Uygulamalı SQL Injection eğitimi için tıklayınız.

SQL Injection Saldırı Türleri

Union-Based Injection

Bu saldırı türünde, siber saldırgan UNION operatörünü kullanarak SQL sorgusuna başka bir sorguyu ekler. Bu, saldırganın veritabanındaki farklı tabloları birleştirmesine ve verileri ele geçirmesine olanak tanır.

Error-Based Injection

Bu saldırı türünde, siber saldırgan SQL sorgusunda bir hata oluşturarak veritabanından hata mesajlarını elde etmeye çalışır. Bu hata mesajları, saldırganın veritabanı yapısını keşfetmesine ve hassas bilgilere erişmesine yardımcı olabilir.

Blind SQL Injection

Bu saldırı türünde, saldırganın veritabanından doğrudan hata mesajları veya sonuçlar alması mümkün olmayabilir. Ancak, saldırgan mantıksal ifadeleri kullanarak doğru ve yanlış koşullarını test edebilir. Bu yöntemle, siber saldırganlar veritabanında saklanan bilgilere ulaşabilirler.

Time-Based Injection

Bu saldırı türünde, siber saldırganlar sorgunun işlem süresini etkileyerek doğru ve yanlış koşullarını test ederler. Sorgu zamanlaması üzerinden yapılan testlerle, siber saldırganlar veritabanı yapısını keşfedebilir veya veri çalma işlemini gerçekleştirebilir.

Stored Procedure Injection

Bu tür saldırıda, saldırganlar veritabanında saklanan prosedürlere SQL enjeksiyonu yaparlar. Saldırganlar, prosedürlerin davranışını değiştirerek veya ek kod ekleyerek veritabanında istenmeyen işlemler gerçekleştirebilir.

Second-Order Injection

Bu saldırı türünde, siber saldırganlar ilk etapta kötü amaçlı SQL kodu enjekte etmezler, ancak giriş verileri veritabanında saklanır ve daha sonra başka bir işlem sırasında etkinleştirilir. Bu yöntemle saldırganlar, veritabanı üzerinde daha ileri bir yetki elde edebilirler.

 

SQL Injection saldırısına Maruz Kalmış Şirketler

Sony Pictures

2014 yılında Sony Pictures Entertainment, bir SQL Injection saldırısıyla karşı karşıya kaldı. Siber saldırganlar, şirketin veritabanına erişerek hassas bilgileri ele geçirdiler ve büyük miktarda veri sızdırdılar. Bu saldırının ardında politik ve finansal nedenler olduğu düşünülmektedir.

Heartland Payment Systems

Büyük bir ödeme işleme şirketi olarak bilinen Heartland Payment Systems 2008 yılında bir SQL Injection saldırısına maruz kaldı. Siber saldırganlar, şirketin ödeme sistemleriyle ilişkili veritabanına erişerek milyonlarca kredi kartı bilgisini çaldılar.

Yahoo

2012 yılında  Yahoo’nun Yahoo Voices adlı bir bölümüne yapılan  saldırı sonucunda, siber saldırganlar 450.000’den fazla kullanıcının kullanıcı adı ve şifresini elde ettiler.

Equifax

Equifax, 2017 yılında SQL injection saldırısı sonucunda milyonlarca kişinin kişisel verilerinin tehlikeye girdiği bir güvenlik ihlali yaşadı.

TalkTalk

İngiltere merkezli telekomünikasyon şirketi TalkTalk, 2015 yılında gerçekleşen bir SQL injection saldırısına maruz kaldı. Siber saldırganlar, TalkTalk’ün web sitesine  saldırı düzenleyerek müşteri veri tabanına eriştiler. Saldırı sonucunda, 157.000’den fazla müşterinin kişisel bilgileri (adresler, e-posta adresleri, kredi kartı bilgileri vb.) tehlikeye girdi.

SQL Injection Saldırısı Nasıl Önlenir?

Injection saldırılarından korunmak için aşağıdaki önlemlerin alınması gerekmektedir:

Parametre Doğrulama ve Filtreleme

Giriş alanlarından veya form verilerinden gelen parametreleri doğrulayın ve filtreleyin. Bu, parametrelerin türünü, uzunluğunu ve geçerli değerlerini kontrol etmek için giriş doğrulama tekniklerini kullanmanız gerekir.

Parametre Bağlama veya Hazır Sorgular Kullanma

SQL sorgularını dinamik olarak oluştururken parametre bağlama veya hazır sorgular tekniğin kullanın. Bu, verilerin sorgu metnine doğrudan birleştirilmesi yerine parametre olarak tanımlanmasını sağlar. Parametre bağlama veya hazır sorgular, SQL Injection zafiyetinin ortadan kalkmasını sağlar.

Uygun Kodlama

Güvenli yazılım geliştirme ilkelerine uygun olarak kod yazın. Veritabanı sorgularını oluştururken parametre bağlama yöntemlerini kullanmak, kullanıcı tarafından sağlanan verilerin güvenli bir şekilde işlendiğinden emin olmanızı sağlar.

Minimum Yetkilendirme

Web uygulaması üzerinden veritabanına erişim sağlayan kullanıcı hesaplarının minimum yetkilere sahip olmasını sağlayın. Bu, siber saldırganların veritabanı üzerinde istenmeyen işlemler gerçekleştirme olasılığını azaltır. Her bir kullanıcı hesabına sadece ihtiyaç duyulan yetkileri verin.

Güvenlik Duvarı (Web Application Firewall – WAF)

WAF, SQL Injection gibi yaygın saldırıları algılamak ve engellemek için kullanılabilir. WAF, zararlı SQL sorgularını tanımlamak için belirli kalıpları veya imzaları tarama yapabilir ve saldırıları önleyici önlemler alabilir.

Güncel ve Güvenli Yazılımlar

Kullanılan web uygulaması, veritabanı sistemleri ve diğer bileşenlerin güncel ve güvenli sürümlerini kullanın. Yazılım güncellemeleri genellikle güvenlik açıklarını düzeltir ve saldırılara karşı daha güçlü koruma sağlar.

 

Güvenli yazılım geliştirme eğitimlerimizle ilgili daha detaylı bilgi için lütfen iletişime geçin.