
Script Bash sin archivos y autopropagable que descubre recursivamente claves privadas SSH y hosts accesibles, y luego recorre la red vía SSH para mapear rutas de compromiso.
🐍 SSH-Snake es una potente herramienta diseñada para realizar travesía de red automática utilizando claves privadas SSH descubiertas en los sistemas, con el objetivo de crear un mapa completo de una red y sus dependencias, identificando hasta qué punto una red puede verse comprometida usando SSH y claves privadas SSH partiendo de un sistema concreto.
SSH-Snake puede revelar automáticamente la relación entre sistemas que están conectados mediante SSH, lo cual normalmente requeriría una enorme cantidad de tiempo y esfuerzo para realizarse manualmente.
En otras palabras, SSH-Snake realiza las siguientes tareas de forma automática y recursiva:
user@host) en el que las claves privadas puedan ser aceptadas,Es completamente autorreplicante y autopropagante -- y completamente sin archivos. En muchos sentidos, SSH-Snake es en realidad un gusano: se replica a sí mismo y se propaga de un sistema a otro tanto como puede.
En lugar de saltar manualmente entre sistemas con claves SSH como si fuera un juego de Super Mario, deja que SSH-Snake haga el trabajo por ti.
Aunque esta herramienta está pensada para fines de hacking, los administradores de sistemas también pueden usarla para comprender mejor su infraestructura y su red. Si quieres deshabilitar la impresión de las claves privadas descubiertas, comenta esta línea de código.
Para un análisis en profundidad de cómo funciona realmente este script, detalles técnicos, descubrimientos interesantes, decisiones de diseño, benchmarking y lecciones aprendidas, consulta esta entrada de blog. Este software fue escrito por Joshua Rogers.
Una captura de pantalla reducida de la salida de SSH-Snake en una red muy pequeña. |
|---|
Los nodos azules indican que el destino puede conectarse consigo mismo (user@host<-->user@host). Las aristas rojas indican que la conexión es bidireccional (user1@host1<-->user2@host2). |
|---|
SSH-Snake puede descargarse o canalizarse hacia bash:
wget https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh
bash ./Snake.nocomments.sh
o
curl https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh | bash
SSH-Snake emula de forma fluida lo que haría un adversario humano para descubrir claves privadas SSH y los destinos donde pueden usarse para conectarse. Escrito íntegramente en Bash, opera con un conjunto mínimo de dependencias comúnmente disponibles en los principales sistemas Linux (y MacOS): bash, ssh, coreutils, awk, uniq, sort, grep, tr, find y cat. Se requiere getent O dscacheutil. sed solo es necesario para el primer sistema. Asimismo, también pueden usarse sudo, hostname, ip, timeout, arp, ifconfig, ipconfig y xargs, pero no son obligatorios (y el script gestiona con elegancia los casos en los que no están presentes). Si se descubre un sistema sin ninguno de los paquetes requeridos, falla de forma controlada, alertando al usuario de que el escaneo no pudo continuar en ese sistema concreto (y retrocede, continuando desde el sistema anterior).
SSH-Snake es completamente fileless: después de que el usuario ejecuta el script, este se pasa al bash de los destinos mediante stdin y argumentos de bash (a través de SSH). No existe ninguna evidencia material del script en ninguno de los sistemas escaneados: la única evidencia de que el script se está ejecutando está en el árbol de procesos, y en la sustancial cantidad de intentos SSH inválidos que inevitablemente se producirán.
SSH-Snake adopta un enfoque en profundidad para el descubrimiento: una vez que se conecta a un sistema, intenta conectarse más allá desde ese sistema antes de retroceder.
El nombre SSH-Snake proviene del hecho de que la salida del script parece una serpiente deslizándose arriba y abajo por la red. Sin embargo, a diferencia del juego Snake, SSH-Snake no morirá cuando se muerda la cola (se conecte a un sistema que ya ha escaneado o que está escaneando actualmente): simplemente imprimirá cómo se conectó allí de forma normal, pero regresará y no volverá a escanear el destino (para evitar la recursión infinita).
SSH-Snake se ha probado en varias distribuciones de Linux y en MacOS (con Homebrew Bash instalado). Si encuentras un sistema operativo basado en Linux con el que no sea compatible, envía un informe.
.bash_history,SSH-Snake incluye algunas configuraciones generales que pueden ajustarse. Estas configuraciones están documentadas en SETTINGS.md#general-settings.