Як визначити тип фаєрвола веб-додатків (WAF)

4 травня 2023 2 хвилин Автор: Cyber Witcher

Чому використання WAF не гарантує захист сайту?

WAF, Web Application Firewall — фаєрвол веб-додатків, це програма, яка аналізує запити, що надходять на веб-сервер, і на основі правил відфільтровує ті з них, які можуть бути потенційно небезпечними для веб сайту. Завдяки використанню WAF, неможливо експлуатувати вразливості веб-сайту, оскільки запити з корисним навантаженням не доходять до веб-сервера і веб-додатків, вони відкидаються фаєрволом веб-додатків. Насправді, з WAF (як і з багатьма іншими безпековими рішеннями), не все так просто. З точки зору WAF, ідеальний захист це коли жоден запит не може потрапити на веб-сервер — немає клієнтів, немає небезпеки. І якщо просто включити всі правила WAF, то веб-сервер може перестати працювати, оскільки майже всі запити будуть вважатися «потенційно небезпечними». Звичайно, ці дві крайності не влаштовує веб-майстрів і їм необхідно визначити баланс, коли сайт ще працює і WAF теж все ще ефективний.

Рішень WAF вже сотні і всі вони дуже різняться. Налаштування деяких із них зводиться до включення та відключення у веб-інтерфейсі категорій загроз, що фільтруються. Щоб настроїти деякі з них, потрібно редагувати текстові файли, в яких небезпечні запити описані власною мовою WAF. Щоб максимально суворо налаштувати правила WAF, потрібно активувати правила, які б забороняли все, крім необхідних типів запитів до веб-сервера. Щоб це зробити, потрібно, по-перше, добре розуміти роботу веб-сайту, що захищається, що йому потрібно, а що ні; а, по-друге, добре розуміти типи атак, способи їх експлуатації і роботу WAF, що налаштовується. Все це складно і, як можна здогадатися, такий ідеальний варіант трапляється рідко.

WAFW00F

Програма wafw00f дуже швидко та точно визначає тип WAF для вказаного сайту. З додаткових функцій wafw00f є такі:

  • сканування сайту через проксі

  • підтримка форматів введення та виведення csv, json або text

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

Наприклад:

Рядок «Number of requests» показує кількість зроблених запитів — вистачило лише двох. В результаті було виявлено WAF Cloudflare. Якщо ви вважаєте, то ідентифікація захисту веб-додатків за відбитками неточна, то додайте опцію -a, в результаті WAFW00F не зупиниться, а перевірить по всіх відбитках:

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

  • http://hostname:8080

  • socks5://hostname:1080

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

У наступній команді як проксі використовується мережа Tor:

Незважаючи на повільність мережі Tor, ідентифікація веб захисту (якою виявилася Wordfence від виробника Defiant) пройшла дуже швидко і зажадала всього два запити. Цілі для ідентифікації веб-захисту можна зібрати у файл. Під час запуску програми можна вказати файл зі списком цілей, підтримуються формати CSV, JSON або Text. Для csv і json, потрібна колонка або елемент під назвою «url». Формат текстового файлу: 1 URL-адреса на один рядок.

Приклад:

За допомогою опції -t ви можете вказати який саме WAF ви хочете знайти, особливо корисною ця опція має бути з -i:

До речі, вивести повний список підтримуваних фаєрволів веб-застосунків ви можете командою:

Зверніть увагу, в якому форматі вказується WAF. Якщо у вас є сумніви, як правильно вказати WAF, перейдіть на сторінку https://github.com/EnableSecurity/wafw00f/tree/master/wafw00f/plugins, знайдіть там файл з потрібним вам WAF і відкрийте його. Знайдіть рядок, що починається на NAME, наприклад:

У цьому випадку ім’ям є ‘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 і так далі), при цьому база знань постійно розширюється.

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

  • сліпий, коли WAF ідентифікується на основі блокувань корисного навантаження, що йому відправляється.

Приклад сканування фаєрволу веб-додатків:

Вивчимо висновок програми. Визначений тип веб захисту не сліпим методом, це Wordfence від Defiant:

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

Результат представлений у вигляді діаграми, в якій точка – це не заблоковане корисне навантаження (відсутність захисту проти даної атаки), а хрестик – це блокування від WAF у відповідь на надіслане корисне навантаження):

Складність експлуатації потенційних атак – проста:

Заблоковані категорії атак:

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

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

Зверніть увагу на більшу кількість корисних навантажень, що блокуються, категорій і як результат більш високу складність експлуатації потенційних вразливостей:

Не-сліпий метод ідентифікував веб захист як CloudFlare, сліпий метод загалом дійшов такого ж висновку:

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

