24.02.2025
С 2017 года мы разрабатываем Немезида ВАФ, в работу которой закладываем современные механизмы защиты веб-приложений и API. В этой заметке мы коротко поделимся результатами улучшений продукта за последние пол года.
Анализ запросов по протоколу Websocket
Websocket — клиент-серверный протокол, позволяющий обмениваться данными поверх протокола TCP в реальном времени. Для работы по протоколу Websocket клиент формирует специальный HTTP-запрос, на который сервер отвечает определенным образом, т.е. происходит переключение с протокола HTTP на Websocket, где взаимодействие происходит в рамках одного соединения, позволяя и клиенту, и серверу отправлять данные в любое время в рамках одного соединения. Такой механизм очень удобен, например, при реализации чат-приложений.
Websocket является популярным протоколом и позволяет проводить различные атаки (SQLi
, XSS
, RCE
, DDoS
и т.д.) внутри туннеля. Ранее анализ ограничивался выявлением атак на этапе установки соединения/туннеля — до момента ответа сервера с кодом 101 Switching Protocols об изменении протокола взаимодействия. Начиная с версии 5.1.4724
функционал Немезида ВАФ расширен и позволят анализировать запросы внутри Websocket-туннеля. Для активации функционала потребуется:
- подключить модуль
ngx_http_waf_ws_module.so
для анализа содержимого по протоколу Websocket; - подключить опцию
nwaf_ws_proxy_pass
в секцииlocation
файла конфигурации виртуального хоста.
Улучшения для персональных правил блокировки
Начиная с версии 5.1.3544
в фильтрующей ноде расширен список поддерживаемых опций для персональных правил блокировки (ERL
). Теперь к условиям можно добавить проверку принадлежности IP-адреса источника запроса к спискам выходных нод сети Tor
или Proxy
/VPN
-серверов, а также блокировать запросы, в которых отсутствуют заголовки User-Agent
или Referer
.
Обновлен функционал выявления атак методом перебор и флуда
Функционал выявления атак методом перебора и флуда долгое время оставался без изменений, но со временем мы поняли, что для некоторых приложений и технологий способ его настройки был недостаточно гибок и требовал доработки. Начиная с версии 6.1.1451
Nemesida AI MLC позволяет использовать дополнительные условия передачи запросов на анализ.
Например, если выбрать для URL-адреса example.com/auth.php
зону выявления атаки BODY
, то анализ будет проводиться только для зоны BODY
.
Пример запроса на API:
# curl http://api.example.com:8080/nw-api/v2/set_mlc_settings --header 'Content-type: application/json' --data '{ "key": "%Лицензионный ключ%", "set": { "active": true, "brute__bf_detect": [{"url": "example.com/auth.php", "brute": true, "flood": false, "zone": ["body"]}, ...], } }'
Условия активации механизма анализа можно настроить более гибко — по наличию произвольных значений в зонах BODY
или ARGS
.
Пример запроса на API:
# curl http://api.example.com:8080/nw-api/v2/set_mlc_settings --header 'Content-type: application/json' --data '{ "key": "%Лицензионный ключ%", "set": { "active": true, "brute__bf_detect": [{"url": "example.com", "brute": true, "flood": false, "zone": ["body"], "condition": {"args": ["user_login"]}}, ...], } }'
Таким образом если указать для домена example.com
зону выявления атаки BODY
, то анализ будет проводиться только для зоны BODY
, при этом анализироваться будут только те запросы, в которых значение user_login
присутствует в зоне ARGS
(например, example.com/?user_login
).
В первую очередь изменение полезно для веб-приложений, у которых нет выделенного URL для авторизации/регистрации.
Противодействие паразитным ботам и веб-скрейпингу
Модуль выявления DDoS
L7 в Немезида ВАФ расширился. Теперь наравне с обнаружением паразитных ботов функционал позволяет выявлять и атаки типа веб-скрейпинг
(парсинг сайта).
GeoCC: обновленная база определения страны по IP-адресу
В своей работе компоненты Немезида ВАФ используют геолокационную IP-базу, которая входит в состав поставки в виде:
GeoCC
— Geo County Code, принадлежность IP-адресов к стране;Privacy IP DB
— база IP-адресов, которые являются выходными нодами Tor, VPN и Proxy.
Обе базы автоматически обновляются и не требуют действий со стороны администратора WAF.
Недавно мы выпустили более точную GeoCCv2
базу, которая уже доступна компонентам Немезида ВАФ после их обновления. Чем точнее база — тем меньше шансов допустить ошибку при определении страны по IP-адресу.
Оптимизация потребления ресурсов фильтрующей ноды
Основная задача фильтрующей ноды — выявление и блокирование поступающих на веб-сервер паразитных запросов. Для этого они проходят через несколько подсистем анализа: сигнатурный анализ (обязательно), дополнительный анализ машинным обучением (при необходимости), анализ модулем API Firewall (при необходимости) и т.д.
Некоторое время назад мы столкнулись с ситуацией, когда в определенных случаях на дополнительный анализ модулем машинного обучения отправлялись легитимные запросы, не имеющие признаки атаки, что увеличивало потребление аппаратных ресурсов.
Помимо анализа сигнатурным методом на фильтрующей ноде происходит множественная нормализация и декодирование запроса, чтобы исключить попытки обойти механизмы защиты (о техниках обхода мы рассказывали на конференции Positive Hack Days).
При декодировании запроса происходит повторный поиск сигнатур, и если они были обнаружены, то считалось, что в запросе есть аномалия и необходим дополнительный анализ модулем машинного обучения. Например, при обращении по адресу example.com/request/public/sell.php
при Base64-декодировании URL-адреса /request/public/sell.php
динамический модуль получал строку -'?e
, в которой при повторном анализе обнаруживалась сигнатура '
. Этого было достаточно для отправки запроса на дополнительный анализ.
Из-за особенности работы модуля машинного обучения при интенсивном трафике такое поведение вызывало повышенное потребление аппаратных ресурсов фильтрующей ноды. Начиная с версии 5.1.3544
фильтрующей ноды этот недостаток был устранен.
Изменения позволили сократить нагрузку на фильтрующую ноду и довести до минимума вероятность избыточной отправки легитимных запросов на дополнительный анализ.
Расследование инцидентов
В последнем обновлении фильтрующей ноды Немезида ВАФ и Nemesida WAF API появилась возможность фиксации всех поступающих на фильтрующую ноду запросов. Такой функционал позволяет ретроспективно расследовать инциденты безопасности в случае необходимости.
Дорожная карта ближайших релизов
Настройка веб-сервера Nginx/Angie на фильтрующей ноде, используя функционал Личного кабинета. В настоящий момент функционал настройки доступен через вызовы API, но в ближайших релизах Личного кабинета настраивать веб-сервер можно будет и через веб-интерфейс.