SSH-Snake: propagación automatica por SSH

SSH-Snake es una herramienta diseñada para intentar recorrer automáticamente la red como un gusano utilizando claves privadas SSH descubiertas en los sistemas, con el objetivo de crear un mapa completo y sus dependencias, identificando hasta qué punto una red puede verse comprometida usando SSH y claves privadas a partir de un sistema particular.

Básicamente sigue estos cuatro pasos:

  1. En el sistema actual, busca las claves privadas SSH: en .bash_history y ficheros y directorios comunes
  2. En el sistema actual, busca los hosts o destinos (usuario@host) en los que se puedan aceptar las claves privadas: a partir de rangos de IP, últimos inicios de sesión, hosts conocidos, archivos de configuración SSH y más
  3. Intenta realizar SSH en todos los destinos utilizando todas las claves privadas descubiertas. Además tiene la capacidad de detectar cuando un sistema ya ha sido escaneado o está en proceso de ser escaneado, de modo que una red como A->B->C también pueda descubrir C->A pero no regrese a A->B-> C-A->B->C->A->B->...
  4. Si se conecta correctamente a un destino, repite los pasos del 1 al 4 en el sistema al que está conectado.

En definitiva SSH-Snake emula a la perfección y de forma rápida lo que haría un atacante para descubrir claves privadas SSH y destinos donde pueden usarse para conectarse. Está escrita completamente en Bash y opera con un conjunto mínimo de dependencias normalmente disponibles en las principales distribuciones Linux: bash, ssh, getconf, coreutils, getent, awk, sort, grep, tr, find y cat. Del mismo modo, también se pueden utilizar sudo, hostname, ip y xargs, pero no son necesarios (y el script maneja con elegancia los casos en los que no están presentes). Si se descubre un sistema sin ninguno de los paquetes requeridos, falla, alertando al usuario que el análisis no pudo continuar en ese sistema en particular (y retrocede, continuando desde el sistema anterior).

SSH-Snake es completamente fileless: después de que el usuario ejecuta el script, se pasa al bash de destino a través de los argumentos stdin y bash (a través de SSH). No existe evidencia material del script en ninguno de los sistemas analizados: la única evidencia de que el script se está ejecutando está en el árbol de procesos y en la cantidad sustancial de intentos SSH no válidos que inevitablemente ocurrirán.

SSH-Snake adopta un enfoque de descubrimiento que prioriza la profundidad: una vez que se conecta a un sistema, intenta conectarse más lejos de ese sistema antes de retroceder.

​Uso
SSH-Snake se puede descargar o canalizar a bash:

wget https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh
stdbuf -o0 bash ./Snake.nocomments.sh
o
curl https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh | stdbuf -o0 bash
Además SSH-Snake es modular y configurable y viene con scripts que nos permitirán exportar a mapas en png a partir de la salida del script. Por ejemplo:
python3 tools/generate-graph.py --with-users --file SSHSnake.log --format dot
circo -Tpng -Goverlap=false -Gsplines=true -Gconcentrate=true -Gnodesep=0.1 -Goverlap=false SSHSnake_dot_file.dot -o SSH-Snake-dot-circo.png

 
Además de la capacidad de crear este tipo de mapas, se proporcionan otras tres herramientas. A saber:

  • forward-lookup-host.py: dado un host de origen o destino, determina todos los sistemas a los que se puede acceder directa o indirectamente (es decir, a través de un sistema tercero).
  • reverse-lookup-host.py: dado un host o destino de destino, determina todos los sistemas que pueden acceder a él directa o indirectamente.
  • short-path-create-chain.py: dado el host o destino A y B, determina la ruta más corta que conecta los dos.
Proyecto: https://github.com/MegaManSec/SSH-Snake

Comentarios