ModSecurity , иногда называемый Modsec , является брандмауэром с открытым исходным кодом веб-приложений (WAF). Первоначально разработанный как модуль для HTTP-сервера Apache, он эволюционировал, чтобы предоставить массу возможностей фильтрации запросов и фильтров Hypertext Transfer Protocol наряду с другими функциями безопасности на нескольких разных платформах, включая Apache HTTP Server , Microsoft IIS и NGINX .  Это бесплатное программное обеспечение,выпущенное под лицензией Apache 2.0.

Платформа предоставляет язык конфигурации правил, известный как «SecRules» для мониторинга в реальном времени, регистрации и фильтрации сообщений протокола Hypertext Transfer Protocol на основе пользовательских правил.

Хотя это не единственная конфигурация, ModSecurity чаще всего развертывается для обеспечения защиты от общих классов уязвимостей с использованием набора правил OWASP ModSecurity Core Rule Set (CRS).  Это набор правил с открытым исходным кодом, написанный на языке SecRules ModSecurity. Проект является частью OWASP , проекта Open Web Application Security.

Для обнаружения угроз механизм ModSecurity развертывается встроенным в веб-сервер или в качестве прокси-сервера перед веб-приложением. Это позволяет движку сканировать входящий и исходящий HTTP- поток данных. В зависимости от конфигурации правила движок будет решать, как следует обрабатывать связь, которая включает в себя возможность передавать, удалять, перенаправлять, возвращать определенны код состояния, выполнять пользовательский скрипт и многое другое.

В целом ModSecurity помогает блокировать возможность использования существующих уязвимостей сайта и предотвратить его взлом.

Устраняем уязвимость веб приложения

Скачаем исходные коды nginx и modsecurity, которые понадобятся для сборки

cd /tmp
wget https://nginx.org/download/nginx-1.9.15.tar.gz
wget https://www.modsecurity.org/tarball/2.9.1/modsecurity-2.9.1.tar.gz
gunzip -c nginx-1.9.15.tar.gz | tar xvf nginx-1.9.15.tar.gz
gunzip -c modsecurity-2.9.1.tar.gz | tar xvf modsecurity-2.9.1.tar.gz
yum -y install gcc make automake autoconf libtool pcre pcre-devel libxml2 libxml2-devel curl curl-devel httpd-devel

Сборка и установка

Конфигурируем режим работы modsecurity и затем собираем nginx с этим модулем

cd modsecurity-2.9.1/
./configure --enable-standalone-module
make
cd ../nginx-1.9.15/
./configure --add-module=../modsecurity-2.9.1/nginx/modsecurity
make && make install

Первоначальная настройка

Применяем реккомендуемые конфигурации по умолчанию

cp /tmp/modsecurity-2.9.1/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /tmp/modsecurity-2.9.1/unicode.mapping /usr/local/nginx/conf/

Далее для включения возможностей использования модуля необходимо добавить в /usr/local/nginx/conf/nginx.conf в раздел “location /” строки

ModSecurityEnabled on;
ModSecurityConfig modsecurity.conf;

В файле конфигурации это выглядит так:

location / {
ModSecurityEnabled on;
ModSecurityConfig modsecurity.conf;
}

Запуск

Запуск модно произвести двумя способами

servise nginx start

или

/usr/local/nginx/sbin/nginx

Локальная проверка

wget localhost

cat index.html

Настройка фаервола

iptables-save > iptab

Редактируем правила

vi  iptab

Добавляем после правила разрешения ssh

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

Применяем изменения

iptables -F;  iptables-restore < iptab

Проверяем

Браузером или с помощью curl

Получение рабочей копии owasp

Скачиваем правила OWASP и копируем в конфигурацию веб сервера nginx

git clone  https://github.com/SpiderLabs/owasp-modsecurity-crs.git
cd owasp-modsecurity-crs/
cp rules /usr/local/nginx/conf/
cp crs-setup.conf.example /usr/local/nginx/conf/crs-setup.conf

Подготовка файла правил:

За основу берем подготовленный пример правил:

cd /usr/local/nginx/conf
cd rules
mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example  REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
mv  RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example  RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
cd ..

> modsecurity.conf

cat crs-setup.conf > modsecurity.conf

cat rules/*.conf >> modsecurity.conf

Редактируем файл конфигурации:

vi modsecurity.conf

добавляем строки в начале

SecAuditLog /usr/local/nginx/logs/modsec_audit.log - файл аудита
SecRuleEngine On - включение фильтра
SecDefaultAction "phase:1,deny,log" - что делаем с нарушителями - в лог и блокируем
SecServerSignature GeekFlare - подпись сервера в заголовках
SecDataDir /tmp

Далее выполняем

Перезапуск nginx

service nginx restart

или

killall nginx
/usr/local/nginx/sbin/nginx

При работе правил записи вносятся в фалы журналов

 

/usr/local/nginx/logs/modsec_audit.log - записи аудита
/usr/local/nginx/logs/error.log - тут отчет фильтра с пометкой “ModSecurity”

Проверки:

при нелегальном запросе должно выдавать 403 ошибку!

/aphpfilethatdonotexist.php?something=../../etc

при обращении по ИП сайта

Так же вы можете запустить бесплатное сканирование на уязвимости

https://pentest-tools.com до и после и сравнить результат

Хотите защитить свой сайт от уязвимости, тогда обращайтесь к нам [email protected]