Як дізнатися, який WAF захищає веб-сайт

Зловмиснику важливо розуміти, де саме в мережі зазвичай застосовується WAF, перш ніж проводити ідентифікацію його особливостей.

Фахівцям з тестування на проникнення слід враховувати наявність WAF перед початком взаємодії з веб-додатком, оскільки це може вплинути на результативність їхніх спроб атак.

Але перш ніж перейти до практики…

Що ж таке WAF?

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

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

Взаємодія за протоколом HTTP відбувається на основі набору правил. Ці правила протидіють типовим вразливостям, як-от міжсайтовий скриптинг та SQL-ін’єкції.

В інтернеті існує безліч безкоштовних інструментів з відкритим вихідним кодом, які допомагають виявити екрани, що захищають веб-застосунки.

У цій статті ми розглянемо методи та інструменти, що використовуються для ідентифікації WAF.

Зверніть увагу: для демонстраційних цілей я використовував власний сайт. Не проводите сканування чи інші хакерські дії на будь-якому сайті без дозволу власника.

Ручне виявлення

Виявлення за допомогою TELNET

Telnet найчастіше використовується мережевими адміністраторами та фахівцями з тестування на проникнення. За допомогою Telnet можна з’єднуватися з віддаленими хостами через будь-який порт.

  • Міжмережеві екрани веб-застосунків часто залишають (або додають) HTTP-параметри до заголовків відповідей.
  • Telnet можна застосовувати для отримання базової інформації, такої як тип сервера та файли cookie, необхідної для ідентифікації.
  • Введіть команду: Telnet targetwebsite.com 80
[email protected]: # telnet Targetwebsite.com 80
Trying 18.166.248.208...
Connected to Targetwebsite.com.
Escape character is '^]'.

Після виконання вищенаведеної команди введіть `HEAD / HTTP / 1.1` і натисніть Enter.

[email protected]: # telnet 18.166.248.208  80
Trying 18.166.248.208...
Connected to 18.166.248.208.
Escape character is '^]'.
HEAD / HTTP/1.1
Host: 18.166.248.208

HTTP/1.1 200 OK
Date: SUN, 10 Oct 2021 05:08:03 IST
Server: Apache X-Powered-By: PHP/5.3.5 ZendServer/5.0
Set-Cookie: SESSIONID VULN SITE=t25put8gliicvqf62u3ctgjm21; path=/
Expires: Thu, 19 Nov 1981 08:52:00 IST
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Varnish: 4723782781
Age: 0
Via: 1.1 varnish
Connection: close
Content-Type: text/html

Connection closed by foreign host.

Ця інформація вказує на сервер, на якому розміщено веб-сайт, і мову програмування, на якій він був розроблений. Після використання telnet на порту 80, ми визначили, що брандмауер/граничний шлюз – Varnish.

Деякі WAF-системи дозволяють змінювати заголовки, а також можуть спонукати веб-сервер відправляти HTTP-відповіді, що відрізняються від стандартних.

Як видно з результатів вище, веб-сервер відповів на наш запит і виявив, що брандмауер/граничний шлюз – Varnish.

Автоматизоване виявлення

#1. Виявлення за допомогою NMAP

Nmap, маючи в своєму арсеналі сценарій для ідентифікації брандмауерів веб-додатків, також придатний для цієї мети.

  • Nmap – це інструмент для оцінки безпеки, який часто використовують тестувальники на проникнення та мережеві адміністратори.
  • Nmap застосовується для отримання інформації про цільову систему.
  • Сценарій був запущений на тій самій веб-сторінці, що і раніше.
  • Введіть команду: `nmap –script=http-waf-fingerprint targetweb.com`
