Questa è la seconda puntata della nostra serie sulle tecniche di evasione del comando e del controllo (C2), in cui parlo dei profili C2 malleabili. Date un'occhiata al il mio primo blog in cui esamino un metodo noto come randomizzazione della firma JA3.
I profili malleabili C2 sono stati ampiamente adottati e utilizzati da Cobalt Strikeun framework popolare utilizzato da pen-tester e gruppi di Advanced Persistent Threat (APT). Vale la pena notare che mentre i profili malleabili sono familiari agli utenti di Cobalt Strike , l'adozione del loro uso ha iniziato a diffondersi anche in altri framework C2. A partire dalla versione 3.4, i profili malleabili sono utilizzati anche in Empire C2. Ciò che rende questo sviluppo ancora più interessante è che il team di Empire ha recentemente annunciato una partnership con Kali Linux, una popolare distribuzione di pen-testing, che aumenterà la diffusione dell'uso dei profili malleabili.
Profili malleabili per l'evasione
I profili malleabili per C2 consentono all'attore di eludere non solo il rilevamento sul filo degli strumenti di rilevamento basati sulla rete, ma anche i prodotti di sicurezza endpoint . Il livello di "malleabilità" consente agli operatori Cobalt Strike non solo di personalizzare completamente la forma e la tempistica dei segnali C2, ma anche di personalizzare le funzioni sull'obiettivo, come l'iniezione di processi e i metodi di offuscamento in memoria. La sicurezza operativa è sempre una preoccupazione quando si eseguono agenti all'interno di un ambiente bersaglio. Pertanto, il monitoraggio della sicurezza della rete è sempre un aspetto da tenere in considerazione quando si vuole mantenere la segretezza del comando e del controllo. Supponiamo che quando gli aggressori installano agenti su macchine compromesse all'interno della rete, il traffico generato da questi agenti durante la connessione al server C2 utilizzi lo stesso o simili user-agent, URI o altri artefatti facili da segnalare. Il rischio di rilevare queste attività sarebbe eccezionalmente alto se fossero note in anticipo a causa dell'uso ripetuto. Per questo motivo è necessario trasformare o modellare il traffico in modo tale che possa confondersi con il "normale" traffico previsto o semplicemente utilizzare nuovi valori a ogni esecuzione. Entrambi gli approcci sarebbero utili per eludere il rilevamento. Un'altra motivazione per l'impiego di profili malleabili è il desiderio di effettuare test contro minacce conosciute. Se posso impostare un agente e un server C2 in modo che appaiano esattamente come un malware si presenta sul filo o su un endpoint di destinazione, posso vedere se il mio stack di rilevamento della rete o il monitoraggio della sicurezza endpoint sono in grado di segnalare l'attività.
È qui che entra in gioco la malleabilità. Vale la pena di esaminare alcune delle opzioni fornite all'operatore per personalizzare C2. Inoltre, in sintesi, parleremo di come queste rendono difficile il rilevamento, soprattutto con le strategie di rilevamento basate sulle firme. Separerò il riepilogo delle funzionalità tra rete ed endpoint. Le opzioni presentate non sono in alcun modo da considerarsi un elenco esaustivo.
Evasione attraverso la personalizzazione
Indipendentemente dal protocollo di rete, ad esempio HyperText Transfer Protocol (HTTP) o HTTPS, gli agenti comunicano con i server in un modo specifico. Se si utilizza HTTP, molte parti di una conversazione HTTP possono essere ispezionate dalle difese del livello di rete. Ad esempio, le stringhe all'interno di un'intestazione HTTP che sono sufficientemente uniche possono essere utilizzate dai difensori per rilevare le connessioni sul filo. Cose come agenti-utente unici, stringhe di accettazione personalizzate e valori di percorso unici sono tutte ispezionabili Le impostazioni possono essere utilizzate anche per modificare gli elementi dell'intestazione dal lato server.
Con i profili malleabili si può semplicemente rispecchiare i valori di un programma legittimo, come quelli dell'intestazione HTTP, per far apparire la connessione identica a connessioni benigne, come ad esempio l'agente di aggiornamento di Microsoft Windows. L'immagine seguente mostra la ricostruzione con Wireshark di una sessione HTTP che utilizza un profilo malleabileCobalt Strike Windows update.

Vale la pena di sottolineare che le trasformazioni dei dati sono disponibili per codificare i dati prima della trasmissione. Forse non è evidente, ma l'Uniform Resource Identifier (URI) che segue la richiesta HTTP GET nella schermata precedente è codificato in base 64 prima della trasmissione e poi decodificato sul server. L'elenco seguente riporta le trasformazioni di dati disponibili in Cobalt Strike.

Inoltre, è possibile combinare più trasformazioni. Ad esempio, base64 e maschera possono essere stratificate insieme per aggiungere OPSEC.
Anche nei casi in cui si utilizza HTTPS, i valori possono essere manipolati, come ad esempio i certificati SSL (Secure Sockets Layer). Il seguente certificato SSL è utilizzato dai profili di aggiornamento di Windows menzionati in precedenza:

Oltre al controllo sul modo in cui le connessioni appaiono sul filo, i valori di temporizzazione che controllano quando il client si connette al server C2 possono essere manipolati tramite profili malleabili. Valori come jitter e delay consentono agli aggressori di modificare l'intervallo di tempo tra le connessioni C2.
Endpoint malleabile
La malleabilità non viene utilizzata solo quando l'agente invia dati in rete, ma anche quando controlla le caratteristiche in-memory, il modo in cui si inietta nei processi e le attività post-exploitation. Ciò è utile per eludere il rilevamento e la risposta endpoint (EDR) e il rilevamento antivirus. Un esempio qui sotto mostra alcune opzioni relative al comportamento dell'agente sull'endpoint di destinazione che possono essere impostate nei profili malleabili.

Nel blocco stage si può controllare il modo in cui l'agente viene caricato in memoria. È possibile specificare elementi quali il nome, l'ora di compilazione, i permessi di memoria, l'offuscamento e il tipo di caricatore. Spesso gli analisti alla ricerca di codice dannoso caricato in un processo controllano prima i segmenti di memoria e si concentrano sui segmenti caricati con l'autorizzazione RWX nei segmenti di memoria sospetti.
Nelle opzioni di iniezione del processo è possibile modellare il contenuto iniettato. È possibile imbottire i dati utilizzando le opzioni di trasformazione, impostare il metodo di allocazione e controllare le autorizzazioni. Infine, è possibile controllare le attività di post exploitation scegliendo diversi nomi di pipe da utilizzare, utilizzare l'iniezione intelligente e specificare le posizioni di spawn. Questo è ottimo per eludere e testare le soluzioni EDR. Per una panoramica più esaustiva, potete visitare la guida online di Cobalt Strikes.
Sfide per i difensori
Permettere una tale granularità di controllo delle comunicazioni C2 e del comportamento di staging rende la difesa e il rilevamento con le firme un compito impegnativo. Un altro punto da sottolineare è che, mentre Cobalt Strike ha consentito la malleabilità per qualche tempo, anche altri framework C2 popolari come Empire C2 stanno adottando profili malleabili. Questo, unito al fatto che il loro uso è in aumento nelle recenti intrusioni da parte di attori APT e ransomware, rende il compito dei difensori sempre più complesso.
Le tecnologie di difesa delle reti e degli endpoint dovranno disporre di firme rapidamente aggiornate o utilizzare altri metodi di indagine per rilevare il comando e il controllo che non si basino su schemi ripetuti nei dati o addirittura su sequenze temporali che corrispondano all'attività di beaconing.