Zurück zur Startseite

mod_security mittels nine-manage-vhosts nutzen

  1. Was ist mod_security?
  2. Welche Optionen stehen zur Verfügung?
  3. Wie kann ich mod_security nutzen?
  4. Wie kann ich prüfen ob mod_security funktioniert?
  5. Gibt es potentielle Nachteile bei der Nutzung von mod_security?

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 Servers die Ubuntu Xenial oder Bionic als Betriebssystem nutzen haben das notwendige Module bereits vorinstalliert. Um bestehende Services und Webseiten nicht negativ zu beeinflussen haben wir uns dazu entschieden mod_security standardmässig zu deaktivieren.

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 ist für diesen vhost deaktiviert. Es wird keine Filterung vorgenommen

  • DetectionOnly
    mod_security befindet sich in einem “Erkennungsmodus”, was bedeutet dass alle potentiellen Verletzungen des Regelsatzes im Logfile der jeweiligen Domain protokolliert werden. Wir raten dringend dazu diese Option zu nutzen bevor mod_security schlussendlich aktiv Anfragen blocken soll

  • On
    mod_security ist vollumfänglich aktiv und wird damit beginnen Anfragen zu blockieren die vom “core ruleset” abgedeckt sind

Wie kann ich mod_security nutzen?

mod_security ist in nine-manage-vhosts integriert und kann durch Sie selbst verwaltet werden, ganz nach Bedarf einzelner 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.

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:
nine-manage-vhosts virtual-host update nine.ch --template-variable=MODSEC=DetectionOnly

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:
nine-manage-vhosts virtual-host update nine.ch --template-variable=MODSEC=On

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:

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 mod_security alle Aktionen im Error Log der jeweiligen Domain.

/home/<User>/logs/<Domain>.error.log

Im folgenden 2 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 aktivierten 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 potentielle 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 zu aktivieren (“On”).

Es besteht die Möglichkeit einzelne Regeln von mod_security systemweit zu deaktivieren um “false positives” zu mitigieren, bedenken Sie aber dass dies stets die letzten Option sein sollte. Der bessere Weg wäre Anfragen so anzupassen dass dies 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 Verschlechterung messbarer Metriken um ca. 10% mit sich brachte. Dies schliesst die Anzahl der maximalen Anfragen ebenso ein wie die durchschnittliche Ladezeit sowie das 90% Mittel der Ladezeiten.

Daher weisen wir abschliessend nochmals darauf hin dass mod_security zunächst immer im Modus “DetectionOnly” betrieben werden sollte und die Auswirkungen zunächst sorgsam geprüft werden sollten.

Haben Sie die gewünschten Informationen nicht gefunden?

Kontaktieren Sie unseren Support:

+41 44 637 40 40 support@nine.ch