[email protected]:# nmap --script=http-waf-fingerprint targetwebsite.com
Starting Nmap 7.90 ( https://nmap.org ) at 2021-10-10 07:58 IST
Nmap scan report for targetsite.com (18.166.248.208)
Host is up (0.24s latency).
Not shown: 982 filtered ports
PORT   STATE SERVICE
53/tcp    open  domain
80/tcp  open  http
| http-waf-fingerprint:
|   Detected WAF
|  Citrix Netscaler
443/tcp   open  https
5432/tcp  closed  postgresql
8080/tcp  closed  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 25.46 seconds

Використавши наведену вище команду, Nmap визначив наявність брандмауера Citrix Netscaler.

#2. Виявлення за допомогою Whatwaf

Whatwaf – це інструмент для сканування веб-додатків, який дозволяє виявити наявність будь-якого WAF. Він корисний для визначення того, чи захищений веб-додаток екраном під час оцінки його безпеки.

Якщо так, то знання стратегій обходу та уникнення може бути корисним для подальшого тестування або використання веб-застосунку.

WhatWaf зазвичай застосовується для обходу брандмауерів, виявлення додатків, визначення їхніх особливостей та ідентифікації програмного забезпечення. Мережеві спеціалісти з безпеки та пен-тестери є цільовою аудиторією цього інструменту.

Як встановити WhatWaf?

Інсталяція на Kali-Linux:

sudo apt install python3-pip

git clone https://github.com/ekultek/whatwaf

cd whatwaf

sudo pip3 install -r requirements.txt

Під час запуску без конкретної версії Python можна вказати виконуваний файл:

./whatwaf --help

Але, оскільки ми не встановили залежності Python 2, радимо використовувати спеціальну версію Python:

python3 ./whatwaf --help

Використання інструменту

Інструмент виявлення брандмауера Whatwaf простий у використанні! Потрібно лише виконати таку команду:

./whatwaf -u https://www.targetsite.com

Як показано нижче, цей інструмент виявив брандмауер для зазначеної URL-адреси веб-сайту.

Нагадування! – Я використовував власний сайт для сканування

┌──(root💀kali)-[/home/writer/WhatWaf]
└─# ./whatwaf -u https://www.renjith.org

                                  ,------.
                                 '  .--.  '
        ,--.   .--.   ,--.   .--.|  |  |  |
        |  |   |  |   |  |   |  |'--'  |  |
        |  |   |  |   |  |   |  |    __.  |
        |  |.'.|  |   |  |.'.|  |   |   .'
        |         |   |         |   |___|
        |   ,'.   |hat|   ,'.   |af .---.
        '--'   '--'   '--'   '--'   '---'
/><script>alert("WhatWaf?<|>v2.0.3($dev)");</script>%00

[11:12:34][ERROR] you must install psutil first `pip install psutil` to start mining XMR
[11:12:34][INFO] checking for updates
[11:12:34][WARN] it is highly advised to use a proxy when using WhatWaf. do so by passing the proxy flag (IE `--proxy http://127.0.0.1:9050`) or by passing the Tor flag (IE `--tor`)
[11:12:34][INFO] using User-Agent 'whatwaf/2.0.3 (Language=2.7.18; Platform=Linux)'
[11:12:34][INFO] using default payloads
[11:12:34][INFO] testing connection to target URL before starting attack
[11:12:35][SUCCESS] connection succeeded, continuing
[11:12:35][INFO] running single web application 'https://www.renjith.org'
[11:12:35][WARN] URL does not appear to have a query (parameter), this may interfere with the detection results
[11:12:35][INFO] request type: GET
[11:12:35][INFO] gathering HTTP responses
[11:12:42][INFO] gathering normal response to compare against
[11:12:42][INFO] loading firewall detection scripts
[11:12:42][INFO] running firewall detection checks
[11:12:44][FIREWALL] detected website protection identified as 'Apache Generic'
[11:12:44][INFO] starting bypass analysis
[11:12:44][INFO] loading payload tampering scripts
[11:12:45][INFO] running tampering bypass checks
[11:19:09][SUCCESS] apparent working tampers for target:
------------------------------
(#1) description: tamper payload by changing characters into a wildcard
example: '/bin/cat /et?/?asswd'
load path: content.tampers.randomwildcard
------------------------------

Як видно з результатів, веб-сервер відповів на наш запит і виявив, що брандмауером є Apache. Ми також можемо використовувати службу tor для сканування WAF, але це може збільшити затримку.

./whatwaf -u https://www.targetsite.com --tor

Основна перевага інструмента Whatwaf полягає в тому, що він автоматично намагається надати корисні навантаження в обхід виявленого брандмауера.

#3. Виявлення за допомогою Wafw00f

Найбільш відомим інструментом для виявлення брандмауерів веб-додатків є Wafw00f. Wafw00f надсилає HTTP-запит на брандмауер веб-застосунку для його ідентифікації. Коли відправлення звичайних HTTP-запитів не вдається, wafw00f виконує шкідливий HTTP-запит. Якщо й це не дає результату, то wafw00f аналізує попередні HTTP-запити та за допомогою простого алгоритму визначає, чи реагує брандмауер веб-застосунку на наші атаки.

Wafw00f не встановлено за замовчуванням в дистрибутивах Kali Linux.

Як встановити Wafw00f?

Пакет у форматі zip можна завантажити з офіційного ресурсу GitHub.

Завантажте інструмент Wafwoof. Також можна використати клієнт git для клонування репозиторію. Для отримання пакета виконайте команди:

$ git clone https://github.com/EnableSecurity/wafw00f.git

Щоб інсталювати інструмент wafw00f у систему, перейдіть до папки або каталогу wafw00f і виконайте команду:

$ python setup.py install

Файл інсталяції буде оброблено, і wafw00f буде встановлено у системі.

Використання інструменту

Щоб скористатися цим інструментом, виконайте таку команду:

$ wafw00f <url>

НАГАДУВАННЯ. Скануйте лише ті веб-сайти, на тестування яких ви маєте дозвіл.

┌──(root💀kali)-[/home/writer/wafw00f]
└─# wafw00f https://webhashes.com

                   ______
                  /
                 (  Woof! )
                    ____/                      )
                  ,,                           ) (_
             .-. -    _______                 ( |__|
            ()``; |==|_______)                .)|__|
            / ('        /|                  (  |__|
        (  /  )        / |                   . |__|
         (_)_))      /  |                     |__|

                    ~ WAFW00F : v2.1.0 ~
    The Web Application Firewall Fingerprinting Toolkit


