Howto Apache2 mit mod-evasive(1.10.1) und mod-security(2.5.7)
ModSecurity – Webapplication Firewall
Übersicht
Mehr als 70% von allen heutigen Attacken, werden via Application Layer ausgeübt. Organisationen brauchen Hilfe ihre Systeme Abzusichern und vor böswilligen Missbrauch zu schützen. Webapplikation Firewall sind entwickelt worden um einen zusätzlichen Schutz zu gewährleisten, Angriffe aufzuspüren und abzuwehren bevor sie die Webapplikation erreichen.
Features
- HTTP Traffic Logging
- Realtime Monitoring und Attack Detection
- Attack Prevention und Just-in-Time Patching
- Negatives Security Model
- Bekannte Attacken blocken
- Positives Security Model
Mod-evasive – DDos Shield
Übersicht
Das Apache Modul mod_evasive soll den Apache gegen DDos-Angriffe schützen. Dies geschieht, indem mod_evasive die IP-Adressen des anfragenden Clients in einer internen Hash-Tabelle ablegt, und zählt, wie oft dasselbe Objekt innerhalb einer definierten Zeitspanne angefordert wird.
Wenn die Anzahl der Aufrufe einen bestimmten Grenzwert erreicht, erhält der Client eine 403 Fehlermeldung.
Funktionsweise
Das Modul basiert im Grunde auf einer Blackliste. Bei jeder Anfrage eines Clients wird diese Liste durchgegangen und wenn die Anfragen die gesetzten Werte innerhalb einer Zeitdauer erreicht haben, gibt der Apache einen HTTP-Status von 403 (Forbidden) aus. Dies passiert nun eine vorher festgelegte Dauer, die sich mit jedem weiteren Aufruf innerhalb der Sperrzeit, automatisch verlängert. Damit werden Bandbreite und Rechnerressourcen gespart. Auch ist es mittels des Moduls möglich einen Eintrag bei einem DoS ins syslog zu schreiben, eine eMail zu versenden oder per Aufruf weiterer Software zeitgleich Gegenmaßnahmen einzuleiten.
So werden auch BruteForce-Attacken aller Art über das HTTP-Protokoll erfolgreich abgewehrt oder zumindest erheblich verzögert.
Die Grenze des Moduls ist allerdings erreicht, wenn ein massiver DoS-Angriff erfolgt und die komplette Bandbreite zum Server oder die Kapazitäten der Hardware in Anspruch nimmt. Hier müssen sich weitere Gegenmaßnahmen anschließen. Mod_evasive alleine bringt in diesem Szenario sehr wenig.
Vorbereitung
benötigte Packete installieren
Als erstes müssen wir ein paar Tools installieren, sofern sie nicht schon vorhanden sind.
apt-get update
apt-get install libaprutil1 libaprutil1-dev libapr1-dev libxml2-dev libapr1 apache2-dev libcurl4-dev libcurl4-openssl-dev liblua5.1-dev
Modsecurity
modsecurity (2.5.7) herunterladen und entpacken
cd /usr/local/src
wget http://www.modsecurity.org/download/modsecurity-apache_2.5.7.tar.gz
tar xvzf modsecurity-apache_2.5.7.tar.gz
Modsecurity bauen und installieren
Nun wechseln wir in das entpackte Verzeichnis, um genau zu sein, in dessen Unteverzeichnis:
cd modsecurity-apache_2.5.7/apache2
Nun die Datei configure ausführbar machen:
chmod a+x ./configure
Für Apache2 muss zwingend apxs2 benutzt werden und nicht apxs um das Modul zu bauen! Apxs ist für Apache 1.3!
./configure --with-apxs=/usr/bin/apxs2
make
make test
make install
Modsecurity Modul konfigurieren
cd /etc/apache2/mods-available
vim mod_security2.conf
Fügt folgendes ein:
Include /etc/apache2/ruleset/*.conf
Nun müssen wir noch eine Datei erstellen um das Modul zu laden
vim mod_security2.load
Fügt folgende Zeile ein:
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so
Modsecurity Regeln kopieren
mkdir /etc/apache2/ruleset
cp -a /usr/local/src/modsecurity-apache_2.5.7/rules/* /etc/apache2/ruleset/
Modsecurity konfigurieren
Jetzt müssen wir Modsecurity so einstellen das er am anfang nicht gleich die meisten Webseiten zugriffe blockiert
Dazu öffnet ihr folgende Datei:
vim /etc/apache2/ruleset/modsecurity_crs_10_config.conf
Diese Datei ist sehr gut Dokumentiert! Liest sie aufmerksam durch und entscheidet ob ihr es benötigt. Beachtet auch die Bemerkungen!
SecRuleEngine auf DetectionOnly stellen, ansonsten werden sehr viele false Positives geblockt!
SecRuleEngine DetectionOnly
Server Signatur anpassen
SecServerSignature "Apache/Version unknown (Debian)"
Ruleset Signatur
SecComponentSignature "core ruleset/1.6.1"
File uploads konfiguration
Ich erkläre nicht alle Änderungen! Diese kann man selber in dieser Konfigurationsdatei nachlesen!
SecUploadDir /var/log/apache2/modsecurity/tmp
Logging
SecAuditEngine RelevantOnly
SecAuditLogRelevantStatus "^(?:5|4(?!04))"
SecAuditLogType Concurrent
SecAuditLogStorageDir /var/log/apache2/modsecurity/modsec_audit
SecAuditLog /var/log/apache2/modsecurity/audit.log
SecAuditLogParts "ABIDEFGHZ"
Tuning und Debugging
SecDebugLog /var/log/apache2/modsecurity/modsec_debug.log
SecDataDir /var/log/apache2/modsecurity
SecTmpDir /var/log/apache2/modsecurity/tmp
ModSecurity ist nun mal fürs erste konfiguriert.
Wie oben erwähnt wird nun lediglich geloggt, aber nicht geblockt.
Sollte alles laufen wie angenommen, kann man die SecRuleEngine auf „On“ setzen.
Modsecurity Modul laden
a2enmod mod_security2
/etc/init.d/apache2 force-reload
Testen
w3m http://deinewebseite.com/index.php?path=/etc/passwd
Output von Modsecurity überprüfen:
vim /var/log/apache2/msa/audit.log
Mit CTRL+G kann man ans ende der Datei springen.
www.deineWebseite.com 192.168.0.1 - - [09/Oct/2008:13:11:20 +0200]
"GET /index.php?path=/etc/passwd HTTP/1.1" 200 121280 "-" "-" F4jxvNWFZ@0AADs1A58AAAAD "-"
/20081009/20081009-1311/20081009-131120-F4jxvNWFZ@0AADs1A58AAAAD 0 123509
md5:dde55f154673b8f977d2af2277efdf2e
Wie man unschwer erkennen kann, wollte jemand (ich :D) die Passwd des Server auslesen via URL Injection. ModSecurity erkennt den Angriff und spukt bei SecRuleEngine „On“ einen 403 Error aus. Beim DetectionOnly Mode wird lediglich die Attacke geloggt.
Mod Evasive
Mod Evasive herunterladen und installieren
Die Installation ist einfach, entweder via Apt/Aptitude installieren oder am besten baut man das Modul für den Apache gleich selber
via apt installieren
apt-get install libapache-mod-dosevasive
via aptitude installieren
aptitude install libapache-mod-dosevasive
von Hand installieren (Version 1.10.1)
Als erstes müssen wir den Source Code fürs Modul besorgen.
cd /usr/local/src
wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
tar xvzf mod_evasive_1.10.1.tar.gzcd mod_evasive
apxs2 -iac mod_evasive20.c
Das Modul ist nun unter /usr/lib/apache2/modules installiert!
Mod Evasive konfigurieren
cd /etc/apache2/mods-available
vim mod_evasive.conf
Fügt folgendes ein:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotify noc@hack2learn.org
</IfModule>
Nun müssen wir noch eine Datei erstellen um das Modul später laden zu können
vim mod_evasive.load
Fügt folgende Zeile ein:
LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so
Mod Evasive Modul laden
a2enmod mod_evasive
/etc/init.d/apache2 force-reload
Das wars, jetzt sollte man die Attacken gegen den Webserver erkennen können.
Anmerkung: ModSecurity ist nur so gut wie man es einstellt 🙄 Es hat zwar sehr viele Regeln, welche auch sehr gut Funktionieren. Dennoch braucht es sehr viel Feintuning. Ansonsten besteht die Gefahr das eure Webapplikationen nicht mehr richtig funktionieren! Bevor ihr „SecRuleEngine“ auf „On“ stellt, schaut ob ihr nicht selber verschiedene Warnungen auslöst, beim Besuch eurer eigenen geschützten Webseiten!