Re-port se puede utilizar para sondear activamente los firewalls y enumerar reglas de bloqueo entrantes o salientes. Úselo correctamente y podrá obtener la configuración del firewall.
Lo desarrollé principalmente para ayudarme a solucionar problemas con un escáner de red distribuida que estoy desarrollando actualmente.
Este fragmento de código es solo un analizador PCAP, lo que significa que debe proporcionarle un volcado de paquetes de red adquirido correctamente para que funcione. Luego, la herramienta imprimirá los puertos que (según el PCAP) están bloqueados por el firewall.
Para poder utilizarlo, necesita acceso al menos a dos máquinas. Uno se encuentra detrás del firewall que desea probar y el otro en el otro lado.
Hay dos posibles casos de uso:
Necesitará herramientas como tcpdump, tshark o wireshark para capturar y guardar el tráfico de la red (o cualquier otro rastreador), y herramientas como nmap o masscan para crear y enviar los paquetes de sondeo. En los siguientes ejemplos, usaré masscan y tcpdump.
En caso de que haya un firewall más justo antes de la máquina externa (no el que está detrás del firewall que va a probar), sería mejor saber cuáles son las reglas vigentes. Pero eso no es obligatorio, aún puedes resolverlo haciendo más pruebas desde diferentes ubicaciones.
Seguir los pasos a continuación le ayudará a obtener un resultado preciso.
Supongamos que queremos enumerar reglas de salida porque planeamos ejecutar un escáner de red más adelante en esa máquina y, por lo tanto, queremos estar seguros de que nuestro firewall de salida no bloqueará ningún tráfico saliente.
La máquina detrás del firewall tiene la ip aaaa
mientras que la máquina exterior tiene bbbb
. Esta segunda máquina sería en la que ejecutaremos el rastreador de paquetes (en este caso tcpdump
) y la primera que vamos a configurar.
Adquisición de PCAP
Necesitamos iniciar un rastreador de paquetes aquí para ver qué paquetes de sondeo no llegarán al destino. Teniendo en cuenta que esta máquina tiene la ip pública bbbb
asociada a la interfaz de red eth0
y no se está ejecutando ningún firewall . Ejecutamos tcpdump de la siguiente manera
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
Se generará un archivo re-port.pcap
y, una vez finalizada nuestra prueba, será el archivo que pasaremos a esta herramienta. Pero esta parte la veremos más adelante.
Sondeo de tráfico
Vamos a generar 65535 paquetes SYN
desde la máquina detrás del firewall y los enviaremos a bbbb
.
Para hacer eso utilizo masscan
. Nos permite establecer la velocidad con la opción --rate
y cuántos paquetes se envían para cada puerto especificado con la opción --retries
. Ambas opciones son importantes para nosotros porque tenemos que estar seguros de que todos los paquetes que puedan llegar al destino llegarán a él. Según el ancho de banda que tenga en los paquetes de origen/destino, podrían perderse debido a la alta velocidad de envío. Para esta prueba debemos ir despacio y con seguridad. En Italia tenemos un proverbio vigente: quien va despacio llega lejos, eso me parece apropiado aquí.
masscan -Pn -n -p 1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
Al hacer algunas pruebas, descubro que 350 paquetes por segundo enviados dos veces por puerto, para un total de 131072 (128k) paquetes, demoran alrededor de nueve minutos sin pérdida de paquetes.
Enumerar reglas de firewall
En este punto podemos usar Re-port
para obtener la lista de puertos cerrados. Vuelva a la primera máquina, detenga el rastreador de paquetes CTRL+C
y copie el re-port.pcap
al directorio donde tiene la herramienta Re-port. Ahora puedes ejecutarlo de la siguiente manera:
./enumerate.py re-port.pcap
Los ejemplos anteriores enumeraban reglas de bloqueo de TCP. Si desea una lista de todos los puertos UDP bloqueados, siga los pasos anteriores cambiando los comandos de la siguiente manera:
# 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
Ejecute ./enumerate.py --help para mostrar todas las opciones
$./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 es una clase de Python y puedes usarla/extenderla como quieras.
Es iterable y lo usa dentro de una declaración with
.
with Report('dump.pcap') as r:
r.enumerate_ports('tcp', '127.0.0.1')
r.print_ports()
o
r = Report('dump.pcap')
r.enumerate_ports('tcp', '127.0.0.1')
for port in r:
print('Open %d' % port)
@r4d10n: por la idea sencilla detrás de esta herramienta.