Detectando WAFs: Guia Completo com Ferramentas e Técnicas

É crucial para um invasor identificar a localização de um WAF em uma rede antes de iniciar qualquer processo de reconhecimento.

Testadores de penetração devem estar cientes da presença de um WAF antes de começar a avaliar um aplicativo web, pois isso pode influenciar o resultado de suas tentativas de exploração.

Mas, antes de tudo, vamos entender o básico…

O que exatamente é um WAF?

Um WAF (Firewall de Aplicação Web) desempenha um papel fundamental na proteção de um site, atuando como um filtro e monitor de tráfego. Esses firewalls protegem contra vulnerabilidades significativas e, por isso, muitas organizações estão modernizando suas infraestruturas para incluí-los. No entanto, especialistas em segurança cibernética ressaltam que um WAF não corrige problemas de segurança por si só. É imprescindível uma configuração adequada para que ele possa identificar e bloquear ameaças externas.

Um WAF se distingue de um firewall tradicional por sua capacidade de filtrar conteúdo de aplicativos online específicos, enquanto firewalls tradicionais funcionam como uma barreira de segurança entre servidores.

Uma interação HTTP é regida por um conjunto de regras que abordam vulnerabilidades comuns como cross-site scripting e injeção SQL.

Existem diversas ferramentas, gratuitas e de código aberto, que auxiliam na identificação de firewalls por trás de aplicativos web.

Neste artigo, exploraremos métodos e ferramentas que podem ser utilizados para detectar a presença de um WAF.

Nota: Para fins ilustrativos, este tutorial usou meu próprio site. É importante lembrar que nenhuma varredura ou atividade de hacking deve ser realizada em sites sem a devida permissão do proprietário.

Detecção Manual

Utilizando TELNET para Detecção

O Telnet, ferramenta essencial para administradores de rede e testadores de penetração, possibilita a conexão com hosts remotos em qualquer porta.

  • WAFs frequentemente adicionam parâmetros HTTP nos cabeçalhos de resposta.
  • O Telnet pode ser usado para coletar informações básicas, como o servidor e cookies, úteis para a identificação do WAF.
  • Para começar, digite o comando: Telnet nomedositedeobjetivo.com 80
usuario@maquina: # telnet nomedositedeobjetivo.com 80
Tentando 192.168.1.100...
Conectado a nomedositedeobjetivo.com.
Caractere de escape é '^]'. 

Após a execução do comando acima, digite HEAD/HTTP/1.1 e pressione Enter.

usuario@maquina: # telnet 192.168.1.100  80 
Tentando 192.168.1.100... 
Conectado a 192.168.1.100. 
Caractere de escape é '^]'. 
HEAD / HTTP/1.1 
Host: 192.168.1.100

HTTP/1.1 200 OK 
Data: Seg, 16 Out 2023 10:00:00 GMT 
Servidor: Apache/2.4.41 (Ubuntu)
X-Powered-By: PHP/7.4.3
Set-Cookie: PHPSESSID=abc123xyz; path=/; HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
X-Varnish: 1234567890
Idade: 0
Via: 1.1 varnish
Conexão: close 
Content-Type: text/html

Conexão encerrada pelo host remoto.

Este resultado revela o servidor que hospeda o site e a linguagem de back-end utilizada, após a conexão via Telnet na porta 80.

É importante saber que alguns WAFs permitem a modificação do cabeçalho, o que pode fazer com que o servidor web retorne respostas HTTP diferentes das padrão.

O exemplo acima demonstra que o servidor web respondeu à nossa solicitação, indicando que o firewall/gateway de borda é o Varnish.

Detecção Automatizada

#1. Detecção com NMAP

O Nmap, que inclui um script para identificar WAFs, pode ser utilizado para esse propósito.

  • O Nmap é uma ferramenta de avaliação de segurança frequentemente utilizada por testadores de penetração e administradores de rede.
  • Ele coleta informações sobre o alvo.
  • O script foi executado na mesma página web utilizada anteriormente.
  • Comando a ser executado: nmap --script=http-waf-fingerprint nomedositedeobjetivo.com
