ModSecurity (NGINX) – Erkennung von Command Injection in Formularfeldern
Zur Navigation springen
Zur Suche springen
ModSecurity (NGINX) – Erkennung von Command Injection in Formularfeldern
Ziel der Übung
- Demonstration der Layer-7-Inspektion durch eine Web Application Firewall
- Erkennung von Command Injection in einem HTML-Formular
- Blockierung von Angriffen vor Weiterleitung an das Backend
- Analyse von POST-Parametern (ARGS_POST) nach TLS-Terminierung
Voraussetzung
- NGINX mit ModSecurity v3 aktiv
- OWASP Core Rule Set (CRS) eingebunden
- TLS-Terminierung erfolgt auf der WAF
- Webanwendung mit HTML-Formular (POST)
Architektur
- Client sendet HTTPS-Anfrage an WAF
- TLS-Verbindung endet an der WAF
- HTTP-POST-Body liegt entschlüsselt vor
- ModSecurity analysiert Formularinhalte
- Nur geprüfte Anfragen werden an Backend weitergeleitet
CRS-Einbindung prüfen
- cat /etc/nginx/modsec/modsecurity.conf
Folgende Includes müssen vorhanden sein:
Include /etc/nginx/modsec/coreruleset/crs-setup.conf Include /etc/nginx/modsec/coreruleset/rules/*.conf Include /etc/nginx/modsec/custom-rules/security-policy.conf
Lokale Detection-Regel erstellen
- vi /etc/nginx/modsec/custom-rules/local-detection.conf
Inhalt:
SecRule ARGS_POST "@rx (?i)\b(pwd|ls|id|whoami|cat|uname)\b" \ "id:1001,\ phase:2,\ t:urlDecodeUni,\ t:compressWhitespace,\ deny,\ log,\ msg:'POST Command Injection Detected'"
Erklärung der lokalen Detection-Regel
- SecRule
- Definiert eine Prüfregel innerhalb der ModSecurity-Engine
- ARGS_POST
- Prüft ausschließlich POST-Parameter aus HTML-Formularen (application/x-www-form-urlencoded)
- @rx
- Verwendet einen regulären Ausdruck zur Mustererkennung
- (?i)
- Aktiviert eine case-insensitive Prüfung (z. B. PWD, PwD, pwd)
- \b(pwd|ls|id|whoami|cat|uname)\b
- Sucht nach typischen Shell-Kommandos als vollständige Wörter im POST-Body
- id:1001
- Eindeutige Identifikationsnummer der Regel im lokalen Regelbereich
- phase:2
- Ausführung nach vollständigem Einlesen des Request-Body
- t:urlDecodeUni
- Dekodiert URL-kodierte Inhalte (z. B. %3B → ;)
- t:compressWhitespace
- Normalisiert Leerzeichen zur besseren Erkennung von Payloads
- deny
- Blockiert die Anfrage bei Regelmatch
- log
- Erstellt einen Eintrag im Audit-Log
- msg:'POST Command Injection Detected'
- Log-Nachricht bei erfolgreichem Treffer
Konfiguration neu laden
- nginx -t
- systemctl reload nginx
Testangriff über Webformular
- Formularfeld
xinux.de ; pwd
Erwartetes Verhalten
- HTTP-Statuscode 403
- Anfrage wird von WAF blockiert
- Backend erhält keine Anfrage
Audit-Log prüfen
- grep pwd /var/log/nginx/modsec_audit.log
Ergebnis
- Command Injection im POST-Body erkannt
- Anfrage auf Layer 7 analysiert
- Angriff vor Applikationsverarbeitung blockiert