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 RelevantOnlySecAuditLogRelevantStatus "^(?:5|4(?!04))"SecAuditLogType ConcurrentSecAuditLogStorageDir /var/log/apache2/modsecurity/modsec_auditSecAuditLog /var/log/apache2/modsecurity/audit.logSecAuditLogParts "ABIDEFGHZ"

Tuning und Debugging

SecDebugLog /var/log/apache2/modsecurity/modsec_debug.logSecDataDir /var/log/apache2/modsecuritySecTmpDir /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.gz
cd 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!

Das könnte dich auch interessieren …