19 Февраля, 2015

СОИБ. Внедрение. Настройка WAF, часть 1

Сергей Борисов
Некоторые тестеры-разоблачители WAF, считают что достаточно поставить коробочку / подключить сервис и всё - можно проводить свои изощренные эксперименты и выдавать разоблачительные статьи.

Посмотрим какие настройки должны выполняться на WAFв реальных проектах (не считая инициализации, базовых и сетевых настроек, подключения онлайн-сервисов)  и разберем подробно для чего эти настройки нужны:
·        Так как мы глубокий анализ  трафика webтрафика задача ресурсоемкая, а мы хотим эффективно использовать ресурсы нашего WAF, то нам нужно точное определение области защиты (весь трафик не касающийся области защиты будем пропускать без проверок):
o   определяем защищаемые площадки (Sites)
o   задаем перечень ip-адресов серверов webприложений (ServerGroups)
o   для каждого сервера указываем сервисы и порты, связанные с webприложениями (webservices)
o   определяем все webприложения, расположенные на наших webсервисах (а их может быть больше 1, например:  www.microtest.ru, www.security-microtest.ru) и задаем соответствие приложений и URL. В дальнейшем это нам поможет включать разные политики на разные приложения,  а при мониторинге WAFи реагировании на инциденты поможет быстро определить приложения, на которые производится атака. Это важно -  за разные приложения могут отвечать разные группы разработчиков, специалистов поддержки

·        Наиболее критические webприложения будут использовать HTTPSдля защиты передаваемой информации. Чтобы наш WAFхоть что-то увидел нужно импортировать SSLсертификаты с закрытыми ключами для каждого из webсерверов (SSLinspection)

·        Задаем  шаблон сообщения об ошибке, для тех случаев когда запросы были заблокированы WAF-ом. Это позволит нам на этапе опытной эксплуатации определять и отделять ложные срабатывания WAFот ошибок webприложений.
<html><header><title>Error</title></header>
<body><H2>Внимание</H2><br>
Ваш запрос к webприложению не может быть выполнен в связи с нарушением политик безопасности. Свяжитесь с службой поддержки для получения дополнительной информации.<br>
Eventid: $(EVENT_ID)<br>
</body></html>
·        Проблемой для нас будет, если используются балансировщики трафика, а в крупных webприложениях они используются:


o   разместив WAFдо балансировщиков, мы видим в поле ip-адреса назначения запросов адреса балансировщиков, а не адреса защищаемых webсерверов.  
o   разместив WAFпосле балансировщиков мы видим в поле ip-адреса источика запросов – адреса балансировщиков, а не пользователей или атакующих.
o   можно подключить WAF до и после балансировщиков, но в таком случае мы будем обрабатывать 2 раза один и тот же трафик и получать в 2 раза больше событий и нарушений
Одно из красивых решений:  разместить WAFпосле балансировщиков, а на балансировщиках настроить опцию регистрации форвардинга, в которой в запрос будет добавляться указание ip-адреса источника (в опцию X-Forwarded-For). В таком случае, на WAFдля определенных webсервисов нам надо будет настроить распознавание ip-адреса источника из поля X-Forwarded-For

Так-же мы не хотим чтобы ip-адреса балансировщиков попадали в долговременный черный список (в отличае от ip-адресов атакующих) нужно добавить в исключения в настройках реакций WAF


·        Полезным было бы задать в WAFструктуру webприложений с указанием всех каталогов, страниц и используемых параметров на каждой странице. Это пригодится нам для тонкой настройки политик в дальнейшем (например, мы захотим явно указать все страницы, на которых разрешено принимать данные от пользователя или например, захотим отметить все страницы, на которых могут отображаться персональные данные).

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

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

Жду отзывов – интересны ли вам подобные статьи и стоит ли делать продолжение?