Pull to refresh

Защита для NGINX — NAXSI

Reading time3 min
Views38K

Что такое 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 проекта.
Tags:
Hubs:
Total votes 102: ↑100 and ↓2+98
Comments60

Articles