ModSecurity ile SQL Injection Açığını Engelleme

ModSecurity ile web güvenlik açıklarının engellenmesi hakkındaki yazı dizimizin bu bölümünde ModSecurity kullanarak SQL injection saldırlarının nasıl engellenebileceği üzerinde duracağız. SQL injection web uygulamalarında sık karşılaşılan ve en tehlikeli güvenlik açıklarından biridir. SQL injection zafiyetinin, deneyimli bir saldırgan tarafından istismar edilerek uygulamanın, sitenin, sunucunun, veri tabanının ve hatta tüm IT ortamının ele geçirilmesine kadar uzanan oldukça bereketli ve geniş bir saldırı yüzeyi vardır.

SQL Injection Nedir?

SQL Injection, herhangi bir SQL veri tabanı türüyle ilişkili olan web uygulamalarına dışarıdan gönderilen dinamik SQL sorgularına ek SQL ifadeleri iliştirmek ve veri tabanın farklı davranmasını veya hata vermesini sağlayacak fazladan parametre ve karakter enjekte etmektir. SQL Injection, web uygulamasında kullanılan kodlama dilinden veya veri tabanından bağımsız olarak veri tabanı ilişkisine sahip her türlü uygulamada bulunabilir. Buradaki sorun aslında veri tabanında değil, uygulama tarafındadır ve bu yüzden bunun geliştiricinin ilgili alanında olması gerekir.

Bu yazıda OWASP ModSecurity CRS kural setleri ile High-Tech Bridge (ağırlıklı olarak) ve SpiderLabs Blog kaynakları referans olarak alınmıştır. Ayrıca bu yazıda SQL ve SQL Injection hakkındaki detaylara girmeyeceğimizden ötürü sizleri bir önceki yazıda olduğu gibi yine internetteki diğer yararlı kaynaklara havale ediyoruz:

 

— BÖLÜM 2: ModSecurity ile SQL Injection Açığını Engelleme —

XSS önleme yazısında da bahsettiğimiz gibi ModSecurity CRS, “modsecurity_crs_41_sql_injection_attacks.conf” kural seti ile klasik SQL Injection sömürü vektörlerinin çoğunu engelleyebiliyor. Bununla birlikte bu kural setinin engellemediği SQL Injection durumları da olabiliyor. Bunun için alttaki zafiyetli koda bir göz atalım:

Bu zafiyetli kodda klasik 3 HTML parametresinde SQL Injection güvenlik açığı bulunuyor. Bu örnekte ModSecurity CRS filtrelemesini baypas edebilmek için üçüncü HTML parametresi olan “level”i istismar etmektir. Böylece kimlik doğrulama mekanizması aşılmış olacaktır. Bunun için de alttaki HTTP request’i kullanılabilir:

Bununla birlikte eğer zafiyeti biliyorsanız, ModSecurity CRS filtreleri içinde olmasına gerek kalmadan spesifik bir kural ile üçüncü parametrenin istismar edilmesini engelleyebilirsiniz. Bunun için de alttaki kurallardan yararlabilirsiniz:

Yukarıdaki sette yer alan ilk kuralda “login” ve “pass” ile cookie parametrelerindeki tek ve çift tırnak engellenirken, ikinci kuralda da “level” parametresi için rakam olmayan değerler otomatik engelleniyor. Görüldüğü üzere zafiyet tam olarak bilindiği sürece ModSecurity CRS’in hazır kurallarına bağlı kalmadan özelleştirilmiş kurallar oluşturulabiliyor. Böylece false-positive’leri de azaltmak kolaylaşıyor.

Yazı dizimizin bir sonraki bölümünde görüşmek üzere…

M. MEKİN PESEN

YAZAR:

Özel bir kurumda kıdemli bilgi güvenliği uzmanı olarak çalışan M. Mekin Pesen, Elektrik-Elektronik Mühendisliği lisans ve Bilgi Güvenliği Mühendisliği yüksek lisans diplomaları ile CISSP, ECSA, CEH ve CCSA sertifikalarına sahiptir. Kendisi siber güvenlik ve bilgi güvenliği genel başlıkları altında çeşitli konularda uzmanlaşmaktadır.
    

E-Bültene Kaydolun, Makaleler Posta Kutunuza Gelsin

Bu yazıyı başka hiçbir yerde ve şekilde yayınlayamazsınız ve/veya kullanamazsınız. Bu yazıyı kullanmanız, başka herhangi bir uyarıya gerek kalmadan her türlü hukuki sonucu daha en baştan kabul ettiğiniz manasına gelir.