Что такое NAXSI ?
NAXSI = NGINX ANTI XSS & SQL INJECTION
Проще говоря, это файрвол веб-приложений (WAF) для NGINX, помогающий в защите от XSS, SQL-инъекций, CSRF, Local & Remote file inclusions.
Отличительными особенностями его являются быстрота работы и простота настройки. Это делает его хорошей альтернативой например mod_security и апачу.
Зачем нужен NAXSI ?
Очевидно, лучше всего защищаться от вышеперечисленных атак правильно написанным кодом. Но есть ситуации, когда WAF (и в частности naxsi), поможет:
- Низкое качество кода сайта, при отсутствии возможности/ресурсов все выкинуть и переписать нормально.
- “Закрытый” код, в котором невозможно исправить ошибки.
- Неизвестное качество кода в важном для бизнеса участке.
Установка
Ubuntu, Debian, Netbsd, Freebsd: доступно в виде пакета.
Например, в серверной убунте 12.04 достаточно сделать
apt-get install nginx-naxsi
Другие Linux-системы:
Если пакеты еще не появились, собираем nginx + naxsi из исходников:
wget http://nginx.org/download/nginx-x.x.xx.tar.gz
wget http://naxsi.googlecode.com/files/naxsi-x.xx.tar.gz
tar xvzf nginx-x.x.xx.tar.gz
tar xvzf naxsi-x.xx.tar.gz
cd nginx-x.x.xx/
(вместо x.x.x.x — поставьте актуальные версии)
Проверяем, что есть зависимости libpcre (опционально, libssl для https), и компилим:
./configure --add-module=../naxsi-x.xx/naxsi_src/ [тут ваши опции для nginx]
make
make install
Как работает NAXSI
NAXSI умеет проверять по наборам правил GET-запрос, заголовки HTTP (например, cookies) и тело POST-запроса.
Базовый набор запретительных правил довольно простой и запрещает различные “опасные” символы и ключевые слова sql.
Этот набор правил достаточно жесткий, и может помешать корректной работе сайта в некоторых случаях, поэтому в NAXSI реализованы “белые” списки, разрешающие использовать запрещенные символы (правила) в нужном вам контексте.
При проверке запроса, он прогоняется по всем запретительным правилам, за исключением помещенных в белые списки для его контекста, и производится подсчет “штрафных” очков по шести категориям: $SQL, $XSS, $RFI, $TRAVERSAL, $EVADE, $UPLOAD
Если количество “штрафных” очков выше порогового уровня, запрос считается опасным и производится внутренний (для nginx) redirect на DeniedUrl, указанный в конфигурации. В виде get-параметров на указанный url передается исчерпывающая информация о причине блокировки, оригинальном url и ip агрессора. По указанному адресу вы можете или просто выдавать return 403; или же накапливать информацию об атаке в вашей NIDS-системе.
NAXSI умеет работать в “обучающемся” и “боевом” режимах.
В обучающемся режиме, NAXSI сам может подготовить для вас набор “белых” списков, основываясь на активности пользователей. Проще говоря, если пользователи часто нарушают одно из правил по одному и тому же URL — правило вносится в белый список, и не блокируется. Эти списки стоит просмотреть и откорректировать после окончания обучения.
В боевом режиме нарушение просто ведет на DeniedUrl.
Настройка NAXSI
Раскомментируем в конфигурации nginx включение базовых запретительных правил
include /etc/nginx/naxsi_core.rules;
Теперь добавим в конфигурацию виртуального хоста желаемые настройки (рекомендую вынести их в отдельный файл и подключать через include):
LearningMode;
SecRulesEnabled;
DeniedUrl "/RequestDenied";
#include "/etc/nginx/mynaxsi.rules";
## check rules
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
Разберем подробней, что значат эти команды:
- LearningMode — включен режим обучения. Запросы не блокируются, формируется вайт-лист.
- SecRulesEnabled — NAXSI включен для данной локации. Если захотим выключить для другой локации (например, защищенной внутренней зоны), то делаем в ней SecRulesDisabled.
- DeniedURL — URL редиректа для запрещенных запросов.
- CheckRule — проверка “штрафных очков” запроса по категориям.
- /etc/nginx/mynaxsi.rules — сгенерированные правила (пока не сгенерили — закомментированные).
Белые списки могут формироваться на основании работы режима обучения, или же через анализ лог-файлов.
Как работать с правилами и списками, а также смотреть статистику и бенчмарки, я расскажу в следующей статье.
Если вас заинтересовал NAXSI, вы можете ознакомиться с хорошей документацией на Wiki проекта
Автор: mentatxx