ModSecurity: Как выполнить exec на основе уровня серьезности? - PullRequest
2 голосов
/ 20 февраля 2012

Я использую mod_security 2.6.3 и хотел бы иметь возможность выполнять сценарий оболочки на основе уровня важности правила.Я использую основной набор правил (CRS), который устанавливает уровень серьезности 2 (для «критического») при обнаружении атаки.

Я хотел бы выполнить свой сценарий всякий раз, когда серьезность достаточно высока.

Я пытался использовать настройку SecDefaultAction, например:

SecDefaultAction "phase:2,log,deny,status:403,exec:/path/to/my/script"

Но поскольку действие 'exec' является «неразрушающим», оно всегда выполняется независимо от того,критическое или некритическое правило триггерно.

Я мог бы пройтись по каждому критическому SecRule и добавить рядом с ним «exec», но это было бы утомительно (и повторяюще, и некрасиво).

Я думал, что мог бы сделать что-то вроде:

SecRule ENV:SEVERITY "@lt 4" "exec:/path/to/my/script"

Но каким-то образом это никогда не выполняется, возможно потому, что у критических правил есть оператор блокировки или запрета, который останавливает обработку правил (так как считается разрушительным).

Я также пытался использовать функцию оценки аномалий CRS, например:

SecRule TX:ANOMALY_SCORE "@ge 4" "exec:/path/to/my/script"

Но она все равно не обрабатывается.Есть идеи о том, как я могу это сделать?

1 Ответ

5 голосов
/ 21 февраля 2012

Вы можете использовать переменную HIGHEST_SEVERITY , чтобы проверить ее, например:

SecRule HIGHEST_SEVERITY "@le 5" "nolog,pass,exec:/path/to/your/script"

Обратите внимание на nolog,pass дополнительные параметры, которые сохранят исходное сообщение журнала из правила, изменившего уровень серьезности.

Кроме того, я предлагаю вам поместить это условие в начале файла .conf (например, сразу после вашей строки SecDefaultAction), чтобы убедиться, что оно включено во все контексты.

Еще один способ сделать это - использовать собственный код статуса HTTP-ответа в вашем SecDefaultAction (например, 418 «Я чайник») и инициировать ваше условие на его основе на этапе ведения журнала (после установки по умолчанию). действие обработано):

# On error, log then deny request with "418 I'm a teapot":
SecDefaultAction "phase:2,log,deny,status:418"

# On HTTP response status code 418, execute your script:
SecRule RESPONSE_STATUS "^418$" "phase:5,nolog,pass,exec:/path/to/your/script"
...