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

Что такое WAF

Web application firewall (WAF) — это совокупность программных мониторов и фильтров, предназначенных для обнаружения и блокирования сетевых атак на веб-приложение. WAF устанавливается перед защищаемым веб ресурсом и анализирует все передаваемые HTTP запросы на наличие вредоносного кода и потенциально опасную активность злоумышленников. При проведении анализа WAF основывается на различных механизмах сигнатурного анализа, правилах, средствах анализа аномалий. Также в своей работе WAF могут использовать нейросети и различные индикаторы атак.

В случае обнаружения плохих запросов WAF может выполнить следующие действия: удалить из запроса опасные данные по аналогии с тем, как антивирус пытается лечить зараженные файлы, также запрос может быть заблокирован целиком. Так возможна блокировка источника атаки на сетевом уровне, то есть, мы блокируем все обращения с данного IP.

WAF или IPS?

Как известно, средств защиты много не бывает. Эшелонированная защита, построенная на решениях от различных вендоров это как правило хорошее, но дорогое и сложное в администрировании решение. Примерами таких эшелонированных решений по защите можно назвать антивирусные системы, когда на периметре, на почтовом сервере, на файлообменнике и конечно на пользовательских узлах используются различные антивирусы. В таком случае, даже если один из них пропустит вредонос, остальные скорее всего его обнаружат.  Но очевидным недостатком такого подхода является высокая дороговизна обслуживания такой системы защиты. Поэтому иногда наоборот стараются сэкономить на однотипных средствах защиты. Так, возвращаясь к WAF, зачастую в целях экономии вместо Web Application Firewall для защиты веб ресурсов используют более универсальное решение – Intrusion Prevention System (IPS), системы предотвращения вторжений. Здесь и далее мы под IPS будем подразумевать только средство, позволяющее не просто обнаружить (IDS), а именно заблокировать опасную активность. Замечу, что сравнивать IDS и WAF бесполезно, так как IDS автоматически ничего не блокирует, в отличие от WAF.

Итак, чем же отличаются IPS и WAF? И то, и другое средство ставится в разрыв и анализирует сетевой трафик. Оба средства так или иначе анализируют пакет на уровне приложений. Однако, WAF как более узконаправленное решение, направлен на анализ именно HTTP трафика, разбор его содержимого, выявление потенциально опасных команд и данных. В то время как IPS как сетевое средство защиты в большей степени направлен на выявление сетевых атак на различных уровнях иерархической модели.

Кроме того, WAF ориентирован на выявление атак из списка OWASP Top 10. В рамках данной статьи мы не будем подробно погружаться в особенности эксплуатации каждой из уязвимостей из этого списка. Однако список этих уязвимостей приведен ниже.      

 OWASP Top 10:

  • Инъекции (Injections).

  • Нарушенная аутентификация (Broken Authentication).

  • Раскрытие критически важных данных (Sensitive Data Exposure).

  • Внешние объекты XML (XXE) (XML External Entities (XXE)).

  • Нарушенный контроль доступа (Broken Access control).

  • Неправильная конфигурация безопасности (Security misconfigurations).

  • Межсайтовый скриптинг (XSS) (Cross Site Scripting (XSS)).

  • Небезопасная десериализация (Insecure Deserialization).

  • Использование компонентов с известными уязвимостями (Using Components with known vulnerabilities).

  • Недостаточно подробные журналы и слабый мониторинг (Insufficient logging and monitoring).

Также IPS часто ориентированы на выявление уязвимостей из базы CVE, в то время как WAF больше ориентирован на уязвимости CWE. В чем отличие между этими базами? CVE означает Common Vulnerabilities and Exposures. Уязвимости, представленные в этой базе описывают ошибки, допущенные при разработке конкретных продуктов. CWE расшифровывается как Common Weakness Enumeration. В этой базе описываются классы ошибок разработчиков, которые могут привести к уязвимостям в конкретных версиях ПО.