usuario@maquina:# nmap --script=http-waf-fingerprint nomedositedeobjetivo.com
Iniciando Nmap 7.90 ( https://nmap.org ) em 2023-10-16 10:00 BRT
Relatório de varredura Nmap para nomedositedeobjetivo.com (192.168.1.100)
Host está ativo (latência de 0,24s).
Não mostradas: 982 portas filtradas
PORTA    ESTADO SERVIÇO
53/tcp    aberta   domain
80/tcp    aberta   http
| http-waf-fingerprint:
|   WAF Detectado
|   Citrix Netscaler
443/tcp aberta https
5432/tcp fechada postgresql
8080/tcp fechada http-proxy

Varredura Nmap concluída: 1 endereço IP (1 host ativo) varridos em 25,46 segundos

Após a execução do comando Nmap, foi detectado o firewall Citrix Netscaler.

#2. Detecção com Whatwaf

Whatwaf é uma ferramenta para identificar a presença de WAFs em aplicativos web. Essa ferramenta é útil para determinar se um aplicativo web está protegido por um WAF durante avaliações de segurança.

Em caso positivo, estratégias de desvio e evasão podem ser úteis em testes adicionais ou na exploração do aplicativo online.

O WhatWaf é frequentemente utilizado para desvio de firewall, detecção de aplicativos, identificação de software e reconhecimento. É uma ferramenta voltada para pen-testers e profissionais de segurança.

Como instalar o WhatWaf?

Instalação no Kali-Linux:

sudo apt update
sudo apt install python3-pip
git clone https://github.com/ekultek/whatwaf
cd whatwaf
sudo pip3 install -r requirements.txt

Para executar, sem especificar uma versão do Python, podemos utilizar:

./whatwaf --help   

Entretanto, como as dependências do Python 2 não foram instaladas, é recomendável especificar a versão do Python:

python3 ./whatwaf --help

Utilização da Ferramenta

A ferramenta de detecção de firewall Whatwaf é simples de usar. Basta executar:

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

Como demonstrado abaixo, a ferramenta detectou o firewall no URL fornecido.

Lembrete: usei meu próprio site para a varredura.

usuario@kali:~/WhatWaf$ ./whatwaf -u https://www.sitedeobjetivo.com

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

[10:00:00][ERROR] você precisa instalar psutil primeiro `pip install psutil` para iniciar a mineração XMR
[10:00:00][INFO] verificando atualizações
[10:00:00][WARN] é altamente recomendável usar um proxy ao utilizar o WhatWaf. Faça isso passando o flag de proxy (IE `--proxy http://127.0.0.1:9050`) ou usando o flag Tor (IE `--tor`)
[10:00:00][INFO] usando User-Agent 'whatwaf/2.0.3 (Language=2.7.18; Platform=Linux)'
[10:00:00][INFO] usando payloads padrão
[10:00:00][INFO] testando a conexão com o URL de destino antes de iniciar o ataque 
[10:00:01][SUCCESS] conexão bem-sucedida, continuando
[10:00:01][INFO] executando aplicativo web único 'https://www.sitedeobjetivo.com'
[10:00:01][WARN] o URL não parece ter uma query (parâmetro), isso pode interferir nos resultados da detecção
[10:00:01][INFO] tipo de requisição: GET
[10:00:01][INFO] coletando respostas HTTP
[10:00:08][INFO] coletando a resposta normal para comparação
[10:00:08][INFO] carregando scripts de detecção de firewall
[10:00:08][INFO] executando verificações de detecção de firewall
[10:00:10][FIREWALL] proteção do website detectada como 'Apache Generic'
[10:00:10][INFO] iniciando análise de bypass
[10:00:10][INFO] carregando scripts de manipulação de payload
[10:00:11][INFO] executando verificações de bypass de manipulação
[10:05:00][SUCCESS] possíveis tampers para o alvo:
------------------------------
(#1) descrição: alterar o payload substituindo caracteres por um curinga
exemplo: '/bin/cat /et?/?asswd'
load path: content.tampers.randomwildcard
------------------------------

Conforme o resultado acima, o servidor web respondeu e identificou o firewall como Apache. Também podemos usar o serviço Tor para buscar o WAF, o que pode aumentar a latência.

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

Uma vantagem do Whatwaf é que ele automaticamente tenta fornecer payloads para contornar o firewall identificado.

#3. Detecção usando Wafw00f

Uma ferramenta popular para detectar WAFs é o Wafw00f. Ele envia requisições HTTP para o WAF, buscando identificá-lo. Caso falhe, envia requisições HTTP maliciosas. Se estas também falharem, o Wafw00f analisa as requisições HTTP anteriores utilizando um algoritmo para determinar como o WAF responde aos ataques.

O Wafw00f não vem pré-instalado em distribuições Kali Linux.

Como instalar o Wafw00f?

O pacote zip está disponível para download na fonte oficial do GitHub.

Para baixar o Wafw00f, você pode clonar o repositório usando o cliente git:

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

Para instalar, navegue até a pasta do Wafw00f e execute:

$ python setup.py install

O arquivo de configuração será processado e o Wafw00f estará instalado.

Utilização da Ferramenta

Para usar esta ferramenta, execute o comando:

$ wafw00f <url>

Lembre-se: realize testes somente em sites que você tem permissão para testar.

usuario@kali:~/wafw00f$ wafw00f https://sitedeexemplo1.com

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

                    ~ WAFW00F : v2.1.0 ~
    O Kit de Ferramentas de Fingerprinting de Firewall de Aplicativo Web

[*] Verificando https://sitedeexemplo1.com
[+] O site https://sitedeexemplo1.com está por trás de Cloudflare (Cloudflare Inc.) WAF.
[~] Número de requisições : 2

O firewall foi detectado.

Para fins de discussão, tentaremos outro site.

usuario@kali:~/wafw00f$ wafw00f https://sitedeexemplo2.com

                   ______
                  /

                 (  Woof! )

                    ____/                      )

                  ,,                           ) (_

             .-. -    _______                 ( |__|

            ()``; |==|_______)                .)|__|

            / ('        /|                  (  |__|

        (  /  )        / |                   . |__|

         (_)_))      /  |                     |__|

                    ~ WAFW00F : v2.1.0 ~
     O Kit de Ferramentas de Fingerprinting de Firewall de Aplicativo Web


[*] Verificando https://sitedeexemplo2.com
[+] Resultados de Detecção Genérica:
[-] Nenhum WAF detectado pela detecção genérica
[~] Número de requisições: 7

Nenhum firewall foi detectado desta vez.

Para utilizar o modo detalhado, use o seguinte comando:

wafw00f  <url> -v 

Você pode visualizar mais recursos desta ferramenta através do comando:

wafw00f <url> --help 

Conclusão 👨‍💻

Neste artigo, abordamos diversas estratégias e ferramentas para a detecção de WAFs. Esta etapa é crucial durante a coleta de informações em testes de penetração de aplicativos web.

A identificação de um WAF permite que o testador explore diferentes métodos para contornar as defesas e explorar vulnerabilidades no aplicativo online.

Segundo especialistas em segurança cibernética, a utilização de WAFs é cada vez mais necessária. É importante analisar os logs de aplicativos web para detectar novos ataques no servidor de back-end, possibilitando a personalização de regras no WAF para uma proteção mais eficaz.

Você também pode estar interessado em ler sobre vulnerabilidades usando Nikto Scanner.