Цей приклад показує перевагу двох незалежних методів ідентифікації WAF:

Неінформативне повідомлення «<Access Access Denied</title>…You don’t have permission to access» не дозволило ідентифікувати WAF за відбитками. Але перевірки за допомогою різноманітних типів корисного навантаження дозволили ідентифікувати веб-захист як Kona Site Defender, виробник Akamai Technologies:

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

Якщо ви хочете змінити Агент користувача на випадковий, то додайте опцію –random-agent:

Якщо ви хочете, щоб корисне навантаження відправлялося методом POST, додайте опцію –post:

За допомогою опції –proxy=ПРОКСІ можна вказати адресу HTTP проксі (наприклад, “http://127.0.0.1:8080”). Але в моїх тестах не вдалося використовувати проксі SOCKS (мережа Tor). Але за допомогою програми Privoxy ця проблема вирішується (подробиці налаштування Privoxy дивіться за вказаним посиланням).

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

WhatWaf

WhatWaf – це вдосконалений інструмент виявлення захисту веб-додатків, мета якого – дати вам відповідь на запитання: «Чи застосовується на веб-сервері WAF і який саме?». У процесі своєї роботи WhatWaf визначає наявність і вид фаєрволу веб-додатків і намагається виявити методи обходу для зазначеного фаєрволу на зазначеній меті. Даний інструмент може визначити більше 70+ різних фаєрволів веб-додатків і пробує більше 30+ різних технік обходу. Програма WhatWaf є найгнучкішою в налаштуванні, повний список опцій ви знайдете в картці програми: https://kali.tools/?p=6683

Використання:

Наприклад:

Зверніть увагу, що як URL ви можете вказувати адресу сторінки з параметрами (наприклад, https://hackware.ru/?p=16287). До того ж це навіть рекомендується — параметри використовуватимуться для передачі корисного навантаження, що дозволить точніше визначити способи обходу WAF. Також зауважте, що перед URL вказується протокол http або https. Справа в тому, що програма за замовчуванням використовує HTTP, а всі сучасні сайти, особливо за WAF, використовують HTTPS. Тому протокол слід зазначати явно. Є опція –force-ssl, яка, судячи з опису, робить так, що програма починає за умовчанням застосовувати HTTPS, але в моїх тестах ця опція не працювала.

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

У рядку FIREWALL вказано виявлений фаєрвол веб додатків:

Розглянемо результат наступного сканування:

У рядках FIREWALL ми бачимо можливі системи захисту:

А після рядка:

Перераховані виявлені способи обходу фільтрів брандмауера веб додатків. Якщо потрібно лише дізнатися тип WAF і ви хочете пропустити перевірку обходів, то використовуйте опцію –skip:

Якщо ви хочете вказати безліч цілей, збережіть їх у файл (один URL на рядок) і запустіть програму з опцією -l:

Ви можете змінити USER-AGENT. Це можна зробити опцією –ra (у цьому випадку буде обрано випадковий USER-AGENT):

Або за допомогою опції –pa ви можете вказати певний Агент користувача:

WhatWaf підтримує роботу через проксі, для цього є опція –proxy:

Є кілька опцій спеціально для мережі Tor. За допомогою опції –check-tor ви можете перевірити підключення до Tor:

Але в моєму випадку ця опція працювала некоректно, вона постійно показувала повідомлення «[WARN] it appears Tor is not configured properly» (Tor налаштований неправильно), при цьому WhatWaf чудово працювала через Tor. Є спеціальна опція –tor для анонімних сканувань:

Мається на увазі, що служба tor прослуховує порт 9050, якщо у вас інша конфігурація, використовуйте опцію -tP щоб вказати свій власний порт. Опція W робить так, що утиліта додатково намагається визначити версію веб-сервера. Щоб переглянути результати кешування попередніх сканувань, запустіть утиліту з опцією -uC:

Для оновлення програми перейдіть до папки з нею та виконайте, або виконайте:

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

Я зібрав усі розглянуті інструменти на сторінці одного онлайн сервісу визначення типу WAF (файєрвола веб-додатків): https://suip.biz/ru/?act=wafw00f. Вам достатньо тільки ввести ім’я домену сайту, що вас цікавить, і сервіс послідовно виконати сканування кожною програмою.

Вдалося навіть зберегти кольоровий висновок для двох утиліт (є багато різноманітних екранованих послідовностей для фарбування виведення в терміналі, тому переклад кольору з Bash в HTML не завжди тривіальне завдання). Загалом зручно порівнювати результати сканування одразу всіх трьох інструментів.

 

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.