O relatório pode ser usado para sondar ativamente firewalls para enumerar regras de bloqueio de entrada ou de saída. Use-o corretamente e você poderá obter a configuração do firewall.
Eu o desenvolvi principalmente para me ajudar na solução de problemas com um scanner de rede distribuído que estou desenvolvendo atualmente.
Este trecho de código é apenas um analisador PCAP, o que significa que você deve fornecer a ele um despejo de pacotes de rede adquirido corretamente para que funcione. A ferramenta então imprimirá as portas que (de acordo com o PCAP) estão bloqueadas pelo firewall.
Para utilizá-lo, você precisa ter acesso a pelo menos duas máquinas. Um fica atrás do firewall que você deseja testar e o outro do outro lado.
Existem dois casos de uso possíveis:
Você precisará de ferramentas como tcpdump, tshark ou wireshark para capturar e salvar o tráfego de rede (ou qualquer outro sniffer) e ferramentas como nmap ou masscan para criar e enviar os pacotes de sondagem. Nos exemplos a seguir, usarei masscan e tcpdump.
Caso exista mais um firewall logo antes da máquina externa (não aquele atrás do firewall que você vai testar), seria melhor saber quais são as regras locais. Mas isso não é obrigatório, você ainda pode descobrir fazendo mais testes em locais diferentes.
Seguir as etapas abaixo o ajudará a obter um resultado preciso.
Vamos fingir que queremos enumerar regras de saída porque planejamos executar um scanner de rede posteriormente naquela máquina e, portanto, queremos ter certeza de que nenhum tráfego de saída será bloqueado pelo nosso firewall de saída.
A máquina atrás do firewall possui o ip aaaa
enquanto a máquina externa possui bbbb
. Esta segunda máquina seria aquela onde executaremos o sniffer de pacotes (neste caso tcpdump
) e a primeira que iremos configurar.
Aquisição PCAP
Precisamos iniciar um sniffer de pacotes aqui para ver quais pacotes de teste não chegarão ao destino. Considerando que esta máquina possui o ip público bbbb
associado à interface de rede eth0
e nenhum firewall está rodando . Executamos o tcpdump da seguinte forma
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
Será gerado um arquivo re-port.pcap
e, após finalizarmos nosso teste, é o arquivo que passaremos para esta ferramenta. Mas veremos esta parte mais tarde.
Sondagem de tráfego
Vamos gerar 65.535 pacotes SYN
da máquina atrás do firewall e enviá-los para bbbb
.
Para fazer isso eu uso masscan
. Ele nos permite definir a taxa com a opção --rate
e quantos pacotes são criados para cada porta especificada com a opção --retries
. Ambas as opções são importantes para nós porque precisamos ter certeza de que todos os pacotes que podem chegar ao destino chegarão a ele. Com base na largura de banda que você possui nos pacotes de origem/destino podem ser perdidos devido à alta taxa de envio. Para este teste, precisamos ir devagar e com segurança. Na Itália temos um provérbio que vale: quem vai devagar, vai longe, o que me parece adequado aqui.
masscan -Pn -n -p 1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
fazendo alguns testes descobri que 350 pacotes por segundo enviados duas vezes por porta, para um total de 131.072 (128k) pacotes, levam cerca de nove minutos sem perda de pacotes.
Enumerar regras de firewall
Neste ponto podemos usar Re-port
para obter a lista das portas fechadas. Volte para a primeira máquina, pare o sniffer de pacotes CTRL+C
e copie o re-port.pcap
para o diretório onde você tem a ferramenta Re-port. Agora você pode executá-lo da seguinte maneira:
./enumerate.py re-port.pcap
Os exemplos anteriores enumeravam regras de bloqueio de TCP. Se você quiser uma lista de todas as portas UDP bloqueadas, siga as etapas acima, alterando os comandos da seguinte forma:
# Machine with b.b.b.b IP
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
# Machine with a.a.a.a IP
masscan -Pn -n -p U:1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
# Re-port
./enumerate.py re-port.pcap --udp
Execute ./enumerate.py --help para mostrar todas as opções
$./enumerate.py --help
usage: enumerate.py [-h] [--address ADDRESS] [--open] [--version] [-u] [-v] pcap
Re-port is a tool to actively enumerate firewall rules.
positional arguments:
pcap PCAP dump of receiving scan traffic
optional arguments:
-h, --help show this help message and exit
--address ADDRESS scanners's IP address. If unset, all the packets in the
PCAP will be used to enumerate closed ports
--open print open ports instead of closed ones
--version show program's version number and exit
-u, --udp search for UDP open ports instead of TCP
-v, --verbose increase output verbosity
Report é uma classe python e você pode usá-la/estendê-la como quiser.
É iterável e você o usa em uma instrução with
.
with Report('dump.pcap') as r:
r.enumerate_ports('tcp', '127.0.0.1')
r.print_ports()
ou
r = Report('dump.pcap')
r.enumerate_ports('tcp', '127.0.0.1')
for port in r:
print('Open %d' % port)
@r4d10n: pela ideia simples por trás desta ferramenta.