Для лучшего понимания приведем небольшой пример. CVE-2023-21554 – представляет собой описание уязвимости удаленного выполнения произвольного кода Microsoft Message Queuing Remote Code Execution Vulnerability, в описании уязвимости можно найти версии ОС, которые ей подвержены.

Для сравнения уязвимость CWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer, неправильное ограничение операций в пределах буфера памяти. Ее описание на сайте cwe.mittre.org содержит общие примеры кода, содержащие уязвимости данного типа, и содержит ссылки на примере уязвимостей CVE для конкретных продуктов.

Таким образом, CVE это конкретные уязвимости в конкретных продуктах, в то время как CWE это типы уязвимостей без привязки к конкретным продуктам.

Как работают WAF

По аналогии с другими средствами защиты WAF используют различные механизмы для выявления опасных активностей. Такими механизмами является использование сигнатур и правил.

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

Альтернативным или дополняющим вариантом является использование правил. Правила для выявления атак теоретически позволяют выявлять даже новые атаки на основе анализа поведения запросов. Однако, для составления правил вручную требуются значительные ресурсы. И в качестве решения разработчики WAF часто используют машинное обучение, когда система сама какое-то время обучается на передаваемых данных. Недостатками использования машинного обучения являются высокие требования к аппаратным ресурсам и сложность реализации.

WAF Apache ModSecurity

 WAF бывают программные и аппаратные, а также платные и бесплатные. Мы не будем касаться платных решений, а вместо этого рассмотрим WAF Apache ModSecurity. Это программный модуль, который устанавливается вместе с веб сервером Apache.

Рассмотрим процесс установки данного WAF на ОС Ubuntu 22.04. Прежде всего необходимо обновить все пакеты.

sudo apt update

sudo apt upgrade

Если на сервере еще не установлен Apache, то его необходимо установить с помощью команды:

apt install apache2

Далее установим необходимый пакет безопасности:

apt install libapache2-mod-security2

Для того, чтобы наш модуль mod-security был подключен необходимо перезапустить apache.

systemctl restart apache2

Далее необходимо выполнить ряд манипуляций с пакетом  OWASP ModSecurity CRS и файлами настроек:

mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

cd ~

git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git

cd ~/owasp-modsecurity-crs

mv crs-setup.conf.example /etc/modsecurity/crs-setup.conf

mv rules/ /etc/modsecurity/

Затем нам необходимо отредактировать файл security2.conf

nano /etc/apache2/mods-available/security2.conf

В самом файле необходимо добавить значения Include и IncludeOptional.

<IfModule security2_module>

   # Default Debian dir for modsecurity's persistent data

   SecDataDir /var/cache/modsecurity

 

   # Include all the *.conf files in /etc/modsecurity.

   # Keeping your local configuration in that directory

   # will allow for an easy upgrade of THIS file and

   # make your life easier

   IncludeOptional /etc/modsecurity/*.conf

   Include /etc/modsecurity/rules/*.conf

</IfModule>

После этого необходимо перезапустить Apache.

systemctl restart apache2

Для тестирования работы правила необходимо в настройках секции VirtualHost в конфигурационном файле Apache указать следующее:

SecRuleEngine On

SecRule ARGS:modsecparam "@contains test" "id:4321,deny,status:403,msg:'ModSecurity test rule has triggered'"

Тогда, если в браузере выполнить запрос

localhost/index.html?modsecparam=test

то мы получим ошибку 403, что говорит о том, что WAF успешно заблокировал запрос в соответствии с правилом.

Заключение

Сегодня мы поговорили о том, что такое WAF, какие они бывают и в чем их отличия от IPS. В следующей статье мы поговорим об NGFW.

А сейчас приглашаю всех желающих на открытый урок по современным средствам периметральной безопасности, который скоро пройдет в OTUS. Узнать подробнее и записаться можно на странице курса «Внедрение и работа в DevSecOps».

Комментарии (0)