
SSH-Snake è uno script auto-propagante, auto-replicante e senza file che automatizza il compito di post-sfruttamento della scoperta di chiavi private SSH e host.
🐍 SSH-Snake è un potente strumento progettato per eseguire il traversal automatico della rete utilizzando chiavi private SSH scoperte sui sistemi, con l'obiettivo di creare una mappa completa di una rete e delle sue dipendenze, identificando fino a che punto una rete può essere compromessa utilizzando SSH e chiavi private SSH a partire da un sistema specifico.
SSH-Snake può rivelare automaticamente la relazione tra sistemi connessi tramite SSH, cosa che normalmente richiederebbe un'enorme quantità di tempo e sforzo per essere eseguita manualmente.
In altre parole, SSH-Snake esegue automaticamente e ricorsivamente i seguenti compiti:
user@host) per cui le chiavi private possono essere accettate,È completamente auto-replicante e auto-propagante — e completamente fileless. In molti modi, SSH-Snake è in realtà un worm: si replica e si diffonde da un sistema all'altro il più lontano possibile.
Invece di saltare manualmente tra sistemi con chiavi SSH come in un gioco di Super Mario, lascia che SSH-Snake faccia il lavoro per te.
Sebbene questo strumento sia destinato a scopi di hacking, anche gli amministratori di sistema possono usarlo per comprendere meglio la propria infrastruttura e rete. Se si desidera disabilitare la stampa delle chiavi private trovate, commentare questa riga di codice.
Per un'analisi approfondita di come funziona realmente questo script, dettagli tecnici, scoperte interessanti, decisioni di progettazione, benchmarking e lezioni apprese, consulta questo post del blog. Questo software è stato scritto da Joshua Rogers.
Una schermata ridotta dell'output di SSH-Snake in una rete molto piccola. |
|---|
I nodi blu indicano che la destinazione può connettersi a se stessa (user@host<-->user@host). Gli spigoli rossi indicano che la connessione è bidirezionale (user1@host1<-->user2@host2). |
|---|
SSH-Snake può essere scaricato o reindirizzato in bash:
wget https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh
bash ./Snake.nocomments.sh
oppure
curl https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh | bash
SSH-Snake emula perfettamente ciò che un attaccante umano farebbe per scoprire chiavi private SSH e destinazioni a cui connettersi. Scritto interamente in Bash, opera con un insieme minimo di dipendenze comunemente disponibili sui principali sistemi Linux (e MacOS): bash, ssh, coreutils, awk, uniq, sort, grep, tr, find e cat. È richiesto getent OPPURE dscacheutil. sed è richiesto solo per il primissimo sistema. Allo stesso modo, sudo, hostname, , , , , e possono essere utilizzati, ma non sono richiesti (e lo script gestisce con garbo i casi in cui non siano presenti). Se viene scoperto un sistema senza uno dei pacchetti richiesti, fallisce con garbo, avvisando l'utente che la scansione non può continuare su quel sistema (e torna indietro, proseguendo dal sistema precedente).
SSH-Snake è completamente fileless: dopo che l'utente esegue lo script, questo viene passato alla bash delle destinazioni tramite stdin e argomenti bash (via SSH). Non esiste alcuna traccia materiale dello script su nessuno dei sistemi scansionati: l'unica prova dell'esecuzione dello script è nell'albero dei processi e nella sostanziale quantità di tentativi SSH non validi che inevitabilmente si verificheranno.
SSH-Snake adotta un approccio depth-first alla scoperta: una volta connesso a un sistema, tenta di connettersi ulteriormente da quel sistema prima di tornare indietro.
Il nome SSH-Snake deriva dal fatto che l'output dello script sembra un serpente che striscia su e giù per la rete. Tuttavia, a differenza del gioco Snake, SSH-Snake non muore quando si morde la coda (si connette a un sistema già scansionato o in fase di scansione): stamperà semplicemente come si è connesso lì come di consueto, ma tornerà indietro e non riesaminerà la destinazione (per evitare ricorsione infinita).
SSH-Snake è stato testato su varie versioni di Linux e MacOS (con Homebrew Bash installato). Se si incontra un sistema operativo basato su Linux con cui non è compatibile, si prega di inviare una segnalazione.
.bash_history,SSH-Snake viene fornito con alcune impostazioni generali che possono essere configurate. Queste impostazioni sono documentate in SETTINGS.md#general-settings.
SSH-Snake offre anche una varietà di strategie configurabili/plug-and-play (funzioni) che possono essere utilizzate per scoprire chiavi private SSH su un sistema e trovare host e destinazioni a cui tentare di connettersi. Sono forniti valori predefiniti ragionevoli, tuttavia se si desidera eseguire una scansione il più approfonditamente possibile, abilitare più tecniche di scoperta può aiutare. Se una scansione richiede molto tempo, disabilitare alcune tecniche di scoperta può aiutare. Con l'eccezione di una strategia (find_ssh_keys), ciascuna delle strategie può essere attivata/disattivata. Sono documentate in SETTINGS.md#configurable-discovery-strategies.
L'output grezzo di SSH-Snake contiene un mix di informazioni sulle chiavi private scoperte, destinazioni e messaggi di errore.
Una spiegazione dettagliata dell'output completo di SSH-Snake si trova in OUTPUT.md.
Un esempio di output si trova in example-output.log.
L'output di SSH-Snake può essere utilizzato per creare grafici/visualizzazioni della rete attraversata dallo script.
Una spiegazione dettagliata su come creare e interpretare immagini/visualizzazioni dall'output di SSH-Snake si trova in GRAPHICS.md.
Oltre alla capacità di creare visualizzazioni della rete attraversata da SSH-Snake, vengono forniti altri tre strumenti. Ovvero:
forward-lookup-host.py: Dato un host o una destinazione di origine, determina tutti i sistemi a cui è possibile accedere direttamente o indirettamente (cioè attraverso un sistema terziario).reverse-lookup-host.py: Dato un host o una destinazione di destinazione, determina tutti i sistemi che possono accedervi direttamente o indirettamente.shortest-path-create-chain.py: Dati l'host o la destinazione A e B, determina il percorso più breve che li collega.Il terzo strumento genera anche un comando che può essere utilizzato per connettersi dalla destinazione A alla destinazione B. Ad esempio:
$ python3 tools/shortest-path-create-chain.py --file output.log --src '[email protected]' --dest '[email protected]'
Shortest path from [email protected] to [email protected]: [email protected]>[email protected]>[email protected]>[email protected]
[..]
ssh -i "/home/jrogers/.ssh/key" [email protected] 'sudo ssh -i "/root/.ssh/id_rsa" [email protected] 'ssh -i "/tmp/key" [email protected]''
Poiché lo script è piuttosto grande, caricare lo script in un here-document (cosa che fa automaticamente perché lo script è in realtà un Quine) fa sì che bash scriva in un file temporaneo (poiché è maggiore di 65535 byte).
Per ridurre le dimensioni in modo che rimanga 100% fileless, Snake.nocomments.sh ha una versione con tutti i commenti, gli spazi bianchi non necessari e le righe vuote rimossi. Questo riduce le dimensioni del file in modo che il file temporaneo non venga creato da bash.
Se si incontrano bug o problemi relativi allo script, si prega di segnalarli come issue su GitHub. Si prega di includere le proprie impostazioni di configurazione.
Sono particolarmente interessato a eventuali output [line] interessanti associati a errori che non sono stati intercettati dallo script.
iptimeoutarpifconfigipconfigxargs