Как определить тип файервола веб приложений (WAF)

Что такое WAF (файервол веб приложений)

WAF, Web Application Firewall — файервол веб приложений, иногда переводится как «файловый файервол», это программа, которая анализирует поступающие на веб-сервер запросы и на основе правил отфильтровывает те из них, которые могут быть потенциально опасными для веб сайта.

Благодаря использованию WAF, невозможно эксплуатировать уязвимости веб сайта, поскольку запросы с полезной нагрузкой не доходят до веб-сервера и веб приложения, они отбрасываются файерволом веб приложений.

Почему использование WAF не гарантирует защиту сайта

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

С точки зрения WAF, идеальная «защита» это когда ни один запрос не может попасть на веб-сервер — нет клиентов, нет опасности. И если просто включить все правила WAF, то веб-сервер может перестать работать, поскольку почти все веб запросы будут считаться «потенциально опасными».

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

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

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

Различные WAF имеют различные наборы фильтров и в разной степени подвержены методикам обхода фильтрации. По этой причине нужно уметь определять, какая веб защита используется на сайте. Именно этому и посвящена данная статья — мы познакомимся с несколькими инструментами, предназначенными для обнаружения WAF, определения их типа (производителя) и поиска возможных способов обхода фильтрации WAF.

Инструкции по установке рассматриваемых программ вы найдёте на карточках каждого инструмента, ссылки на которые также будут даны.

Несколько сайтов для наших тестов, каждый из которых использует файловый файервол:

  • wise.com
  • www.ebay.com
  • admitad.com
  • apple.com

WAFW00F

Программа wafw00f очень быстро и точно определяет тип WAF для указанного сайта. Из дополнительных функций у wafw00f имеются следующие:

  • сканирование сайта через прокси
  • поддержка форматов ввода и вывода csv, json или text

Использование программы очень простое — просто укажите домен сайта, для которого вы хотите узнать WAF:

wafw00f URL

Например:

wafw00f wise.com

Строка «Number of requests» показывает количество сделанных запросов — хватило всего двух. В результате был выявлен WAF Cloudflare.

Если вы считаете, то идентификация защиты веб приложений по отпечаткам неточная, то добавьте опцию -a, в результате WAFW00F не остановится после первого совпадения, а проверит по всем отпечаткам:

wafw00f -a wise.com

Для отправки запросов через прокси используйте опцию -p, после которой укажите данные прокси — SOCKS и аутентификация поддерживаются, примеры правильно указанных параметров прокси:

  • http://hostname:8080
  • socks5://hostname:1080
  • http://user:pass@hostname:8080

В следующей команде в качестве прокси используется сеть Tor:

sudo systemctl start tor
wafw00f -p socks5://127.0.0.1:9050 admitad.com

Не смотря на медлительность сети Tor, идентификация веб защиты (которой оказалась Wordfence от производителя Defiant) прошла очень быстро и потребовала всего два запроса.

Цели для идентификации веб защиты можно собрать в файл. При запуске программы можно указать файл со списком целей, поддерживаются форматы csv, json или text. Для csv и json, требуется колонка или элемент с именем «url». Формат текстового файла: 1 URL на одну строку.

Пример:

wafw00f -i urls.txt

С помощью опции -t вы можете указать какой именно WAF вы хотите найти, особенно полезной эта опция должна быть с -i:

wafw00f -i urls.txt -t 'Cloudflare (Cloudflare Inc.)'

Кстати, вывести полный список поддерживаемых файерволов веб-приложений вы можете командой:

wafw00f -l

Обратите внимание в каком формате указывается искомый WAF. Если у вас есть сомнения, как правильно указать WAF, то перейдите на страницу https://github.com/EnableSecurity/wafw00f/tree/master/wafw00f/plugins, найдите там файл с нужным вам WAF и откройте его. Найдите строку, начинающуюся на NAME, например:

NAME = 'ACE XML Gateway (Cisco)'

В данном случае именем является 'ACE XML Gateway (Cisco)'.

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

Из нашего небольшого списка тестовых сайтов этой программой удалось определить тип WAF для двух из четырёх.

identYwaf

identityYwaf — ещё одна простая в использовании, но эффективная программа. По аналогии с предыдущим, это инструмент идентификации, который может распознавать тип веб-защиты (например, WAF) основываясь на ответе сервера. Более того, данный инструмент делает дополнительные запросы, чтобы определить, против каких категорий уязвимости настроен WAF. Закончив сканирование, инструмент даёт оценку (в процентах) сложности эксплуатации уязвимостей (если они имеются).

В настоящее время данная программа умеет определять более 80 различных продуктов защиты (например, aeSecure, Airlock, CleanTalk, CrawlProtect, Imunify360, MalCare, ModSecurity, Palo Alto, SiteGuard, UrlScan, Wallarm, WatchGuard, Wordfence и так далее), при этом база знаний постоянно расширяется.

