ModSecurity Neden Varsayılan Olarak Her Client Server'a Gidiyor
OWASP Core Rule Set (CRS) ile eşleştirilmiş ModSecurity, setup ettiğim her server'a, üzerinde eventually hangi application'ın çalışacağı hakkında çok bir şey bilmeden önce gidiyor. Bu backwards gibi gelebilir, henüz orada olmayan bir application için bir web application firewall'u nasıl configure edersiniz, ama asıl nokta da bu. CRS spesifik bir application'a tuned değil, her server'a automated saldırıların gönderdiği request türlerine tuned, bir yerde, bir şeyin bunlara vulnerable olabileceği assumption'ıyla.
Gerçekte ne yakalıyor
Logging'i açık şekilde herhangi bir web server'ı çalıştırın, ve actual application'la hiçbir ilgisi olmayan sürekli bir request stream'i göreceksiniz: WordPress çalıştırmayan bir server'da /wp-admin'e erişim attempt'leri, query parameter almayan sayfaların query parameter'larında SQL injection payload'ları, static file path'lerine karşı path traversal attempt'leri (../../etc/passwd), hiç install edilmemiş software'deki vulnerability'leri exploit etmek için tasarlanmış payload'lı request'ler. Bunların hiçbirinin bir problem olmak için başarılı olması gerekmiyor, en iyi ihtimalle noise, en kötü ihtimalle, install edilmiş bir software bile aradıkları şeyle eşleşirse gerçek bir risk.
CRS spesifik application vulnerability'lerini değil, bunların ardındaki pattern'leri tanıyor. Bir SQL injection attempt'i, custom bir PHP app'i, bir WordPress plugin'i, ya da hiç database'i olmayan static bir site (burada zaten fail edecek, ama yine de bilinmeye değer bir probe) hedeflesin, structural olarak bir SQL injection attempt'i gibi görünüyor. Application-specific bir configuration olmadan kullanışlı olmasını sağlayan bu structural recognition.
Önce, her zaman, detection mode
İnsanların ModSecurity'yi tamamen kapatmasının en yaygın sebebi, legitimate trafiği bloklayan bir false positive, genelde bir customer'ın input'u bir rule pattern'iyle eşleştiği için formu submit edemediğinde fark ediliyor. Bunun fix'i ModSecurity'yi disable etmek değil, önce detection mode'da deploy etmek:
# modsecurity.conf
SecRuleEngine DetectionOnly
Bu modda, ModSecurity gerçekte hiçbir şeyi bloklamadan, bloklayacağı şeyi logluyor. Real traffic'e karşı bir iki hafta bu modda çalıştırmak, blocking mode'a geçmeden önce targeted exclusion rule'larıyla adresslenebilecek, o spesifik application için tüm false positive'leri ortaya çıkarıyor:
SecRuleEngine On
Bu iki adımlı rollout, "ModSecurity bir customer'ı blokladı ve tamamen disable edildi, server'ı hiç WAF'siz bıraktı" ile "ModSecurity'nin birkaç tuned exception'ı var ve aktif olarak her şeyi blokluyor" arasındaki fark.
Exclusion'ları tune etmek normal, bir failure değil
CRS bir "paranoia level" setting'iyle geliyor, yüksek level'lar daha fazlasını yakalıyor ama daha fazla false positive üretiyor. Default level mantıklı bir başlangıç noktası, ve bunun üzerinde gereken her exclusion, protection'ın geniş kategorilerini disable etmek yerine, genelde spesifik bir rule ID'sine, spesifik bir URL path'i için narrow scope'lu oluyor:
SecRuleRemoveByIdWithMsg "rule message text" "specific-form-endpoint"
Bir application'ın spesifik quirk'leri için bir avuç exclusion (örneğin, legitimate olarak HTML-benzeri content submit eden bir rich text editor) tamamen normal ve server'daki her şey için olan protection'ı undermine etmiyor. Hedef sıfır exclusion değil, gerçekten açık olup blocking yapan, bir application'ın gerçekten ihtiyaç duyduğu küçük sayıda exception'lı bir WAF.
Performance maliyeti, alternatifinden daha küçük
ModSecurity gerçekten overhead ekliyor, her request application'a ulaşmadan önce rule set'e karşı evaluate ediliyor. Pratikte, bu overhead çoğu request için application'ın kendi processing time'ına kıyasla küçük, ve application complexity'siyle değil rule set'in boyutuyla scale ediyor. Alternatife karşı tartıldığında, sürekli baseline'daki automated probing'e karşı hiçbir generic protection'ı olmayan bir server, tradeoff onu açık tutmaktan ağır şekilde yana.
"Varsayılan olarak" neden önemli
Bunun, hangi application'ın çalışacağı kararlaştırılmadan önce her server'a gitmesinin sebebi, sunduğu protection'ın application'ı bilmeye bağlı olmaması. Bir application deploy edilip bir security review olabileceği zamana kadar, WAF'siz bir server, bir IP adresi aldığından beri onu probe eden her şeye zaten exposed olmuş. ModSecurity'ye day one'dan detection mode'da başlamak, sonra application'ın spesifik traffic pattern'leri anlaşıldığında blocking'e geçmek, "server var" ile "server'ın baseline protection'ı var" arasındaki boşluğun, birinin onu eklemeyi düşünmesinin ne kadar süreceğine bağlı olmak yerine, etkin olarak sıfır olması demek.