ModSecurity ile Path Traversal Açığını Engelleme

ModSecurity ile web güvenlik açıklarının engellenmesi hakkındaki yazı dizimizin bu bölümünde ModSecurity kullanarak path traversal (directory traversal) açığının nasıl engellenebileceğini ele alıyoruz. Oldukça eski ve bilinen bir açık türü olan path traversal hala mevcut ola, sayısız modern web uygulamasını etkileyen ve engellenmesi de çok zor olmayan bir web güvenlik açığıdır.

 

Path Traversal (Directory Traversal) Nedir?

Web uygulamalarında kullanıcıdan alınan girdinin web kök belge dizinini aşıp bir üst dizine sıçrayarak veya üst dizinlerde gezinerek sisteme ait dosyalarda okuma veya yazma işlemi yapması şeklinde sonuçlanan bir web uygulama güvenlik açığıdır. Path traversal zafiyeti için “relative path traversal”, “absolute path traversal”, “local file inclusion (LFI)” ve “remote file inclusion (RFI)”ı da içeren bir zafiyet ailesidir diyebiliriz.

Yazı dizimizin bu bölümünde ModSecurity ile path traversal açığının nasıl engellenebileceği üzerinde duracağız. Bu yazıda OWASP ModSecurity CRS kural setleri ve High-Tech Bridge (ağırlıklı olarak) kaynakları referans olarak alınmıştır. Path traversal hakkındaki teknik detaylar için BTRisk Blog‘taki yazıyı inceleyebilirsiniz.

 

— BÖLÜM 4: ModSecurity ile Path Traversal Açığını Engelleme —

ModSecurity CRS’in “40_generic_attacks.conf” ile “42_tight_security.conf” (paranoyak mod kural seti) setlerini kullanarak klasik anlamdaki path traversal açıkları engellenebilmektedir. Yalnız paranoyak moddaki kural seti çok sıkı olduğundan çok fazla “false-positive” oluşturabilmektedir. Bununla birlikte “absolute path traversal” türündeki path traversal varyasyonları ModSecurity ile başarılı bir şekilde engellenebiliyor.

Alttaki örnek zafiyetli kod incelendiğinde:

menu.php

<?
echo file_get_contents(“/var/www/document_root/”.$_GET['file']);
?>

Eğer bu script’in meşru kullanımında bir kullanıcının /help ya da /docs altındaki HTML sayfalarını okuyacağı beklenirse, bu niyet alttaki URL payload’u ile kolayca istismar edilmeye açık hale gelecektir:

http://host/menu.php?file=admin/config.php

Bu haliyle kötü niyetli saldırganın web uygulamasına ait hassas verilerin bulunduğu dosyalara erişimi ModSecurity CRS’in klasik kural setleri ile engellenemeyecektir. Bu yüzden buna özel spesifik ModSecurity kuralı yazmak, bu spesifik saldırı vektörünü engellemede en etkili yol olarak öne çıkar. Bunun için de en az “false-positive” doğuracak alttaki özel kuralı kullanmak gerekecektir:

mod_security_custom_rules.conf

SecRule REQUEST_FILENAME "/menu.php" "phase:2, t:none, t:normalisePath, t:lowercase, t:urlDecodeUni, chain, deny, log, id:1051"
SecRule ARGS_GET:file "!^((help)|(docs))\/[a-z0-9]+\.html$" "t:none, t:lowercase"

Böylece bu kural /help ya da /docs altındaki sadece alfenümerik “.html” uzantılı olan dosyaların kullanıcı tarafından çağrılabilmesini sağlayacaktır.

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

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir