Nel post precedente abbiamo analizzato le differenze tra penetration test, red team e adversary simulation. Per le ultime due ho menzionato il tool Cobalt Strike del quale ora evidenziamo gli aspetti che lo rendono il  framework commerciale più adoperato.

Una delle caratteristiche fondamentali per un tool di red teaming è che esso permetta all’attaccante di essere invisibile agli occhi del blue team evitando di fornire indicazioni di intrusioni o compromissioni già avvenute (IOC). Molto spesso le indicazioni possono essere reperite analizzando il traffico di rete e individuando specifici pattern all’interno di url, richieste HTTP, comunicazioni DNS.

Nel seguito, con il supporto di casi reali, analizzeremo una delle tecniche più importante dalla suite Cobalt Strike per garantire l’elusione dei meccanismi di difesa quella che viene definita “Malleable C2”.

Cosa si intende per C2?

In ambito Cyber per C2 o anche “Command e Control” si intende una macchina gestita da un attaccante e utilizzata per inviare comandi, azioni che saranno poi eseguite dalle macchine compromesse. Tale concetto viene utilizzato anche in operazioni di red teaming o adversary simulation nelle quali si assume che il server di C&C sia controllato dal team di attacco e che le macchine compromesse ricadano nel perimetro sottoposto all’audit di sicurezza.

Cosa si intende per Malleable C2?

Cobalt Strike offre la possibilità di variare le modalità con cui dialogano le macchine compromesse e il server di C&C. E’ possibile diversificare ad esempio il tipo di protocollo utilizzato, la modalità per incapsulare informazioni, dati e operazioni al loro interno.
Sono supportati i seguenti protocolli:

  • HTTP e HTTPS: informazioni scambiate mediante richieste GET o POST
  • Dns: si incapsulano i dati all’interno di richieste DNS.

Malleable C2 profile

Si intende un file di testo il cui contenuto è utilizzato per specificare nel dettaglio la conformazione delle comunicazioni tra client e server. L’ idea alla base del concetto di malleable profile è che per nascondere le comunicazioni tra i device infetti e il punto di C&C si riproduce un normale traffico di rete in modo da sfuggire alle analisi del team di difesa. Di seguito uno spaccato di esempio:

# define indicators for an HTTP POST
http-post {
    set uri 
    "/modules/mod_search.php/blog/wp-includes/
    pomo/src.php /includes/phpmailer/class.pop3.php";
    client {
	    header "Content-Type" "application/octet-stream";
# transmit our sess id as /whatever.php?id=[identifier]
	id {
	      parameter "id";
	   }
# post our output with no real changes
	output {
		 print;
		}
	}
# The server's response to our HTTP POST
      server {
	        header "Server" "Apache/2.2.26 (Unix)";
	        header "X-Powered-By" "PHP/5.3.28";
	        header "Cache-Control" "no-cache";
	        header "Content-Type" "text/html";
	        header "Keep-Alive" "timeout=3, max=100";
# this will just print an empty string, meh...
        output {
		  prepend "blah blah blah";
		  mask;
		  base64;
		  prepend 
                  "<html><head><mega http-equiv=
                  'CACHE-CONTROL' content='NO-CACHE'>
                  </head>
                  <body>Sorry, no data corresponding your request.
                  <!--havex";
		  append "havex--></body></html>";
		  print;
		}
	}

Nel blocco:

http-post {
	client {  
..... 
}

specifichiamo a Cobalt Strike quali dovranno essere le conformazioni delle richieste POST che dal client saranno dirette verso il server. Con il blocco di codice sottostante invece si indica come interpretare le risposte provenienti dal server:

server { 
..............
}

Nell’ambito delle attività di adversary simulation la libertà di poter modificare a piacimento lo scambio di dati rende possibile emulare i principi di funzionamento dei malware utilizzati in reali campagne di attacco mirate (APT) per testare sul campo l’efficacia dei sistema di difesa. Nel repository Github Raphael Mudge l’ideatore di Cobalt Strike ha creato una raccolta di Malleable C2 profile pronti all’uso. Prenderò come esempio il caso del malware Havex di tipo RAT (Remote Access Trojan), un software malevolo adoperato in una campagna di spionaggio nei confronti di sistemi Scada.  Vi sono evidenze di attacchi mediante Cobalt Strike più recenti.

Se procediamo ad importare il modulo HAVEX.profile e analizziamo le comunicazioni noteremo un flusso simile al seguente:

Havex malware
Havex C&C communication

Nella response è visibile come viene replicata una delle caratteristiche del trojan ovvero che le istruzioni e i comandi impartiti alle macchine infette vengono inviate dal server mediante codifica in base64 all’interno del body di una pagina HTML.

Conclusioni

Nel post abbiamo analizzato le funzionalità fornite da Cobalt Strike per testare il grado di risposta del blue team ad attacchi sofisticati. La semplice modifica di un file di testo permette la conseguente modifica delle modalità con cui è possibile comandare a distanza le macchine compromesse in un perimetro. La semplicità con cui le operazioni e le modalità di attacco possano essere adattate rappresenta una delle caratteristiche di punta del tool.