Firewall веб-приложений (WAF) – это приложение, которое контролирует сетевой трафик на прикладном уровне.
OSI (Open Systems Interconnection) – одна из наиболее часто упоминаемых в дискуссиях о сетевом трафике в Интернете. Когда пакет пересекает уровень 6 (Presentation) и движется к уровню 7 (Application), он подвергается операциям расшифровки/декодирования. Каждая из этих операций может быть подвержена ошибочному декодированию и интерпретации, которые могут быть использованы для выхода из стандартного контекста приложения. Инъекции – это лишь один из видов таких уязвимостей, и уже долгое время они являются причиной беспокойства номер один, тем более что традиционные IPS-приложения не могут справиться с этими угрозами.
О ModSecurity
ModSecurity – это исторически сложившийся механизм Firewall веб-приложений. Он совместим с Apache, IIS и Nginx и поддерживается сторонней компанией. Firewall ссылается на список правил в потоке HTTP-заголовков, предоставляемых веб-сервером/прокси. На данный момент этот репозиторий был упрощен и содержит только основную библиотеку LibModSecurity. Сама библиотека может быть вызвана из вашей собственной серверной реализации напрямую или через обертки, специфичные для отдельных языков программирования.
Установите коннектор Nginx
Коннектор Nginx – это динамический модуль Nginx, который можно установить с помощью пакета nginx-mod-modsecurity
. Он имеет libmodsecurity.so в качестве зависимости, поэтому для данного случая использования этот пакет является самим брандмауэром (firewall).
sudo dnf install -y nginx nginx-mod-modsecurity rpm -qR nginx-mod-modsecurity
config(nginx-mod-modsecurity) = 1.0.3-3.fc38 libc.so.6(GLIBC_2.4)(64bit) libmodsecurity.so.3()(64bit) nginx(abi) = 1.24.0 nginx-filesystem ...
После установки вы увидите, что коннектор добавляет несколько важных файлов в /etc/nginx
.
rpm -ql nginx-mod-modsecurity
/etc/nginx/modsecurity.conf # waf config /etc/nginx/nginx.conf.modsecurity # nginx sample conf /usr/lib64/nginx/modules/ngx_http_modsecurity_module.so /usr/share/nginx/modules/mod-modsecurity.conf /usr/share/doc/nginx-mod-modsecurity/README.md ...
Коннектор расширяет Nginx, предоставляя некоторые дополнительные директивы конфигурации. В следующих разделах будут продемонстрированы некоторые из примеров директив в файле nginx.conf.modsecurity. Полный список директив можно найти в файле README.md или на странице проекта на GitHub.
Включите firewall веб-приложений
nginx.conf.modsecurity
– это конфигурация firewall для Nginx, которую мы собираемся запустить. Откомментируйте строки modsec*, как показано ниже.
sudo sed -i 's/#modsec/modsec/g' /etc/nginx/nginx.conf.modsecurity grep -C2 modsecurity /etc/nginx/nginx.conf.modsecurity
# Enable ModSecurity WAF, if need modsecurity on; # Load ModSecurity CRS, if need modsecurity_rules_file /etc/nginx/modsecurity.conf;
Запустите сервер в оболочке и просмотрите журналы, чтобы убедиться, что 7 правил по умолчанию, определенных в modsecurity.conf, загружены.
sudo nginx -c /etc/nginx/nginx.conf.modsecurity head /var/log/nginx/error.log
2023/10/21 23:55:09 [notice] 46218#46218: ModSecurity-nginx v1.0.3 (rules loaded inline/local/remote: 0/7/0) 2023/10/21 23:55:09 [notice] 46218#46218: using the "epoll" event method 2023/10/21 23:55:09 [notice] 46218#46218: nginx/1.24.0 2023/10/21 23:55:09 [notice] 46218#46218: OS: Linux 6.5.7-200.fc38.x86_64
Проверьте правила по умолчанию, отправив некоторые данные, которые не соблюдают формат заголовка content-type.
curl -X POST http://localhost -H "Content-Type: application/json" --data "<xml></xml>" [user@fedora ~]$ tail /var/log/modsec_audit.log
---rH5bFain---H-- ModSecurity: Warning. Matched "Operator `Eq' with parameter `0' against variable `REQBODY_ERROR' (Value: `1' ) [file "/etc/nginx/modsecurity.conf"] [line "75"] [id "200002"] [rev ""] [msg "Failed to parse request body."] [data "JSON parsing error: lexical error: invalid char in json text.\x0a"] [severity "2"] [ver ""] [maturity "0"] [accuracy "0"] [hostname "10.0.2.100"] [uri "/"] [unique_id "169795900388.487044"] [ref "v121,1"]
Расширение firewall веб-приложений с помощью набора основных правил OWASP
По умолчанию коннектор Nginx поставляется с 7 правилами. Набор основных правил OWASP v3.3.5 более обширен и охватывает множество сценариев.
Скопируйте архив и извлеките правила.
curl -fSL https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.5.tar.gz --output /tmp/v3.3.5.tar.gz sudo tar -C /etc/nginx -xvf /tmp/v3.3.5.tar.gz tree -L 1 /etc/nginx/
/etc/nginx/ ├── conf.d ├── default.d ├── modsecurity.conf # waf config ├── nginx.conf ├── nginx.conf.modsecurity # nginx waf enabled ├── coreruleset-3.3.5 ├ ├── rules # rules directory ├ ... ├ ...
Теперь у вас есть каталог rules в папке конфигурации nginx со всеми текущими правилами OWASP. Далее сделайте так, чтобы Nginx знал об этих правилах. Следующие инструкции взяты из файла OWASP./INSTALL.
Создайте файл crs.conf и включите все соответствующие файлы конфигурации в файл конфигурации глобального firewall веб-приложений (modsecurity.conf).
sudo cp /etc/nginx/coreruleset-3.3.5/crs-setup.conf.example /etc/nginx/coreruleset-3.3.5/crs.conf echo -e "\nInclude /etc/nginx/coreruleset-3.3.5/crs.conf" | sudo tee -a /etc/nginx/modsecurity.conf echo -e "\nInclude /etc/nginx/coreruleset-3.3.5/rules/*.conf" | sudo tee -a /etc/nginx/modsecurity.conf tail /etc/nginx/modsecurity.conf
Include /etc/nginx/coreruleset-3.3.5/crs.conf Include /etc/nginx/coreruleset-3.3.5/rules/*.conf
Согласно документам, порядок включения этих файлов важен. Команда tee, показанная выше, поместила новые строки Include в конец файла modsecurity.conf. Теперь перезагрузите Nginx с этой новой конфигурацией.
sudo nginx -s stop && sudo nginx -c /etc/nginx/nginx.conf.modsecurity tail /var/log/nginx/error.log
2023/10/22 10:53:23 [notice] 202#202: exit 2023/10/22 10:53:50 [notice] 230#230: ModSecurity-nginx v1.0.3 (rules loaded inline/local/remote: 0/921/0) 2023/10/22 10:53:50 [notice] 230#230: using the "epoll" event method 2023/10/22 10:53:50 [notice] 230#230: nginx/1.24.0 2023/10/22 10:53:50 [notice] 230#230: OS: Linux 6.5.7-200.fc38.x86_64 2023/10/22 10:53:50 [notice] 230#230: getrlimit(RLIMIT_NOFILE): 524288:524288 2023/10/22 10:53:50 [notice] 231#231: start worker processes
Напомним, что Nginx успешно загрузил 921 правило. Также необходимо провести некоторые тесты, чтобы убедиться, что правила действительно проверяются firewall’ом веб-приложений. Здесь мы снова ссылаемся на фрагмент Testing the Installation из файла ./INSTALL.
curl "http://localhost/?param=''><script>alert(1);</script>" tail /var/log/modsec_audit.log
... ---8NSpdnLe---H-- ...
Заключение
В этом развертывании используются стандартные правила плюс OWASP Core Rule Set v3.3.5. Firewall, продемонстрированный выше, работает в режиме обнаружения и регистрирует необычные действия. Запуск firewall в режиме предотвращения требует дополнительных изменений в modsecurity.conf. Обратитесь к ModSecurity Reference Manual v3.x для получения инструкций по включению режима предотвращения.
Комментарии (0)