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

в 9:20, , рубрики: nginx, waf, Веб-разработка, информационная безопасность, метки: ,

Что такое 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

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js