C2 via Supporti Rimovibili: Communication Through Removable Media (T1092)

La tecnica Communication Through Removable Media descrive un canale di comando e controllo (C2) che sfrutta dispositivi di archiviazione rimovibili — tipicamente chiavette USB — per trasferire comandi e dati tra host compromessi appartenenti a reti fisicamente separate. Rientra nella tattica Command and Control (TA0011), la fase della kill chain in cui l'avversario stabilisce e mantiene la comunicazione con i sistemi sotto il proprio controllo.

Lo scenario tipico prevede due host: il primo connesso a Internet e compromesso inizialmente, il secondo collocato in una rete air-gapped e raggiunto tramite lateral movement. Un supporto rimovibile fa da ponte: i comandi vengono scritti su file nel dispositivo USB dall'attaccante (attraverso l'host connesso), poi letti ed eseguiti sull'host isolato quando il dispositivo viene fisicamente inserito. I risultati seguono il percorso inverso.

L'impatto è particolarmente rilevante negli ambienti industriali (OT/SCADA) e nelle reti classificate governative, dove l'air gap è la principale misura di isolamento. Nei dati disponibili si contano 1 gruppo APT attribuito, 2 software documentati e 2 mitigazioni applicabili. L'assenza di campagne formalmente catalogate non deve ingannare: il traffico C2 via USB è per sua natura difficile da osservare e, di conseguenza, sottorappresentato nei dataset pubblici.

L'obiettivo in un red team engagement è dimostrare che un air gap non è una barriera assoluta. Per simulare il relay C2 via USB servono due macchine di laboratorio — una "connected" e una "isolated" — e un dispositivo USB reale o emulato.

La catena si articola in tre fasi: impianto del payload sul supporto, esecuzione sull'host isolato e ritorno dei risultati.

Fase 1 — Preparazione del payload sull'host connesso. Scrivi un file di tasking sulla chiavetta. In ambiente Windows basta uno script PowerShell che deposita comandi in un file di testo sulla radice del drive rimovibile:

Set-Content -Path "E:\task.txt" -Value "whoami; ipconfig /all; systeminfo"

Su Linux il concetto è identico, con un semplice redirect:

echo "id; ip a; uname -a" > /media/usb0/task.txt

Fase 2 — Esecuzione sull'host air-gapped. Sull'host isolato, simula un agente che legge il file di tasking, esegue i comandi e scrive i risultati. Un one-liner PowerShell efficace per il lab:

$cmds = Get-Content "E:\task.txt"; $out = foreach ($c in $cmds.Split(';')) { Invoke-Expression $c }; Set-Content -Path "E:\result.bin" -Value $out

Su Linux con bash:

while IFS= read -r cmd; do eval "$cmd" >> /media/usb0/result.bin 2>&1; done < /media/usb0/task.txt

Fase 3 — Esfiltrazione. Il drive viene reinserito nell'host connesso, dove un secondo script legge result.bin e lo invia all'infrastruttura C2 dell'attaccante.

Per un approccio più strutturato, Rubber Ducky di Hak5 (a pagamento) permette di emulare un HID che inietta keystroke e automatizza l'intera catena. In alternativa, il framework USaBuse (open source) fornisce payload pronti per scenari di USB drop e relay.

Se vuoi simulare specificamente il comportamento di USBStealer (S0136), il pattern chiave è: scrivere un file di comando con un naming scheme fisso, verificarne la presenza al mount successivo e processarlo. L'agente non deve mai comunicare via rete — tutta la logica C2 passa dal filesystem del dispositivo rimovibile.

Un test fondamentale da includere nel report è cronometrare il round-trip: quanti minuti passano tra il deposito del task e la raccolta del risultato. Questo dato aiuta il Blue Team a calibrare le finestre di detection.

Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Scarica la guida gratuita e segui il percorso corretto fin dal primo passo