identityYwaf выполняет проверку двумя способами:

  • не-слепой, когда WAF идентифицируется на основе типичных для них сообщений. Например, «403 ('<title>Attention Required! | Cloudflare</title>…Sorry, you have been blocked…Why have I been blocked…This website is using a security service to protect itself from online attacks…The action you just performed triggered the security solution…You can email the site owner to let them know you were blocked')». В таком сообщении явно присутствует название файлового файервола, но в то же самое время это может быть попытка запутать тестера на проникновение
  • слепой, когда WAF идентифицируется на основе блокировок отправляемой ему полезной нагрузки

Пример сканирования файервола веб приложений:

python3 identYwaf.py admitad.com

Изучим вывод программы.

Определён тип веб защиты не-слепым методом, это Wordfence от Defiant:

[+] non-blind match: 'Wordfence (Defiant)'

Всего было выполнено 45 тестов с различной полезной нагрузкой (неопасные запросы, которые очень похожи на запросы для эксплуатации уязвимостей):

[i] running payload tests... (45/45)

Результат представлен в виде диаграммы, в которой точка — это не заблокированная полезная нагрузка (отсутствие защиты против данной атаки), а крестик — это блокировка от WAF в ответ на присланную полезную нагрузку):

[=] results: '..............x...x.xx.xxxxx....x.........xx.'

Сложность эксплуатации потенциальных атак — простая:

[=] hardness: easy (26%)

Заблокированные категории атак:

[=] blocked categories: SQLi, XSS, XXE, PT

Финальное решение на основе слепого метода идентификации и его вероятность:

[+] blind match: 'Wordfence (Defiant)' (100%)

Ещё один тест:

python3 identYwaf.py wise.com

Обратите внимание на большее количество блокируемых полезных нагрузок, категорий и как результат более высокую сложность эксплуатации потенциальных уязвимостей:

[=] results: '....xxx.x...xx.xx.x.xxxxxxxx...xx...x..x.xxx.'
[=] hardness: hard (53%)
[=] blocked categories: SQLi, XSS, XPATHi, XXE, NOSQLi, PHPi, PT

Не-слепой метод идентифицировал веб защиту как CloudFlare, слепой метод в целом пришёл к такому же выводу:

[+] blind match: 'CloudFlare' (98%), 'Incapsula (Incapsula/Imperva)' (82%), 'SecureSphere (Imperva)' (80%), 'Application Security Manager (F5 Networks)' (80%), 'Tencent Cloud|Waterproof Wall (Tencent Cloud Computing)' (78%)

Утилита WAFW00F не смогла определить веб защиту сайта ebay.com, посмотрим, справится ли identYwaf:

python3 identYwaf.py ebay.com

Этот пример наглядно показывает преимущество двух независимых методов идентификации WAF:

Неинформативное сообщение «<title>Access Denied</title>…You don't have permission to access» не позволило идентифицировать WAF по отпечаткам.

Но проверки с помощью разнообразных типов полезной нагрузки позволили идентифицировать веб защиту как Kona Site Defender, производитель Akamai Technologies:

[+] blind match: 'Kona Site Defender (Akamai Technologies)' (100%)

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

[=] results: '....x...xx.xxxxx.xxxxxxxxxxxx.xxx......xx.xx.'
[=] hardness: hard (60%)
[=] blocked categories: SQLi, XSS, XPATHi, XXE, PHPi, ACE, PT

Если вы хотите изменить Пользовательский Агент на случайный, то добавьте опцию --random-agent:

python3 identYwaf.py --random-agent ebay.com

Если вы хотите, чтобы полезная нагрузка отправлялась методом POST, то добавьте опцию --post:

python3 identYwaf.py --post apple.com

С помощью опции --proxy=ПРОКСИ вы можете указать адрес HTTP прокси (например, "http://127.0.0.1:8080"). Но в моих тестах не удалось использовать SOCKS прокси (сеть Tor).

Но с помощью программы Privoxy эта проблема решается (подробности настройки Privoxy смотрите по указанной ссылке).

sudo systemctl start tor
sudo systemctl start privoxy
python3 identYwaf.py --proxy=http://localhost:8118/ www.ebay.com

Вы также можете установить время таймаута (ожидания ответа) и интервал времени между запросами (по умолчанию отсутствует), подробности об этих опциях вы найдёте на странице https://kali.tools/?p=6669.

WhatWaf

WhatWaf — это усовершенствованный инструмент обнаружения защиты веб приложений, цель которого — дать вам ответ на вопрос: «применяется ли на веб-сервере WAF и какой именно?». В процессе своей работы WhatWaf определяет наличие и вид файервола веб приложений и пытается обнаружить методы обхода для указанного файервола на указанной цели.

Данный инструмент может определить более 70+ различных файерволов веб приложений и пробует более 30+ различных техник обхода

Программа WhatWaf является самой гибкой в настройке, полный список опций вы найдёте в карточке программы: https://kali.tools/?p=6683

Использование:

python3 ./whatwaf -u https://SITE.COM

Например:

python3 ./whatwaf -u https://ebay.com