[*] Checking https://whatismyip.com
[+] The site https://whatismyip.com is behind Cloudflare (Cloudflare Inc.) WAF.
[~] Number of requests : 2

На жаль, брандмауер виявлено!

Спробуємо інший цільовий сайт для обговорення.

┌──(root💀kali)-[/home/writer/wafw00f]
└─# wafw00f https://renjith.org

                   ______
                  /
                 (  Woof! )
                    ____/                      )
                  ,,                           ) (_
             .-. -    _______                 ( |__|
            ()``; |==|_______)                .)|__|
            / ('        /|                  (  |__|
        (  /  )        / |                   . |__|
         (_)_))      /  |                     |__|

                    ~ WAFW00F : v2.1.0 ~
    The Web Application Firewall Fingerprinting Toolkit


[*] Checking https://renjith.org
[+] Generic Detection results:
[-] No WAF detected by the generic detection
[~] Number of requests: 7

Цього разу брандмауер не виявлено.

Щоб використовувати його в режимі детальної інформації, введіть таку команду:

wafw00f  <url> -v

Можна побачити додаткові можливості цієї утиліти, виконавши команду:

wafw00f <url> --help

Підсумок 👨‍💻

У цій статті ми розглянули різні методи та інструменти для виявлення брандмауерів веб-застосунків. Це важливий етап, який потрібно проходити на стадії збору інформації під час кожного тесту на проникнення веб-ресурсів.

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

За словами дослідників етичного хакінгу, наявність брандмауера веб-додатків (WAF) стає дедалі необхіднішою. Аналіз журналів веб-додатків для виявлення нових атак на внутрішній сервер завжди важливий. Це допомагає налаштовувати правила екрана веб-застосунку для забезпечення максимального захисту.

Також, вам може бути цікаво дізнатися про вразливості, виявлені за допомогою сканера Nikto.