Welche Regel kann ich in ModSecurity verwenden, um die POST-Nutzlast für eine bestimmte Site zu protokollieren?

Welche Regel kann ich in ModSecurity verwenden, um die POST-Nutzlast für eine bestimmte Site zu protokollieren?

Ich muss die POST-Nutzlast für eine bestimmte Website überprüfen (der Server ist ziemlich ausgelastet und ich würde die POST-Protokollierung nicht für den gesamten Server aktivieren).

Der Server ist LiteSpeed ​​5.0.7. SecRequestBodyAccess ist auf „Ein“ eingestellt.

Zuerst habe ich es mit einer Regelkette versucht: Die erste in Phase 1, um nur Anfragen für meinen gewünschten Host abzugleichen, aber die Post-Payload ist in Phase 2 und ich glaube nicht, dass ich eine Kette in zwei verschiedenen Phasen erstellen kann.

Dann habe ich versucht, dies zu verwenden:

<VirtualHost xxxxx>
    SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
</VirtualHost>

Es wird jedoch nichts in aufgezeichnet modsec_audit.log.

Mache ich etwas falsch oder hängt es mit der Kompatibilität von LiteSpeed ​​mit ModSec zusammen?

Am Ende habe ich auch diese Regel ausprobiert, um POST für alle Anfragen aufzuzeichnen:

SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass". 

Es protokolliert die Anfrage, jedoch nicht den Anfragetext ( -C-- group si missing in modsec audit).

Antwort1

Ähnlich wie diese Frage:Wie bringt man mod_security dazu, alle POST-Daten zu protokollieren?

Sie haben Recht, Sie können zwei Regeln in zwei unterschiedlichen Phasen nicht verketten. Allerdings hat Phase 2 Zugriff auf alle Informationen aus Phase 1. Verschieben Sie dies also einfach in Phase 2, wenn Sie es auf diese Weise tun möchten.

Diese Regel, die Sie gegeben haben:

SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223

Ist irgendwie sinnlos. Dadurch wird (im Hauptprotokoll) protokolliert, dass eine POST-Anforderung empfangen wurde, jedoch ohne den POST-Text.

Es wird auch in AuditEngine protokolliert, je nachdem, was IhreSicherheitsauditEngineDer Wert wird wie folgt eingestellt:

  1. Wenn Sie SecAuditEngine auf Ein eingestellt haben, wird alles im Überwachungsprotokoll protokolliert und die obige Regel wird nicht benötigt. Dadurch werden die Protokolldateien schnell gefüllt, daher ist es nicht empfehlenswert.
  2. Wenn Sie SecAuditEngine auf RelevantOnly eingestellt haben, erfolgt die Protokollierung auch hier.
  3. Wenn SecAuditEngine auf „Aus“ gesetzt ist, wird es nie im Prüfprotokoll protokolliert.

Normalerweise ist es am besten, SecAuditEngine auf RelevantOnly einzustellen (was Sie vermutlich bereits haben), aber wenn das nicht so eingestellt ist, wird der Text möglicherweise nicht im AuditLog protokolliert.

Vielleicht ist es besser, die andere Regel zu verwenden, die Sie angegeben haben.ctlAktion:

SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"

Dies zwingt die AuditEngine, für Post-Anfragen eingeschaltet zu sein – selbst wenn das AuditLog auf Aus gesetzt ist. Dadurch wird auch protokolliert, dass Sie diese Regel ausgelöst haben, um sie abzugeben, was nicht wirklich notwendig oder nützlich ist, daher würde ich das „Protokoll“ in „kein Protokoll“ ändern. Die Anfrage wird weiterhin protokolliert (da die AuditEngine auf Ja gesetzt wurde), aber diese Regel, die diese Änderung vornimmt, wird dies nicht tun. Übrigens, wenn Sie ctl verwenden, betrifft dies nur diese Anfrage, sodass die AuditEngine für die nächste Anfrage zurückgesetzt wird.

Wie Sie sagen, scheint dies zu funktionieren, außer dass Sie den C-Teil nicht haben. Dies wird eingestellt mitSecAuditLogParts. Standardmäßig sind C-Teile enthalten. Das bedeutet also, dass Sie die Standardeinstellung geändert haben müssen. Gab es dafür einen Grund?

Sie können es jedoch so einstellen, dass C-Teile eingeschlossen werden:

SecAuditLogParts ABCFHZ
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass"

Wenn Sie möchten, dass beim Auslösen dieser Regel nur C-Teile protokolliert werden, können Sie Folgendes als Teil der Regel tun:

SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,ctl:auditLogParts=ABCFHZ,nolog,pass"

Außerdem sollten Sie sich darüber im Klaren sein, dass POST-Anfragen vertrauliche Daten (Passwörter, Kreditkartennummern, Sozialversicherungsnummern usw.) protokollieren können. Das Protokollieren dieser Daten ist nicht ratsam und kann auch gegen die Unternehmensrichtlinien und/oder von Ihnen befolgte Standards (z. B. PCI-Konformität) verstoßen. Daher wird empfohlen, Bereinigungsregeln einzurichten, um diese Daten zu maskieren. Weitere Informationen finden Sie hier:https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#sanitiseArg

Antwort2

Stellen Sie Folgendes sicher:

  1. HabenSecRequestBodyAccess On

  2. Versuchen Sie, „auditlog“ statt „log“ zu verwenden.

  3. Wenn Sie benutzerdefinierte SecAuditLogParts definiert haben, stellen Sie sicher, dass diese den Anforderungstext enthalten.

verwandte Informationen