Un solo host comprometido en una red interna es inútil sin una ruta de pivote confiable. Los túneles SOCKS5 sobre SSH proporcionan el método de menor latencia y más independiente de herramientas para el movimiento lateral — sin embargo, la mayoría de los operadores los configuran incorrectamente o dejan rastros forenses que un equipo azul competente detectará en segundos. En 2024, un proxy SOCKS5 correctamente configurado sigue superando a los proxies HTTP CONNECT en rendimiento TCP bruto, y con herramientas como proxychains-ng y Chisel, puedes enrutar nmap, Metasploit y scripts personalizados a través de una sola sesión SSH sin tocar las reglas del firewall del objetivo.
Por qué SOCKS5 sobre SSH supera al reenvío de puertos
El reenvío de puertos local estático (-L) te obliga a mapear cada servicio remoto a un puerto local antes de poder interactuar con él. Si necesitas escanear una subred /24, tendrías que crear 254 reenvíos separados. El reenvío dinámico SOCKS5 (-D) resuelve esto exponiendo un proxy SOCKS5 local que enruta cualquier conexión TCP a través del túnel SSH hacia el host remoto. El protocolo está definido en RFC 1928 y maneja autenticación, UDP (opcional) e IPv6. En la práctica, obtienes un único listener local — típicamente en 127.0.0.1:1080 — y toda herramienta que soporte proxies SOCKS puede usarlo. La sobrecarga es insignificante: el cifrado de SSH añade quizás un 5-10% de CPU, pero la latencia es mucho menor que la de una VPN o un reenvío de puerto inverso a través de una web shell.
Configuración de un listener SOCKS5 en un punto de apoyo Linux
Supón que tienes una shell en un host Linux dentro de la red objetivo. La forma más rápida de establecer un pivote es ejecutar ssh -D 1080 -N -f user@your-listener desde el host comprometido hacia tu máquina de ataque. Pero eso requiere acceso SSH saliente, que puede estar bloqueado. En su lugar, ejecuta el reenvío dinámico desde tu máquina de ataque hacia el host comprometido:
ssh -D 1080 -N -f compromised_user@compromised_host
Esto abre un proxy SOCKS5 en tu puerto local 1080. Ahora configura proxychains-ng (/etc/proxychains.conf) para usar ese proxy:
socks5 127.0.0.1 1080
Luego ejecuta cualquier herramienta TCP a través del túnel:
proxychains4 nmap -sT -Pn -p 445,3389 10.10.10.0/24
Ten en cuenta que nmap requiere -sT (escaneo de conexión TCP) porque SOCKS5 no soporta paquetes SYN sin procesar. Para Metasploit, establece setg Proxies socks5:127.0.0.1:1080 y todos los módulos auxiliares y de explotación se enrutarán a través del pivote. Esta técnica funciona en entornos CTF como Hack The Box o Proving Grounds donde el objetivo es alcanzar una segunda subred.
Chisel, Ligolo-ng y las compensaciones
Cuando SSH no está disponible — quizás el objetivo ejecuta Windows o no tiene servidor SSH — herramientas de túneles alternativas llenan el vacío. Chisel utiliza un cliente y servidor basados en Go que tunelizan TCP sobre HTTP/HTTPS. Ejecuta el servidor en tu máquina de ataque: chisel server -p 8000 --reverse. En el host comprometido, ejecuta el cliente: chisel client your_ip:8000 R:socks. Esto te da un listener SOCKS5 en el lado del servidor. Chisel es rápido y funciona a través de filtros de salida restrictivos, pero su tráfico no está cifrado por defecto — envuélvelo en TLS o usa SSH si te importa la opsec.
Ligolo-ng adopta un enfoque diferente: crea un túnel de red en la Capa 3 utilizando interfaces TUN/TAP. En lugar de SOCKS5, enrutas rangos IP completos a través del pivote. Esto significa que puedes ejecutar nmap -sS (escaneo SYN) sin proxychains. La compensación es la sobrecarga administrativa: necesitas root en ambos extremos, y la configuración del túnel requiere agregar rutas en tu máquina de ataque. Para CTFs donde controlas ambos lados, Ligolo-ng es más rápido. En compromisos reales, el enfoque SOCKS5 es más portátil porque funciona sin privilegios elevados en el host pivote.
Señales de detección que los atacantes dejan atrás
Cada método de pivote deja artefactos. El reenvío dinámico SSH crea un socket de escucha en el host comprometido — ss -tlnp muestra un proceso ssh vinculado a 127.0.0.1:1080. Los equipos azules pueden correlacionar esto con conexiones SSH salientes a una IP externa. El proceso cliente de Chisel se llama chisel por defecto — trivial de detectar con monitoreo de procesos. Ligolo-ng requiere un dispositivo TUN (ip link show), lo cual es anormal en un servidor.
Peor aún, muchos operadores olvidan limpiar. La sesión SSH permanece hasta que el host remoto la mata o la conexión se cae. Proxychains no deja artefactos locales, pero el tráfico nmap en sí mismo — escaneos de puertos inusuales originados desde un host que normalmente no escanea — activa alertas IDS. El error más común es reutilizar el puerto SOCKS5 predeterminado 1080. Cámbialo a un puerto efímero alto (por ejemplo, ssh -D 53421) y crea un alias para la configuración de proxychains para evitar dejar un archivo de configuración predeterminado. En un CTF, nada de esto importa. En una prueba de penetración real, estas señales son cómo te atrapan.