Mod Security Kurulumu
Mod_Security web uygulamalarının güvenliğinin sağlanmasında kullanılabilecek bir açık kaynak kodlu saldırı önleme sistemidir.Apache ye bir modül gibi eklenip çalıştırılabilir.Mod_security kullanımının amacı web uygulamalarını bilinen ve bilinmeyen saldırı yöntemlerine karşı korumaktır.Bu yönüyle ids sistemlerine benzemektedir http trafiğini izleyip bunu verilen kurallar doğrultusunda yorumlayabilmektedir.İds sistemelerinden farkı bu saldırıları önleyebilmektedir.Sunucu ile kişi arasında bir sunucu uygulamalarının güvenlliğini sağlayan firewall görevi üstlenir gelen istekleri belirlenen kurallar dahilinde yorumlayarak gerekli işlemi gerçekleştir.
Mod_Security’nin Yetenekleri
-
* Slash karakterleri url lerden silinir
*Null-bytes (%00) lar silinir
* URL şifreli karakter koruması* URL encoding onaylaması
* Unicode encoding onaylaması
* Shellcode koruması* Her siteye ayrı kural koyabilme imkanı sağlar
* Headerların analiz eder
* Cookieleri analiz eder
* Çevre değişkenlerini analiz eder
* Sunucu değişkenlerini analiz eder
* Sayfa değişkenlerini analiz eder
* Post isteklerini analiz eder
* Script değişkenlerini analiz ederYapılabileceği Eylemler
* İsteğin 406 status kodu ile geri çevrilmesi
* İsteğin yönlendirilerek geri çevirilmesi
* İsteklerin loglanması
* Kurallnrın değiştirilmesi
* Kural atlama
* Belirli bir süre istek dışı kalma* Sunucu tarafından dosya yüklenmesini engelliyebilme
* Yüklenen dosyaların kontrolü
* Antivirus-Firewall programlarına entegre edilebilmeDiğerleri
* Sunucunuzun tanımlanma bilgisini değiştirir.
* Chroot kullanım kolaylığı getirir.
* Kendi log dosyasını oluşturur .
*Kendi kurallarınızı oluşturabilirsiniz.
Dafa fazla bilgiyi kendi sitesinden alabilirsiniz .
http://www.modsecurity.org/
ve 39 sayfalık kullanım klavuzu
http://www.modsecurity.org/documentation/modsecurity-manual.pdf
Kurulum Adımları
1.)Dosyayı sunucuya indiriyoruz
wget http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz
2.)Sıkıştırılmış arşiv dosyasını açıyoruz.
tar zxvf modsecurity-1.8.7.tar.gz
3.)Web sunucusu olarak Apache 1.x kullanıyorsanız Apache1 klasörüne giriyorsunuz.
cd modsecurity-1.8.7/apache1
3.)Web sunucusu olarak Apache 2.x kullanıyorsanız Apache2 klasörüne giriyorsunuz.
cd modsecurity-1.8.7/apache1
4.)Mod_security’ yi bir modül olarak derliyoruz.
/etc/httpd/bin/apxs -cia mod_security.c
5.)httpd.conf dosyamızı olabilecek aksaklıklara karşı yedekliyoruz.
cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf-yedek
6.)Apache ayar dosyasını açıyoruz
Kod:
7.)Apache 1.x için AddModule mod_security.c yazan kısımı httpd.conf dosyası içinde buluyoruz altına aşağıdaki kural zincirini ekliyoruz
Kod:
# Turn the filtering engine On or Off
SecFilterEngine On
SecServerSignature "Apache"
# using the Unicode encoding. Otherwise it may interfere with
# the normal Web site operation.
SecFilterCheckUnicodeEncoding Off
# can be turned On of Off on the per-server or
# on the per-directory basis. "On" will log everything,
# "DynamicOrRelevant" will log dynamic requests or violations,
# and "RelevantOnly" will only log policy violations
SecAuditEngine RelevantOnly
SecAuditLog logs/audit_log
SecFilterScanPOST On
SecFilterDefaultAction "deny,log,status:406"
# SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$"
# Require Content-Length to be provided with
# every POST request
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"
SecFilterForceByteRange 1 255
SecFilter "\.\./"
SecFilter "<[[:space:]]*script"
SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from"
# SecFilter /bin/
SecFilter /dev/
SecFilter /etc/
SecFilter /initrd/
SecFilter /lib/
SecFilter /lost+found/
# SecFilter /misc/ vbulletinin bir dizini o yüzden bütün vbulletin kullanıcılarına 406 veriyor
SecFilter /mnt/
SecFilter /proc/
SecFilter /root/
SecFilter /sbin/
# SecFilter /scripts/
# SecFilter /tmp/
# SecFilter /usr/
SecFilter /usr/local/apache/
SecFilter /usr/local/cpanel/
SecFilter /usr/local/mysql/
SecFilter /var/
SecFilter /bin/gcc
SecFilterSelective THE_REQUEST "/bin/ps"
SecFilterSelective THE_REQUEST "ps\x20"
SecFilter "wget"
SecFilter "uname\x20-a"
SecFilterSelective THE_REQUEST "/usr/bin/id"
# WEB-ATTACKS id command attempt
SecFilterSelective THE_REQUEST "/bin/kill"
SecFilterSelective THE_REQUEST "/usr/bin/chsh"
SecFilter "tftp\x20"
SecFilterSelective THE_REQUEST "/usr/bin/gcc"
SecFilter "gcc\x20-o"
SecFilter "bin/tclsh"
SecFilter "tclsh8\x20"
SecFilterSelective THE_REQUEST "bin/nasm"
SecFilter "nasm\x20"
SecFilter "perl\x20"
SecFilter "traceroute\x20"
SecFilterSelective THE_REQUEST "/bin/ping"
SecFilter "nc\x20"
SecFilter "nmap\x20"
SecFilterSelective THE_REQUEST "/usr/X11R6/bin/xterm"
SecFilter "\x20-display\x20"
SecFilter "lsof\x20"
SecFilter "rm\x20"
SecFilterSelective THE_REQUEST "/bin/ls"
SecFilter "/etc/shadow"
SecFilterSelective THE_REQUEST "\.htgroup"
SecFilterSelective THE_REQUEST "/rksh"
SecFilterSelective THE_REQUEST "/bash" log,pass
SecFilterSelective THE_REQUEST "/zsh"
SecFilterSelective THE_REQUEST "/csh"
SecFilterSelective THE_REQUEST "/tcsh"
SecFilterSelective THE_REQUEST "/rsh"
SecFilterSelective THE_REQUEST "/ksh"
SecFilterSelective THE_REQUEST "/\.history"
SecFilterSelective THE_REQUEST "/\.bash_history"
# (and you don’t need it anyway)
SecFilterSelective HTTP_Transfer-Encoding "!^$"
SecFilterSelective ARG_PHPSESSID "!^[0-9a-z]*$"
SecFilterSelective COOKIE_PHPSESSID "!^[0-9a-z]*$"
SecFilter "chr\(([0-9]{1,3})\)" "deny,log"
SecFilterSelective THE_REQUEST "wget "
SecFilterSelective THE_REQUEST "lynx "
SecFilterSelective THE_REQUEST "scp "
SecFilterSelective THE_REQUEST "ftp "
SecFilterSelective THE_REQUEST "cvs "
SecFilterSelective THE_REQUEST "rcp "
SecFilterSelective THE_REQUEST "curl "
SecFilterSelective THE_REQUEST "telnet "
SecFilterSelective THE_REQUEST "ssh "
SecFilterSelective THE_REQUEST "echo "
SecFilterSelective THE_REQUEST "links -dump "
SecFilterSelective THE_REQUEST "links -dump-charset "
SecFilterSelective THE_REQUEST "links -dump-width "
SecFilterSelective THE_REQUEST "links http:// "
SecFilterSelective THE_REQUEST "links ftp:// "
SecFilterSelective THE_REQUEST "links -source "
SecFilterSelective THE_REQUEST "mkdir "
SecFilterSelective THE_REQUEST "cd /tmp "
SecFilterSelective THE_REQUEST "cd /var/tmp "
SecFilterSelective THE_REQUEST "cd /etc/httpd/proxy "
</IFMODULE>
7.) Apache 2.x için LoadModule security_module modules/mod_security.so yazan kıısmı bulup Apache 1.x için eklediğimiz yukarıdaki kural serisini ekliyoruz.
8.)Http sunucumuzu yeniden başlatıyoruz herhangi bir sorunla karşılaşırsanız yukarıdkai adımları kontrol etmelisiniz.
service httpd restart
9.)Eklediğiniz kuralların hehrangi bir soruna yol açıp açmadığını log dosyasına bakarak anlayabilirsiniz
cat /etc/httpd/logs/audit_log
10.)Mod_security yi kapatmak isterseniz Apache 1.x için AddModule mod_security.c yazan kıısmın başına bir # işareti koyun ; Apache 2.x için LoadModule security_module modules/mod_security.so yazan kısımın başına # koyun.
Bu makalede verilmiş olan kural ile hiç bir sorun yaşamayacaksınız ama istiyorsanız daha etkili kuralları deneyebilirsiniz.Fakat bu kurallar bir çok scriptin işleyişini bozabilir
http://modsecrules.monkeydev.org/index.php
http://www.gotroot.com/downloads/ftp/mod_security/rules.conf