Para la construcción de la topología de una red de caja negra se
emplean herramientas como Traceroute; seguro que la conocen. Esta
herramienta emplea el campo TTL o tiempo de vida de la cabecera IP para
averiguar por qué dispositivos de red pasan los paquetes hasta llegar
al host destino.
La aplicación manda 3 paquetes con TTL valor 1 hacia la máquina
objetivo; cuando estos paquetes llegan al primer dispositivo
intermedio, éste decrementa el TTL en 1, pasando a valer 0, y es
descartado notificándonos mediante un paquete ICMP tipo 11 Time Exceeded.
La siguiente vez se enviará con TTL valor 2, posteriormente con valor
3… así hasta llegar a la máquina destino, la cual no contestará con el
Time Exceeded.
Lo más importante para una auditoría de seguridad son los últimos
saltos que nos permitirán obtener la topología de la red que se está
auditando. Ahora bien, seguramente nos habrá ocurrido que en ocasiones
los resultados obtenidos no son los correctos puesto que llegado a un firewall
de la red no conseguimos poder avanzar hasta el host; incluso
dependiendo del programa que empleemos los resultados son distintos.
Esto es debido a combinación de las reglas de filtrado de los firewalls y los protocolos empleados por cada programa “traceroute”.
Por ejemplo, traceroute (linux) emplea por defecto paquetes UDP con
el puerto destino incremental por cada paquete que envia, empezando el
primer paquete en 33434. Por tanto si el firewall filtra los paquetes
UDP excepto en ciertos puertos de ciertas aplicaciones nuestro
traceroute será filtrado. Esta implementación también permite emplear
paquetes ICMP tipo 8 (opción I) en vez de UDP. En cambio, el traceroute
en Windows (llamado tracert) solo emplea paquetes ICMP echo request
(tipo 8), sin opción a emplear UDP, por lo que si el firewall filtra
los paquetes ICMP del tipo 8 (pings) el tracert no funcionará.
Por ello, dependiendo de la herramienta que empleemos podremos obtener unos resultados u otros, o incluso no llegar al host nunca. De estos problemas surgió la herramienta Layer Four Traceroute
(LFT) que permite emplear tanto protocolo ICMP, UDP como TCP (a
diferencia de traceroute y tracert), así como permitir fijar puertos
destinos y orígenes para envío de paquetes. ¿Por que es interesante
emplear TCP y poder fijar un puerto? Muy sencillo: por muchas reglas de
filtrado que tengamos en los firewall, si tenemos un host
ofreciendo un servicio al exterior, el puerto de acceso a dicho
servicio debe estar abierto, y por tanto podremos emplear LFT para
enviar un paquete al host cuyo puerto destino y protocolo sea el del
servicio.
Veámoslo de forma práctica. Imagínense que tuviéramos un host con un
servidor web disponible al exterior en una red cuyo firewall de entrada
rechazara los paquetes ICMP tipo 8 (ping), y todos aquellos paquetes
UDP y TCP, excepto a aquellos puertos de los servicios que ofrezcan los
host de la red (como el servidor web). Tanto el traceroute como el
tracert no pasarían del firewall, en cambio si empleáramos
LFT indicándole que el puerto destino es el 80 y el protocolo es TCP,
éste no sería rechazado, obteniendo la topología de la red que permite
conectar dicha máquina con el exterior. Si el servidor web fuera la
máquina 192.168.5.90 la orden sería la siguiente:
# lft d
80 192.168.5.90
Espero que les haya gustado (y les sea útil) la curiosidad. Como siempre, pasen un buen fin de semana.
Autor: Ximo Moreno
Fuente: SecurityArtWork
