
Venom - Un proxy multi-hop per penetration tester
Venom è uno strumento proxy multilivello sviluppato in Go, progettato per penetration tester.
Venom può connettere più nodi e utilizzarli come trampolini per costruire un proxy multilivello.
I penetration tester possono utilizzare Venom per instradare facilmente il traffico di rete attraverso più livelli di rete interna e gestire comodamente i nodi proxy.
Questo strumento è destinato esclusivamente alla ricerca sulla sicurezza e all'istruzione. L'utente si assume ogni responsabilità legale e correlata derivante dall'uso di questo strumento! L'autore non si assume alcuna responsabilità legale o correlata!
Poiché i dispositivi IoT (architetture arm/mips/...) hanno solitamente risorse limitate, per ridurre le dimensioni del file binario, i binari compilati per ambienti IoT in questo progetto non supportano le funzionalità di riutilizzo delle porte e tunneling SSH, e per ridurre l'uso della memoria sono stati limitati il numero di connessioni simultanee e la dimensione del buffer.
È possibile scaricare direttamente i file eseguibili precompilati dalla release
Se si desidera compilare il progetto dal codice sorgente, è necessario installare go >= 1.11, quindi eseguire i comandi seguenti
go get -u github.com/Dliv3/Venom/...
# $GOPATH è la variabile d'ambiente configurata durante l'installazione di Go, può essere visualizzata con il comando go env
cd $GOPATH/src/github.com/Dliv3/Venom
# I file binari compilati sono archiviati nella cartella release nella directory corrente
./build.sh
Video dimostrativo su Youtube: https://www.youtube.com/playlist?list=PLtZO9vwOND91vZ7yCmlAvISmEl2iQKjdI
Sia il nodo admin che il nodo agent possono ascoltare connessioni o avviare connessioni
Il nodo admin ascolta su una porta, l'agent avvia la connessione:
./admin_macos_x64 -lport 9999
./agent_linux_x64 -rhost 192.168.0.103 -rport 9999
L'agent ascolta su una porta, l'admin avvia la connessione:
./agent_linux_x64 -lport 8888
./admin_macos_x64 -rhost 192.168.204.139 -rport 8888
Il nodo agent supporta il riutilizzo delle porte
L'agent fornisce due metodi di riutilizzo delle porte
Utilizzando la funzionalità di riutilizzo delle porte fornita da Venom, su Windows è possibile riutilizzare le porte di servizi come Apache, MySQL, ecc., ma temporaneamente non è possibile riutilizzare porte di servizi come RDP, IIS, ecc. Su Linux è possibile riutilizzare la maggior parte delle porte dei servizi. Le porte riutilizzate continuano a fornire il servizio originale normalmente.
Primo metodo di riutilizzo delle porte
# Esempio con Apache su Windows
# Riutilizza la porta 80 di Apache senza influenzare il normale servizio HTTP di Apache
# Il valore di -lhost è l'IP locale, non può essere 0.0.0.0, altrimenti non è possibile riutilizzare la porta
./agent.exe -lhost 192.168.204.139 -reuse-port 80
./admin_macos_x64 -rhost 192.168.204.139 -rport 80
Secondo metodo di riutilizzo delle porte
# Esempio con Apache su Linux
# Richiede privilegi di root
sudo ./agent_linux_x64 -lport 8080 -reuse-port 80
Questo metodo di riutilizzo delle porte imposta una regola iptables sulla macchina locale per inoltrare il traffico di reuse-port a lport, che viene poi distribuito dall'agent.
Da notare che se il programma viene terminato tramite segnali sigterm o sigint (kill o Ctrl+C), il programma può pulire automaticamente le regole iptables. Se l'agent viene ucciso con kill -9, non può pulire automaticamente le regole iptables e sarà necessario pulirle manualmente, poiché l'agent non può gestire il segnale sigkill.
Per evitare che le regole iptables non vengano pulite automaticamente e che il penetration tester non riesca ad accedere al servizio sulla porta 80, il secondo metodo di riutilizzo delle porte utilizza iptables -m recent per controllare l'attivazione delle regole di inoltro iptables tramite pacchetti TCP speciali.
L'implementazione si basa su https://threathunter.org/topic/594545184ea5b2f5516e2033
# Avvia le regole iptables impostate dall'agent sulla macchina Linux
# Se rhost è sulla rete interna, è possibile utilizzare il proxy socks5 per il traffico dello script; l'uso del proxy socks5 è descritto di seguito
python scripts/port_reuse.py --start --rhost 192.168.204.135 --rport 80
# Connetti al nodo agent
./admin_macos_x64 -rhost 192.168.204.135 -rport 80
# Per disattivare le regole di inoltro
python scripts/port_reuse.py --stop --rhost 192.168.204.135 --rport 80
Crittografia della comunicazione tra nodi
Venom fornisce la crittografia della comunicazione tra nodi; l'utente può specificare una password tramite l'opzione -passwd, che viene utilizzata per generare la chiave necessaria per la crittografia AES.
# Imposta la password come dlive@dubhe tramite -passwd
./admin_macos_x64 -lport 8889 -passwd dlive@dubhe
# L'agent specifica la stessa password per connettersi al nodo admin
./agent_macos_x64 -rhost 192.168.0.103 -rport 8889 -passwd dlive@dubhe
help Stampa le informazioni di aiuto
(admin node) >>> help
help Informazioni di aiuto.
exit Esci.
show Mostra la topologia di rete.
getdes Visualizza la descrizione del nodo di destinazione.
setdes [info] Aggiungi una descrizione al nodo di destinazione.
goto [id] Seleziona id come nodo di destinazione.
listen [lport] Ascolta su una porta sul nodo di destinazione.
connect [rhost] [rport] Connetti a un nuovo nodo tramite il nodo di destinazione.
sshconnect [user@ip:port] [dport] Connetti a un nuovo nodo tramite tunnel SSH.
shell Avvia una shell interattiva sul nodo di destinazione.
upload [local_file] [remote_file] Carica file sul nodo di destinazione.
download [remote_file] [local_file] Scarica file dal nodo di destinazione.
socks [lport] Avvia un server socks5.
lforward [lhost] [sport] [dport] Inoltra una porta locale sport a una porta remota dport.
rforward [rhost] [sport] [dport] Inoltra una porta remota sport a una porta locale dport.
show Mostra la topologia di rete
A indica il nodo admin, i numeri indicano i nodi agent
La topologia seguente mostra che il nodo admin è connesso al nodo 1, il nodo 1 è connesso ai nodi 2 e 4, e il nodo 2 è connesso al nodo 3