SQL Injection Nedir ve Nasıl Yapılır
Eğer web sitenizin güvenliği yeterli seviyede değilse, bir siber saldırgan SQL injection saldırısıyla web sitenizin kontrolünü ele geçirebilir. Peki, SQL injection nedir ve saldırganlar SQL açık bulma işini nasıl yapar? Daha da önemlisi, bu güvenlik açığı nasıl engellenir? Aşağıda bu soruların cevaplarını bulabilirsiniz.
SQL Nedir?
SQL injection örnek uygulamalarına geçmeden önce temel bazı bilgiler verelim. SQL bir kodlama dilidir ve DBMS (Database Management Systems – Veri Tabanı Yönetim Sistemleri) tarafından kullanıcı sorguları ile bir veri tabanı arasındaki iletişimi gerçekleştirmek için kullanılır. Bir örnek vererek izah edecek olursak;
- Kullanıcı bir web sitesinde belirli bir anahtar sözcük için arama yapar.
- Bu sözcük için bir SQL dizesi (string) oluşturulur.
- Bu dize veri tabanına gönderilir ve DBMS tarafından okunur.
- DBMS kodlama komutlarını tanır ve istenilen verileri çağırır.
- Aranan veri, kullanıcıya “geri döner” ve ekranında görüntülenir.
SQL Injection Nedir?
SQL, kodlama komutları için tanımlanabilir İngilizce sözcükleri kullanır. Bir web sitesi yeterli düzeyde korunmamışsa, bir siber saldırgan kendi SQL kodlama komutlarını yukarıda izah ettiğimiz işleyişin içerisine “enjekte edebilir” ve bu sayede veri çalabilir. Siber saldırganlar, SQL injection kodları içeren dizeler oluşturur ve DBMS bu dizelerdeki komutları okuduğu zaman, istenilen şeyi yerine getirir. Böylelikle, bir siber saldırgan, örneğin DBMS’i gizli kalması gereken bilgileri göndermeye “ikna edebilir”. SQL injection nedir sorusunun en basit cevabı budur.
Temel SQL Injection Riskleri Nelerdir?
Bir SQL injection örnek uygulaması verecek olursak, siber saldırgan bu yöntemle çevrimiçi bir alışveriş sitesinin veri tabanında kayıtlı kullanıcı adlarına ve şifrelerine ulaşabilir. Üstelik bu çok zor bir iş de değildir: Web sitesinin güvenlik protokolleri güncel değilse, saldırgan basitçe arama kutusuna SQL injection kodları yazarak oluşturulan SQL dizesine bunların dâhil edilmesini sağlayabilir.
Pratik bir örnek olarak UNION komutunu gösterebiliriz. Bu komut, asıl sorguya bir dizi “alt-sorgu” eklemek için kullanılabilir. Bu alt-sorgular, bir veri tabanını arama sonuçlarını görüntülerken ek bilgiler de göstermeye zorlayabilir. Bu yöntemi kullanan bir siber saldırgan, müşterilerin epostalarının, kullanıcı adlarının ve şifrelerinin saklandığı tablolara erişim elde edebilir. Böyle bir saldırı sonucunda yönetici yetkilerine sahip bir hesabın ele geçirilmesi çok uzun sürmez. Bu hesap ele geçirildiğinde ise, siber saldırgan web sitesi üzerinde tam bir kontrole sahip olabilir. Web sitesi yeterli seviyede korunmuyorsa, bir siber saldırganın SQL açık bulma yöntemiyle ele geçirebileceği verilerin bir sınırı yoktur. Veri tabanında kayıtlı olan her türlü bilgiye ulaşılabilir. Bu saldırı için bir SQL injection programı kullanılabileceği gibi, manuel SQL injection yapmak da mümkündür.
SQL Injection Nasıl Engellenir?
Aşağıdaki temel tavsiyeler hem SQL injection programı ve hem de manuel SQL injection saldırılarına karşı güvenliğinizi artırmanıza yardımcı olacaktır. Ancak %100 güvenlik diye bir şeyin olmadığını unutmamanız gerekir; web sitenizin daima en güncel güvenlik protokollerini kullandığından ve gerektiği gibi korunduğundan emin olun.
- Verileri Ayırın. Tüm verilerin merkezi tek bir noktada toplanması, SQL saldırılarından çok daha fazla etkilenilmesine neden olacaktır. Yukarıda verdiğimiz çevrimiçi mağaza örneğinde, hassas kullanıcı verileri ürün tablolarıyla aynı veri tabanında kayıtlı olduğu için saldırı başarıya ulaşabilmiştir. Farklı türde verileri farklı veri tabanlarına kaydetmek, yani verileri birbirinden ayırmak, SQL saldırılarının vereceği hasarı minimum düzeye indirmeye yardımcı olur.
- Ön Tanımlı Beyanlar Hazırlayın. Ön tanımlı beyanlar hazırlamak, SQL injection saldırılarını önleyebilir. Yüksek riskli bir web sitesi, her kullanıcı sorgusu için yeni bir dize oluşturur. Bu, siber saldırganlara bu dizeye kendi kodlarını eklemeleri için bir fırsat tanır. Web sitenizi önceden hazırlanmış SQL şablonlarını sabit değerlere sahip olacak ve anahtar kelimenin normalde görüneceği yere bir soru işareti ekleyecek şekilde kodlarsanız, bu riskten kaçınabilirsiniz. DBMS, soru işareti olan yere arama kutusundaki veriyi koyacak şekilde programlanabilir ancak sorgunun kendisi önceden oluşturulacaktır. Ön tanımlı beyanlar sayesinde, siber saldırganlar dizeye yeni kodlar ekleyemez.
- Veri Girişi Doğrulaması Kullanın. Web sitenizin backend’ine veri giriş doğrulaması ekleyerek yalnızca belirli sözcük ve karakterlerin kabul edilmesini sağlayabilirsiniz. Bu bir tür “beyaz liste” korumasıdır. Bir siber saldırgan kötücül bir kodlama komutunu dizeye eklediğinde, sistem bu giriş verisini kayıtlı listedeki izin verilen komutlar ile karşılaştıracaktır. Eğer girilen komutu listede bulamazsa kodu çalıştırmayacak ve basit bir “sonuç bulunamadı” mesajı görüntüleyecektir. Bu beyaz listeyi yeni aranabilir öğeler veri tabanına eklendiğinde güncellemek de mümkündür.