Крутой WAF 
Всё о межсетевых экранах веб-приложений (WAF) с точки зрения безопасности. 🔥
Предисловие: Изначально это была моя личная коллекция WAF. Я делаю её открытым исходным кодом в надежде, что она будет полезна пентестерам и исследователям. Как говорится, "сообщество просто учится друг у друга."

Краткое определение: Брандмауэр — это точка обеспечения политики безопасности, расположенная между веб-приложением и клиентской конечной точкой. Эта функциональность может быть реализована в программном или аппаратном обеспечении, работать на аппаратном устройстве или на обычном сервере под управлением типичной операционной системы. Это может быть отдельное устройство или встроенный компонент других сетевых элементов. (Источник: PCI DSS IS 6.6)
Брандмауэр веб-приложений (WAF) располагается между пользователем и веб-приложением и предназначен для предотвращения любой вредоносной активности, достигающей веб-приложения. WAF либо отфильтровывает вредоносную часть запроса, либо просто блокирует его.
Не стесняйтесь вносить вклад.
Содержание:
Введение:
Как работают WAF:
- Использование набора правил для различения обычных и вредоносных запросов.
- Иногда они используют режим обучения для автоматического добавления правил на основе изучения поведения пользователей.
Режимы работы:
- Негативная модель (на основе чёрного списка) - Модель чёрного списка использует предварительно заданные сигнатуры для блокировки запросов, которые явно являются вредоносными. Сигнатуры WAF, работающих в негативной модели, специально созданы для предотвращения атак, эксплуатирующих определённые уязвимости веб-приложений. Брандмауэры веб-приложений, работающие по модели чёрного списка, являются отличным выбором для веб-приложений, доступных из публичного интернета, и весьма эффективны против основных уязвимостей. Например, правило, блокирующее все входные данные
<script>*</script>, предотвращает базовые атаки межсайтового скриптинга.
- Позитивная модель (на основе белого списка) - Модель белого списка разрешает только веб-трафик в соответствии с определёнными критериями. Например, она может быть настроена на разрешение только HTTP GET-запросов с определённых IP-адресов. Эта модель может быть очень эффективной для блокировки потенциальных крупномасштабных атак, но также будет блокировать много легитимного трафика. Брандмауэры с моделью белого списка, вероятно, лучше всего подходят для веб-приложений во внутренней сети, которые предназначены для использования только ограниченной группой людей, например, сотрудниками.
- Смешанная/Гибридная модель (Инклюзивная модель) - Гибридная модель безопасности сочетает как белый, так и чёрный списки. В зависимости от различных конфигурационных особенностей, гибридные брандмауэры могут быть лучшим выбором как для веб-приложений во внутренних сетях, так и для веб-приложений в публичном интернете. Хорошим сценарием может быть, когда веб-приложение обращено к публичному интернету (использует чёрные списки), а панель администратора должна быть доступна только подмножеству пользователей (использует белые списки).
Методология тестирования:
Где искать:
- Всегда обращайте внимание на распространённые порты, которые раскрывают наличие WAF, а именно порты
80, 443, 8000, 8080 и 8888. Однако важно отметить, что WAF может быть легко развёрнут на любом порту, на котором работает HTTP-сервис. Полезно сначала перечислить порты HTTP-сервисов, а затем искать WAF.
- Некоторые WAF устанавливают свои собственные cookies в запросах (например, Citrix Netscaler, Yunsuo WAF).
- Некоторые ассоциируют себя с отдельными заголовками (например, Anquanbao WAF, Amazon AWS WAF).
- Некоторые часто изменяют заголовки и перемешивают символы, чтобы запутать атакующего (например, Netscaler, Big-IP).
- Некоторые раскрывают себя в заголовке
Server (например, Approach, WTS WAF).
- Некоторые WAF раскрывают себя в содержимом ответа (например, DotDefender, Armor, Sitelock).
- Другие WAF отвечают необычными кодами ответа на вредоносные запросы (например, WebKnight, 360 WAF).
Методы обнаружения:
Чтобы идентифицировать WAF, нам нужно (фиктивно) спровоцировать его.
- Выполните обычный GET-запрос из браузера, перехватите и запишите заголовки ответа (в частности, cookies).
- Выполните запрос из командной строки (например, cURL), и проверьте содержимое ответа и заголовки (без указания user-agent).
- Выполните GET-запросы к случайным открытым портам и получите баннеры, которые могут раскрыть личность WAF.
- На страницах входа внедрите распространённые (легко обнаруживаемые) полезные нагрузки, такие как
" or 1 = 1 --.
- Внедрите шумные полезные нагрузки, такие как
<script>alert()</script>, в строки поиска, контактные формы и другие поля ввода.
- Добавьте фиктивный
../../../etc/passwd к случайному параметру в конце URL.
- Добавьте некоторые привлекающие ключевые слова, такие как
' OR SLEEP(5) OR ', в конец URL к любому случайному параметру.
- Выполните GET-запросы с устаревшими протоколами, такими как
HTTP/0.9 (HTTP/0.9 не поддерживает запросы типа POST).
- Часто WAF изменяет заголовок
Server при различных типах взаимодействия.
- Техника сброса действия — Отправьте сырой сформированный FIN/RST пакет на сервер и определите ответ.
Совет: Этот метод может быть легко выполнен с помощью таких инструментов, как HPing3 или Scapy.
- Атаки по побочным каналам — Исследуйте временное поведение запроса и содержимое ответа.
Совет: Более подробную информацию можно найти в блог-посте здесь.