Веб-приложения, отличающиеся разнообразием и высокой интерактивностью, сегодня представляют собой большую проблему безопасности. Ведь по статистике большинство современных атак направлены именно на веб-сервисы, и привычные инструменты, работающие на сетевом уровне, их не могут остановить. Поэтому специальные решения, позволяющие защитить веб-сайты, востребованы как никогда. Для небольших проектов коммерческие решения обычно чересчур дорогое удовольствие, поэтому появление очередного open source WAF само по себе событие.

 

Проект Shadow Daemon

Очевидно, лучше всего защищаться от атак на веб-приложения правильно написанным кодом, но даже в тех проектах, где уделяют серьезное внимание тестированию, постоянно находят и будут находить уязвимости. Модули, написанные сторонними разработчиками, вообще потенциальная брешь в безопасности. Не секрет, что ошибки обнаруживают даже в аддонах, предназначенных для защиты сайтов. Повышая безопасность, они сами оказываются проблемой. В этом случае WAF (Web Application Firewall) становится чуть ли не единственным препятствием, не позволяющим хакеру выполнить свои действия.

Shadow Daemon — это небольшое приложение, которое обеспечивает безопасность веб-сервисов, перехватывает запросы, отфильтровывает вредоносные параметры и протоколирует все события. Написан Хендриком Бухвальдом (Hendrik Buchwald) как университетский проект и в настоящее время служит неплохой заменой коммерческим WAF, особенно для небольших проектов. Версия 1.0 была представлена в январе 2015-го, сегодня уже доступна версия 2.

SD прост и не требует особых навыков, хотя, конечно, при их наличии можно легко адаптировать его под любые условия. Идея состоит в том, что система настроена не на конкретные уязвимости в конкретном приложении, а на уязвимые места в общем: SQL-команды в запросе, параметры HTML/JavaScript, используемые в XSS, аномальные параметры в массивах и так далее. В отличие от многих других брандмауэров веб-приложений Shadow Daemon не блокирует вредоносные запросы. Вместо этого он только отфильтровывает опасные части и позволяет запросу выполняться дальше. Это делает невозможным проникновение, но вводит в заблуждение атакующего. Для точного обнаружения запросов используются белый и черный списки, которые администратор может редактировать под свои условия.

В черном списке при помощи регулярных выражений производится поиск известных атак во входных данных. Каждый фильтр имеет вес, задающий некое значение неблагонадежности запроса. Значение всех фильтров суммируется и сравнивается с пороговым значением. Если показатель запроса больше, чем установленный порог, запрос классифицируется как угроза. Черный список хотя и обнаруживает большинство алгоритмов атак, но не гарантирует полную безопасность. Всегда есть вероятность, что будет подобран запрос, который пройдет фильтры. Черные списки обязательно должны быть включены.

Белый список определяет, как должны выглядеть нормальные входящие данные. Если под запрос не найдется соответствующее правило, он будет отнесен к угрозе. Если правило найдено, алгоритм проверяет набор символов, придерживается ли запрос ограничения длины. Это позволяет обнаружить любую атаку с достаточно низким порогом ложных срабатываний.

Третий компонент — алгоритм целостности (integrity), сверяющий контрольную сумму запроса и правила при наличии правила в белом списке (если его нет, то запрос однозначно рассматривается как угроза). Словарь хешей содержит алгоритмы и соответствующие им значения исполняемого файла сценария. Белый список и integrity можно первое время не использовать, чтобы убедиться, что все работает нормально.

Shadow Daemon построен по модульному принципу, когда подсистема захвата (connector), анализа (демон shadowd) и интерфейс разделены для лучшей гибкости, расширяемости и обеспечения безопасности. Необязательный веб-интерфейс позволяет исследовать атаки в мельчайших подробностях. В комплект входят скрипты, которые могут быть использованы для отправки отчетов по электронной почте и ротации журналов. Если нужно просто защитить сайт, не вникая в детали и не подстраивая работу Shadow Daemon, то интерфейс можно не ставить.

Коннектор «подключается» к интерпретатору и перехватывает соединение между веб-сервером и приложением и передает по TCP (в JSON-формате) демону shadowd IP, идентификаторы ввода/пути, входные данные, хеш и прочую информацию. В ответ получает один из шести статусов от OK: 1 до CRITICAL_ATTACK: 6 и массив идентификаторов входа. На данный момент доступны коннекторы, обеспечивающие работу с приложениями, написанными на PHP, Perl и Python, планируется добавление других языков.

Веб-приложения могут отличаться по настройкам, и общие правила могут не подходить для всех. Поэтому в SD реализованы профили, позволяющие указать специфические для каждого хоста установки. В общем, лучше использовать профиль для каждого приложения.

Управление профилями в Shadow Daemon
Управление профилями в Shadow Daemon
 

Установка Shadow Daemon

Для установки демона shadowd проект предлагает исходные тексты и пакеты для Debian/Ubuntu и Red Hat / CentOS. Для Ubuntu доступен и репозиторий. Кроме того, можно использовать образ Docker, в этом случае получаем сразу полностью настроенную и готовую к работе систему.

$ sudo add-apt-repository ppa:zit-hb/shadowd
$ sudo apt-get update
$ sudo apt-get install shadowd

Переходим к настройке базы данных. В настоящее время поддерживается PostgreSQL или MySQL. В /usr/share/shadowd лежат шаблоны, нужно только выбрать и импортировать подходящий. Импортируем шаблон для MySQL:

$ mysql -uroot -p
> CREATE DATABASE shadowd;
> USE shadowd;
> GRANT ALL PRIVILEGES ON shadowd.* to 'shadowd'@'localhost' IDENTIFIED BY 'password';
> FLUSH PRIVILEGES;
> source /usr/share/shadowd/mysql_layout.sql;

Все настройки shadowd прописаны в конфигурационном файле /etc/shadowd/shadowd.ini. Файл в общем несложный, и практически все параметры прокомментированы; кроме подключения к базе данных, можно оставить как есть:

$ sudo nano /etc/shadowd/shadowd.ini

# Server
#port=9115

# Потоки нужно подстроить под свою нагрузку
#threads=15

# Daemon

log=/var/log/shadowd.log

# Database

db-driver= mysql
db-host=127.0.0.1
db-port=3306
db-name=shadowd
db-user=shadowd
db-password=password
Редактируем shadowd.ini
Редактируем shadowd.ini

Перезапускаем сервис:

$ sudo service shadowd restart

Проверяем:

$ sudo netstat -tpln | grep shadowd
tcp    0    0 127.0.0.1:9115    0.0.0.0:*    LISTEN    3094/shadowd

Ставим коннектор для PHP.

$ git clone https://github.com/zecure/shadowd_php.git

Настраиваем коннектор для PHP, чтобы Shadow Daemon начал защищать систему. Ничего компилировать не нужно, просто копируем содержимое src в любое удобное место, но надо убедиться, что веб-сервер может прочитать файлы.

$ sudo mkdir /usr/share/shadowd/php
$ sudo cp -Rv shadowd_php/src/* /usr/share/shadowd/php

Теперь следует сообщить PHP о новом скрипте. В зависимости от ситуации это можно сделать несколькими способами. Если защита нужна для всех сайтов, то прописываем в php.ini:

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


Комментарии

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

Как работает Linux: от нажатия кнопки включения до рабочего стола

Лучший способ понять, как работает операционная система, — это проследить поэтапно ее загр…