Я вставлял "drwxr-xr-x. 2 root root 6 Sep 24 04:35 images" на страницу dokuwiki. Это вызвало срабатывание modsecurity, и я получил ошибку HTTP. Как можно изменить это правило, чтобы избежать такого рода ложных срабатываний?
Это произошло на Dreamhost, и служба поддержки сообщила мне, что это правило успешно отражало атаки. Какую атаку пытается предотвратить? Если кто-то хочет просмотреть права доступа к файлам, вредоносный код может просто переформатировать ответ (например, показать вместо этого 774), чтобы обойти соответствие регулярного выражения вместо отображения необработанного вывода.
ModSecurity: Доступ запрещен кодом 418 (фаза 4). Соответствие шаблону "(?: [^ <] *? (?: \ B (? :( ?: c (?: Ehennemden | gi-telnet) | gamma web shell) \ b | imhabirligi phpftp) | (?: R ( ?: emote explorer | 57shell) | aventis klasvayv | zehir) \ b | \ .: :( ?: новости удаленная инъекция оболочки php :: \. | rhtools \ b) | ph (?: p (? :( ?: командир | -терминал) \ b | remoteview) | ... "в RESPONSE_BODY. [файл" /dh/apache2/template/etc/mod_sec2/modsecurity_crs_45_trojans.conf "] [строка" 34 "] [id" 950922 "] [msg "Доступ через черный ход"] [серьезность "КРИТИЧЕСКИЙ"] [тег "MALICIOUS_SOFTWARE / TROJAN"]
В полное правило это:
SecRule RESPONSE_BODY "(?:<title>[^<]*?(?:\b(?:(?:c(?:ehennemden|gi-telnet)|gamma web shell)\b|imhabirligi phpftp)|(?:r(?:emote explorer|57shell)|aventis klasvayv|zehir)\b|\.::(?:news remote php shell injection::\.| rhtools\b)|ph(?:p(?:(?: commander|-terminal)\b|remoteview)|vayv)|myshell)|\b(?:(?:(?:microsoft windows\b.{0,10}?\bversion\b.{0,20}?\(c\) copyright 1985-.{0,10}?\bmicrosoft corp|ntdaddy v1\.9 - obzerve \| fux0r inc)\.|(?:www\.sanalteror\.org - indexer and read|haxplor)er|php(?:konsole| shell)|c99shell)\b|aventgrup\.<br>|drwxr))" \
"phase:4,rev:'2',ver:'OWASP_CRS/2.2.9',maturity:'8',accuracy:'8',t:none,ctl:auditLogParts=+E,block,msg:'Backdoor access',logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',capture,id:'950922',tag:'OWASP_CRS/MALICIOUS_SOFTWARE/TROJAN',tag:'WASCTC/WASC-01',tag:'OWASP_TOP_10/A7',tag:'PCI/5.1.1',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.trojan_score=+1,setvar:tx.anomaly_score=+%{tx.error_anomaly_score},setvar:tx.%{rule.id}-OWASP_CRS/MALICIOUS_SOFTWARE/TROJAN-%{matched_var_name}=%{matched_var}"
Это соответствует приведенному выше из-за последнего теста: drwxr. Я не уверен, почему это было добавлено к этому правилу, поскольку в комментариях нет объяснений, и это было в версии 2.6, изначально предназначенной для GitHub.
В любом случае у вас есть несколько вариантов:
Вы можете отредактировать правило, чтобы удалить последнюю проверку. Это не рекомендуется, поскольку при любом будущем обновлении ваших правил это будет восстановлено.
Вы можете просто отключить это правило, добавив следующее в свою конфигурацию (после того, как вы загрузили правило из /dh/apache2/template/etc/mod_sec2/modsecurity_crs_45_trojans.conf)
SecRuleRemoveById 950922
Вы также можете отключить синтаксический анализ тела ответа:
SecResponseBodyAccess Off
Сканирование тел ответов может повлиять на производительность, так что вам все равно следует это учитывать. Запросы обычно небольшие (например, GET /index.html), но ответы будут содержать намного больше данных.
Теоретически вы должны знать, что находится в ваших ответах (при условии, что у вас есть защита от SQL-инъекций, XSS и т.п.), поэтому сканирование исходящих ответов может не иметь смысла.
Счетный аргумент состоит в том, что проверка тела ответа полезна для предотвращения утечки информации (например, атака с использованием SQL-инъекции, которая используется для утечки информации из вашей базы данных). Опять же, если вы разрешите SQL-инъекцию, у вас все равно большие проблемы, даже без утечки информации.
Лично я не считаю сканирование тел ответов полезным, за исключением определенных случаев использования, поэтому отключите их по умолчанию и включите для определенных URL-адресов.