XFLTReaT: un framework modular para tunneling

Una vez comprometido un servidor es típico intentar realizar un túnel para pivotar a través del mismo, realizar movimientos laterales hacia las redes adyacentes y, en definitiva, continuar con la intrusión. Para ello se aprovecha cualquier “resquicio” a nivel de control de accesos en la seguridad del perímetro correspondiente para establecer un canal encubierto usando los servicios y puertos abiertos para ese servidor.

Hasta ahora, según el protocolo permitido se tenía que instalar una u otra herramienta, a elegir dentro de un abanico de posibilidades cada vez más amplio. De hecho, en el blog ya hemos un buen número de ellas, para realizar túneles TCP (sobre HTTP) con regeorgtunnaABPTTS, Chisel, tcp-over-websockets, UDP con OpenVPN, DNS con dns2tcp o Iodine (DNSCat y Ozymandns son otros) e ICMP con icmp-tunnel (Hans, Ping Tunnel, ICMPTx son también otras opciones).

Pero Balazs Bucsay (@xoreipeip), un hacker húngaro de NCC Group, nos plantea XFLTReaT, un framework para hacer tunneling que precisamente elimina la necesidad de tener que usar distintas herramientas según cada situación. XFLTReaT está escrito en Python 2.7 y es de código abierto, pero sobretodo su principal característica es que es modular, tanto para túneles como para cifrado y autenticación. Y pretende ser lo más plug & play posible: copiar módulos a /modules, ficheros de soporte en /support, editar config y ejecutar.

XFLTReaT nos da esa versatilidad que, como decimos, permite adaptarnos a situaciones diferentes: si sólo se permite tráfico web configuraremos el servidor en el puerto TCP/80, si sólo se permite ICMP del tipo 0 (Echo reply) copiaremos el módulo ICMP y cambiaremos el tipo de 8 a 0, si sólo se permite tráfico HTTP con una cabecera especial podremos configurarlo en el source, si se permite HTTPS pero solo con TLSv1.2 podremos forzarlo e incluso podremos ex filtrar datos mediante mensajes de texto/SMS.


Módulos disponibles
  • TCP
  • UDP
  • ICMP
  • SOCKS v4, 4a, 5
  • HTTP CONNECT
  • DNS (A/CNAME, PRIVATE, NULL) - por el momento sólo PoC
Versiones disponibles

Actualmente hay dos ramas diferentes del framework. La rama o branch principal es una versión estable (v0.1) sin el módulo DNS. La otra rama se llama next-version y tiene la versión más reciente (v0.2), que incluye soporte DNS para algunos registros (A/CNAME, PRIVATE, NULL). Esta rama no ha sido probada a fondo aún.

Para tener una versión estable (sin DNS), utiliza:

# git clone https://github.com/earthquake/xfltreat/

Para obtener el soporte DNS de la rama next-version (que no se ha probado a fondo, tenlo en cuenta):

# git clone https://github.com/earthquake/xfltreat/
# cd xfltreat
# git checkout -b next-version v0.2

Para configurar DNS revisa DNS_notes.md.

Instalación

# git clone https://github.com/earthquake/xfltreat/
# pip install -r requirements.txt
edita xfltreat.conf
# server side: python xfltreat.py
# client side: python xfltreat.py --client

Preparación del servidor

Activa el IP forwarding como root:
# sysctl -w net.ipv4.ip_forward=1
o
# echo 1 > /proc/sys/net/ipv4/ip_forward

Realiza el NAT mediante iptables:
# iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE

Proyecto:

https://github.com/earthquake/XFLTReaT
http://xfltreat.info

Comentarios