Maksym Prokopov personal blog
Idea is a something worth sharing

mod_security2 или как обезопасить свой хостинг от злодеев?

03.01.2010

Reading time: 2 min.

![mod_security for apache](/uploads/2010/01/mod_security_for_apache.png)

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

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

Может быть есть простой способ запретить обычные SQL инъекции, directory traversing и остальные распространенные методы взлома? Оказывается, такой способ есть и предоставляет его модуль apache под названием [mod_security](http://www.modsecurity.org/).

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

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

portinstall mod_security2

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

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

SecRuleEngine off

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

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

[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»]