Правило ModsecRemoveTargetById не удаляет правила

Я пытаюсь написать исключения правил modsecurity и не могу заставить ctl:ruleRemoveTargetById работать в соответствии со справочным руководством.

На моем сервере работает Debian 9 с apache2 2.4.25-3+deb9. Я пробовал следовать справочному руководству на github и пытался эмулировать примеры правил в файле > REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf. Я написал простое правило для запуска определенных аргументов, а затем попытался исключить его, но оно не исключает правило, основанное на аргументах. Я вижу как идентификатор правила, так и идентификатор исключения правила в журналах.

Я произвольно поместил приведенное ниже правило в REQUEST-905-COMMON-EXCEPTIONS.conf.

SecRule ARGS "@rx propfind" "id:905999,phase:2,log,msg:'test msg delete rule'"

Это срабатывает как надо. На моей странице настроек nextcloud есть аргумент с именем <?xml version, который содержит шаблон «propfind», который я использую для тестирования.

Я также написал исключение и поместил его в REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.

SecRule ARGS_NAMES "@rx <\?xml\sversion" "phase:2,log,id:1030,ctl:ruleRemoveTargetById=905999;ARGS:/<\?xml\sversion/"

Это правило срабатывает, как и ожидалось, но не предотвращает срабатывание правила 905999 для аргумента с именем <?xml version.

Я упростил правила до двух ниже, и они работают так, как ожидалось; когда я ввожу example.com/?test=trigger, я вижу в журнале правило 905999, но если я отправляю example.com/?testarg=trigger, я вижу только правило исключения 1030, как и ожидалось.

SecRule ARGS "@rx trigger" "id:905999,phase:2,log,msg:'test msg delete rule'"

SecRule ARGS_NAMES "@rx testarg" "phase:2,log,id:1030,ctl:ruleRemoveTargetById=905999;ARGS:testarg"

Когда я открываю вкладку настроек nextcloud, HTTP-запрос содержит

<?xml version="1.0"?><d:propfind xmlns:d="DAV:"><d:prop><d:resourcetype/></d:prop></d:propfind>

который Modsec интерпретирует как имя аргумента <?xml version, содержащее значение "1.0"?><d:propfind xmlns:d="DAV:"><d:prop><d:resourcetype/></d:prop></d:propfind>

Я ожидал, что мое правило 1030 остановит запуск 905999, но я все еще вижу оба правила в журнале. Я предполагаю, что это из-за пробела между «xml» и «версией», но не могу понять, как исключить цель.


person Èl Sea    schedule 10.05.2019    source источник


Ответы (1)


По какой-то причине регулярное выражение в ctl:ruleRemoveTargetById=905999;ARGS:/<\?xml\sversion/ не работало. Использование SecRuleUpdateTargetById 905999 "!ARGS:/<\?xml\sversion" и размещение его в RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf для обновления целей правила после их загрузки работает по желанию.

person Èl Sea    schedule 14.05.2019