mod_security mittels nine-manage-vhosts nutzen
Was ist mod_security?
mod_security ist die Implementation des OWASP Regelsatzes für den Apache Webserver. mod_security agiert dabei als Applikations-Firewall und kann Anfragen filtern, die darauf abzielen, in der Applikation XSS, SQL injections und ähnliche Lücken auszunutzen.
Wir verwenden das "core rule set" von mod_security auf unseren Systemen.
Welche Optionen stehen zur Verfügung?
Alle Managed Server ab Ubuntu Xenial (16.04) haben das notwendige Modul bereits vorinstalliert. Um bestehende Services und Webseiten nicht negativ zu beeinflussen, ist mod_security standardmässig deaktiviert.
Dies trifft sowohl auf das Anlegen neuer vhosts als auch auf die Anpassung bestehender vhosts zu.
Um die Filterung durch mod_security zu aktivieren, können Sie das Tool nine-manage-vhosts
nutzen. Sie können hierbei aus den drei folgenden Optionen wählen:
-
Off mod_security wird für diesen vhost deaktiviert. Es wird keine Filterung vorgenommen.
-
DetectionOnly mod_security schaltet sich in einen "Erkennungsmodus", alle potentiellen Verletzungen des Regelsatzes werden im Logfile der jeweiligen Domain protokolliert. Wir raten dringend dazu diese Option in einer langen Testphase zu nutzen, bevor mod_security aktiv Anfragen blocken soll. In dieser Phase sollte das Logfile regelmässig auf Einträge von mod_security überprüft werden. Bei false positives ist gegebenenfalls eine Anpassung des Regelsatzes erforderlich.
-
On mod_security wird vollumfänglich aktiv und blockiert Anfragen die vom "core ruleset" detektiert werden.
Wie kann ich mod_security nutzen?
mod_security ist in nine-manage-vhosts
integriert und kann durch Sie selbst verwaltet werden, ganz nach Bedarf nur bei einzelnen Webseiten oder vhosts.
Um mod_security mittels nine-manage-vhosts
zu aktivieren, muss die Template-Variable "MODSEC" übergeben werden:
--template-variable=MODSEC=
.
Anhand des Beispiel-vhosts "nine.ch" werden wir im folgenden mod_security aktivieren. Wir beginnen mit der Auflistung der bestehenden vhosts um den aktuellen Status zu überprüfen.
$ sudo nine-manage-vhosts virtual-host list
nine.ch
=======
DOMAIN: nine.ch
USER: www-data
WEBROOT: /home/www-data/ninech
TEMPLATE: default
TEMPLATE VARIABLES: MODSEC
Off
PHP_VERSION
7.3
ALIASES: www.nine.ch
Hier können wir ablesen, dass mod_security aktuell deaktiviert ist ("Off").
Nun passen wir den Modus von mod_security auf "DetectionOnly" an:
$ sudo nine-manage-vhosts virtual-host update nine.ch --template-variable=MODSEC=DetectionOnly
Virtual Host updated: nine.ch
nine.ch
=======
DOMAIN: nine.ch
USER: www-data
WEBROOT: /home/www-data/ninech
TEMPLATE: default
TEMPLATE VARIABLES: MODSEC
DetectionOnly
PHP_VERSION
7.3
ALIASES: www.nine.ch
Die Syntax, um mod_security zu aktivieren und das Blocken von Anfragen einzuschalten, lautet entsprechend:
$ sudo nine-manage-vhosts virtual-host update nine.ch --template-variable=MODSEC=On
Virtual Host updated: nine.ch
nine.ch
=======
DOMAIN: nine.ch
USER: www-data
WEBROOT: /home/www-data/ninech
TEMPLATE: default
TEMPLATE VARIABLES: MODSEC
On
PHP_VERSION
7.3
ALIASES: www.nine.ch
Natürlich kann mod_security auch mit der bestehenden Implementation von Let´s Encrypt genutzt werden:
$ sudo nine-manage-vhosts virtual-host update nine.ch --template=default_letsencrypt_https --template-variable=MODSEC=On
Virtual Host updated: nine.ch
nine.ch
=======
DOMAIN: nine.ch
USER: www-data
WEBROOT: /home/www-data/ninech
TEMPLATE: default_letsencrypt_https
TEMPLATE VARIABLES: MODSEC
On
PHP_VERSION
7.3
ALIASES: www.nine.ch
Wie kann ich prüfen ob mod_security funktioniert?
Wenn mod_security nicht deaktiviert wurde ("Off"), protokolliert es alle Aktionen im Error Log der jeweiligen Domain.
/home/<User>/logs/<Domain>.error.log
Im folgenden zwei Beispiele anhand des selben Requests, jedoch mit unterschiedlichen Einstellungen.
DetectionOnly
ModSecurity: Warning. Operator GE matched 5 at TX:anomaly_score. [file "/etc/apache2/modsecurity.d/owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "57"] [id "949110"] [msg "Inbound Anomaly Score Exceeded (Total Score: 8)"] [severity "CRITICAL"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "nine.ch"] [uri "/test.php"] [unique_id "Xa-73MmCIluUzjqCJdRfuQAAAI0"]
mod_security protokolliert hier lediglich eine Warnung, greift jedoch nicht aktiv ein. Die Anfrage wird zur Applikation geleitet.
On
ModSecurity: Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. [file "/etc/apache2/modsecurity.d/owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "57"] [id "949110"] [msg "Inbound Anomaly Score Exceeded (Total Score: 8)"] [severity "CRITICAL"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "nine.ch"] [uri "/test.php"] [unique_id "Xa-7M7JyjGSEZvBliDDm7gAAAFA"]
Bei aktiviertem mod_security wird die Anfrage blockiert, die Anfrage wird nicht von der Applikation verarbeitet.
Die id
referenziert die Regel die mod_security anwendet.
Gibt es potentielle Nachteile bei der Nutzung von mod_security?
mod_security ist eine komplexe Software, die jede einzelne Anfrage analysiert und auf potentiell gefährliche Inhalte prüft. Dies hat zwei mögliche Nachteile zur Folge.
Fehler in der Erkennung
Es besteht die Möglichkeit, dass legitime Anfragen als potentiell gefährlich erkannt und daher blockiert werden ("false positives"). Nutzen Sie beispielsweise eine selbst verwaltete Version von phpMyAdmin, so ist es sehr wahrscheinlich, dass bei aktiviertem mod_security Anfragen blockiert werden.
Wie bereits zuvor erwähnt sollten Sie immer damit beginnen, für einen vhosts zunächst die Option "DetectionOnly" zu wählen und erst später mod_security aktivieren ("On").
Es besteht die Möglichkeit, einzelne Regeln von mod_security zu deaktivieren, um "false positives" zu mitigieren.
Bedenken Sie aber, dass dies stets die letzte Option sein sollte. Besser wäre es die Anfragen anzupassen, damit diese nicht länger von den mod_security Regeln erfasst werden.
Auswirkungen auf die Geschwindigkeit
Während unserer Testphase von mod_security konnten wir beobachten, dass der Einsatz des Regelsatzes eine Performance Einbusse um ca. 10% mit sich brachte. Dies betrifft die Anzahl der maximalen Anfragen und die durchschnittliche Ladezeit.
Daher weisen wir abschliessend nochmals darauf hin dass mod_security zunächst immer im Modus "DetectionOnly" betrieben werden sollte und die Auswirkungen mithilfe der Error Logfiles zunächst sorgsam geprüft werden sollten.