mod_security for apache

В случае, если вы предоставляете услуги хостинга вам будет небесполезно знать, как быть, если сайты содержат старые версии публичных движков Joomla, ShopScript, WordPress, etc и периодически подвергаются взломам.

В таких случаях править код и обновлять версии клиентского ПО самостоятельно вы не будете по понятным причинам, да и не всегда у клиента есть возможность найти программера/фрилансера готового выполнить обновление работающего и приносящего доход, хотя и старого интернет-магазина или форума.

Может быть есть простой способ запретить обычные SQL инъекции, directory traversing и остальные распространенные методы взлома? Оказывается, такой способ есть и предоставляет его модуль apache под названием mod_security.

При помощи определенного набора правил, примерно как у Spamassassin, происходит тестирование вызываемого URL на предмет конструкций ../../../ и отправка в POST данных вида ‘ or 1=1

Для FreeBSD ставится довольно просто:

portinstall mod_security2

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

Отключать модуль для определенного сайта можно в секции vhosts указав

    <IfModule mod_security2.c>
            SecRuleEngine off
    </IfModule>

Применение данного средства является хорошим “пугалом”, но не есть панацея. Обновляйте ваши движки чаще, и закрывайте дыры в безопасности. И да прибудет с вами сила.

Пример логов:

[04/Jan/2010:09:15:52 +0200] [www.xxxxxxxx.com.ua/sid#28efbb60][rid#29a56058][/_vti_bin/owssvr.dll][1] Access denied    with code 500 (phase 2). Pattern match  "\.(?:c(?:o(?:nf(?:ig)?|m)|s(?:proj|r)?|dx|er|fg|md)|p(?:rinter|ass|db|ol|wd)|v(?:b(?:proj|s)?|sdisco)|a(?:s(?:ax?|cx)|xd)  |d(?:bf?|at|ll|os)|i(?:d[acq]|n[ci])|ba(?:[kt]|ckup)|res(?:ources|x)|s(?:h?tm|ql|ys)|l(?:icx|nk|og)|\w{0,5}~|webinfo|ht[rw  ]|xs[dx]| ..." at REQUEST_BASENAME. [file   "/usr/local/etc/apache22/Includes/mod_security2/modsecurity_crs_30_http_policy.conf"] [line "94"] [id "960035"] [msg "URL   file extension is restricted by policy"] [severity "CRITICAL"] [tag "POLICY/EXT_RESTRICTED"]