Обратите внимание, что в качестве URL вы можете указывать адрес страницы с параметрами (например, https://hackware.ru/?p=16287). Причём это даже рекомендуется — параметры будут использоваться для передачи полезной нагрузки, что позволит точнее определить способы обхода WAF.

Также обратите внимание, что перед URL указывается протокол http или https. Дело в том, что программа по умолчанию использует HTTP, а все современные сайты, особенно за WAF, используют HTTPS. Поэтому протокол нужно указывать явно. Имеется опция --force-ssl которая, судя по описанию, делает так, что программа начинает по умолчанию применять HTTPS, но в моих тестах эта опция не работала.

Первое, что бросается в глаза, это долгая работа данной утилиты. Дело в том, что WhatWaf не просто пытается определить веб защиту, но и ищет способы обхода файервола веб приложений. Способы обхода заключаются в использовании скриптов вмешательства (тамперов), которые модифицируют полезную нагрузку так, что с одной стороны она (практически) не теряет функциональности, но при этом она перестаёт обнаруживаться фильтрами веб защиты, которые обычно работают на основе поиска по регулярным выражениям. Примеры работы тамперов: замена пробелов на знаки плюс, вставка ненужных комментариев или ничего не значащих символов, замена пробела на несколько пробелов, кодирование или двойное кодирование в URL кодировку, изменение регистра символов, вставка бессмысленных тегов и прочее.

В строке FIREWALL указан обнаруженный файервол веб приложений:

[14:15:25][FIREWALL] AkamaiGHost Website Protection (Akamai Global Host)

Рассмотрим результат следующего сканирования:

python3 ./whatwaf -u https://apple.com

В строках FIREWALL мы видим возможные системы веб защиты:

[14:23:45][FIREWALL] Apache Generic
[14:23:45][FIREWALL] Shadow Daemon Opensource (WAF)

А после строки

[14:25:08][SUCCESS] apparent working tampers for target:

перечислены обнаруженные способы обхода фильтров файервола веб приложений.

Если вам нужно только узнать тип WAF и вы хотите пропустить проверку обходов, то используйте опцию --skip:

python3 ./whatwaf -u https://apple.com --skip

Если вы хотите указать множество целей, то сохраните их в файл (один URL на строку) и запустите программу с опцией -l:

python3 ./whatwaf -l url.txt

Вы можете изменить USER-AGENT. Это можно сделать опцией --ra (в этом случае будет выбран случайный USER-AGENT):

python3 ./whatwaf -u https://apple.com --skip --ra

Либо с помощью опции --pa вы можете указать определённый Пользовательский Агент:

python3 ./whatwaf -u https://apple.com --skip --pa 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'

WhatWaf поддерживает работу через прокси, для этого имеется опция --proxy:

python3 ./whatwaf -u https://apple.com --skip --proxy=socks5://127.0.0.1:9050

Имеется несколько опций специально для сети Tor. С помощью опции --check-tor вы можете проверить подключение к Tor:

python3 ./whatwaf --check-tor

Но в моём случае эта опция работала некорректно, она всё время показывала сообщение «[WARN] it appears Tor is not configured properly» (Tor настроен неправильно), при этом WhatWaf прекрасно работала через Tor.

Имеется специальная опция --tor для анонимных сканирований:

python3 ./whatwaf -u https://apple.com --skip --tor

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

Опция -W делает так, что утилита дополнительно пытается определить версию веб-сервера.

Чтобы просмотреть кэшированные результаты предыдущих сканирований, запустите утилиту с опцией -uC:

python3 ./whatwaf -uC

Для обновления программы перейдите в папку с ней и выполните

python3 ./whatwaf --update

либо выполните

git pull

Онлайн сервис выявление файловых файерволов

Я собрал все рассмотренные инструменты на странице одного онлайн сервиса определения типа WAF (файервола веб приложений): https://suip.biz/ru/?act=wafw00f

Вам достаточно только ввести имя домена интересующего вас сайта и сервис последовательно выполнить сканирование каждой программой.

Удалось даже сохранить цветной вывод для двух утилит (существует много разнообразных экранированных последовательностей для окрашивания вывода в терминале, поэтому перевод цвета из Bash в HTML не всегда тривиальная задача).

В целом удобно сравнивать результаты сканирования сразу всех трёх инструментов.

Рекомендуется Вам:

2 комментария to Как определить тип файервола веб приложений (WAF)

  1. Аноним:

    подскажите пожалуйста,если ответ пришел вроде этого "Причина: Сервер возвращает другой код ответа при использовании строки атаки" получается там фаервол не установлен или тип фаервола не определен?

     

    • Alexey:

      С уверенностью можно сказать только одно: «что-то пошло не так». Например, сервер вернул ошибку 500 (внутренняя ошибка сервера) или ошибку 404 (не найдено), хотя ожидался код ответа, например, 200 или 403.

      То есть есть там файервол или нет — непонятно. Но скорее его нет, поскольку иначе он ответил бы предсказуемо для программы.

Добавить комментарий

Ваш адрес email не будет опубликован.