I covert channel sono un fenomeno in continua espansione che attirano l’interesse di attori diversi, spesso antagonisti: utenti, community, cyber criminali, intelligence governative, aziende e digital lobbies dei big data.
Un covert channel (canale nascosto) è un qualsiasi metodo di comunicazione utilizzato per comunicare e/o trasferire informazioni in modalità occulta e furtiva. Lo scopo primario nell’utilizzare un canale nascosto è quello di superare le politiche di sicurezza di sistemi ed organizzazioni. Esistono molteplici tipologie di cyber minacce che possono riguardare la sicurezza multilivello (MLS) di infrastrutture e sistemi ICT ed aumentano ogni giorno ad un ritmo impressionante. Gli ingegneri e gli amministratori di sistema sono quindi continuamente impegnati nella gestione quotidiana della sicurezza e spesso non prestano sufficiente attenzione sul campo, ignorando ad es. minacce come i canali nascosti. Qualsiasi risorsa condivisa può essere potenzialmente utilizzata come canale nascosto e questo rende tutto più difficile, in altre parole, i canali segreti non sono ovunque ma possono essere ovunque.
I canali nascosti non vanno confusi con i sistemi di anonimato come ad es. TOR, in quanto questi ultimi mirano a proteggere le azioni e l’identità di un utente, mentre i canali nascosti in genere servono per creare flussi nascosti non autorizzati di informazioni, in violazione a politiche di sicurezza (esfiltrazioni di informazioni).
Esistono principalmente tre tipologie di canali nascosti:
- Covert Channel Timing (Temporizzazione)
- Covert Channel Storage (Archiviazione)
- Covert Channel Behavioral (Comportamentali)
le principali tre caratteristiche di un canale nascosto sono:
- Stealthiness (furtività): cioè la caratteristica intrinseca dei canali nascosti è di aggirare i controlli in maniera nascosta. I canali nascosti sono falle nella sicurezza multilivello di un sistema.
- Bandwith (capacità di trasmissione): cioè la capacità di trasmissione dati. Nei canali nascosti la capacità di trasmissione è generalmente bassa in termini di dati/tempo (throughput) in quanto utilizzando altre risorse un eccessivo carico di informazioni potrebbe rendere anomalo il funzionamento di quelle risorse o le normali strutture dati. Il throughput è generalmente misurato in b/s (bit al secondo) o kb/s, nei canali nascosti il throughput è generalmente inversamente correlato alla segretezza di un canale, ovvero più dati un canale può trasmettere in un determinato periodo di tempo, maggiore è il rischio che il canale venga scoperto.
- Indistinguishability (Indistinguibilità) i canali nascosti in genere sfruttano servizi e risorse già presenti quindi non sospette, uno dei maggiori problemi nell’implementazione di un canale nascosto è il “rumore”. Un canale nascosto si dice rumoroso quando per comunicare ad es. sfrutta eccessivamente le risorse alterando e/o danneggiando il corretto funzionamento delle stesse, sollevando così attenzioni da parte degli amministratori di sistema. Riuscire a trasmette attraverso un canale nascosto mantenendo conforme e inalterato il funzionamento della risorsa utilizzata permette di rendersi “indistinguibili” dalla risorsa autorizzata ed invisibili ai sistemi di monitoraggio.
I canali nascosti possono essere progettati sia per un singolo sistema che per una rete. L’incredibile numero di applicazioni e sistemi connessi oggi ad internet, con cui quotidianamente interagiamo, sono diventati un ottimale veicolo per creare canali nascosti: giochi online, app, servizi in cloud, sistemi IoT, lo stesso protocollo TCP/IP, tutti potenziali vettori di cui i canali nascosti sfruttano caratteristiche e difetti. Il livello di attenzione sui canali nascosti negli ultimi anni si è andato sempre più alzando anche in considerazione dell’utilizzo degli stessi da parte della criminalità informatica e in ambito di cyber warfare per quanto riguarda lo spionaggio governativo e le cyber weapon.
Covert Channel Timing (temporizzazione)
I canali nascosti di temporizzazione sono metodi di comunicazione che permettono ad un osservatore (umano o processo) di acquisire informazioni attraverso il cambiamento nel tempo di risposta di una risorsa. In altre parole, è essenzialmente qualsiasi metodo che utilizza un orologio o una misurazione del tempo per segnalare il valore inviato sul canale.
Facciamo qualche esempio, in questo video (fig.1): https://www.youtube.com/watch?v=QIvsmQQ6vu8
l’autore, attraverso un hardware open source, dimostra come esfiltra dati da un router fisicamente non modificato, leggendo il rapido lampeggio (non rilevabile dall’occhio umano) del LED di trasmissione. In questo caso il canale nascosto è addirittura “involontario” cioè non esiste una parte ostile consapevole che trasmette i dati ma solo la parte “osservatrice”.
Covert Channel Storage (Archiviazione)
I canali nascosti di archiviazione sono metodi di comunicazione che “includono tutti i veicoli, che consentirebbero la scrittura diretta o indiretta di una risorsa da parte di un processo, e la lettura diretta o indiretta di esso da parte di un altro. In altre parole, un processo scrive su una risorsa condivisa, mentre un altro processo legge da essa. I canali di archiviazione possono essere utilizzati tra processi all’interno di un singolo computer o tra più computer in una rete. Un esempio di canale di archiviazione è la condivisione di un file. Supponiamo che l’utente A con privilegi di autorizzazione elevati voglia trasmettere in segreto, dati riservati all’utente B con un livello di sicurezza inferiore. Per fare questo, nel nostro esempio, utilizzerà un file word apparentemente contenente informazioni non classificate, dove invece occulterà l’informazione riservata, vediamo come.
L’utente A crea un file word (DocumentoNonClassificato.docx) con informazioni non classificate (Fig.2):
Dopo aver salvato il file cambia la sua estensione da .docx a .zip, in quanto l’attuale formato di Microsoft Word, altro non è che un file zip (Fig.3), facendo quindi doppio click sul file l’utente A potrà vederne la struttura ed il contenuto:
Il file word presenta al suo interno diversi file con estensione .xml e questi file come tali si comportano. Quindi per inserire il messaggio segreto l’utente A non dovrà far altro che inserire un tag di commento (<! — COMMENTO QUI –>) all’interno di uno dei file xml contenuto nel documento di word, e scrivere all’interno del tag l’informazione classificata.
Nell’esempio l’utente A esporta il file [Content_Types].xml ed inserisce l’informazione riservata all’interno del commento (Fig.4) .
A questo punto l’utente A sostituisce il file [Content_Types].xml modificato con quello presente nel file zip, cambia nuovamente l’estensione del file in .docx e prova ad aprire il file per verificare che tutto funzioni correttamente e che l’applicazione Word non rilevi anomalie, quindi invia il file tramite email o lasciandolo condiviso su qualche cartella di rete interna o in cloud, per l’utente B.
In questo esempio notiamo anche la presenza di tecniche di steganografia, frequentemente utilizzata nella creazione stessa dei canali nascosti. Spesso il tema associato all’occultamento delle informazioni, include a pieno titolo la steganografia ma per maggiori approfondimenti sull’argomento vi rimando ad un mio articolo di qualche tempo fa sull’argomento:
Covert Channel Behavioral (Comportamentali)
I canali nascosti comportamentali operano trasmettendo dati in base all’assegnazione di diversi eventi di processi, sistemi e applicazioni, generalmente suddividendo e trasmettendo i dati in pacchetti più piccoli.
Tra i più affascinanti canali nascosti comportamentali, in cui mi sono imbattuto, quello che utilizza il protocollo ICMP (Internet Control Message Protocol), sfrutta appieno caratteristiche quali la rapidità di attivazione, semplicità d’uso e bypassa molte delle policy e standard di sicurezza con estrema nonchalance, manifestando in maniera ottimale le caratteristiche di Stealthiness e Indistinguishability.
L’ICMP è progettato per fornire feedback su problemi di comunicazione di una rete TCP/IP. L’ ICMP si affida al supporto di base dell’IP come parte di protocollo di livello superiore. A causa di questa dipendenza, sia ICMPv4 che ICMPv6 esistono per entrambe le versioni di IP. Applicazioni come ad es. traceroute e ping utilizzano i messaggi ICMP per raccogliere informazioni e diagnosticare eventuali problemi di rete.
I canali nascosti spesso sfruttano per i propri flussi di informazioni, alcune caratteristiche tecniche incorporate nelle reti IEEE 802, caratteristiche che normalmente non vengono “viste” a livello di rete più alto perché considerate di servizio.
L’idea di utilizzare l’ICMP come canale nascosto è quindi quella di sfruttare una comunicazione standard con un protocollo inferiore rispetto a TCP o UDP. Questo avrà un “ingombro” ridotto in tutto il traffico di rete e potrà passare inosservato agli amministratori di rete e agli analizzatori di traffico, in quanto, come detto, normalmente è utilizzato per la diagnostica e manutenzione della rete e degli host connessi, non per il trasporto dati, quindi difficilmente bloccato da policy di sicurezza.
Questo rende il protocollo ICMP un canale nascosto decisamente praticabile, l’uso di campi dati o payload all’interno di determinati messaggi ICMP permette di incorporare il messaggio del canale nascosto facilmente e trasforma paradossalmente l’ICMP stesso in un canale nascosto. Questi semplici fattori consentono all’ICMP di essere di fatto un traffico invisibile, vediamo un esempio.
L’utente A vuole trasmettere un file riservato all’utente B. L’utente A utilizzerà il protocollo “ICMP echo request” (con il comando ping) per trasmettere il file all’interno delle richieste icmp suddividendo il documento in piccoli pacchetti (di dimensioni compatibili con la struttura dati del pacchetto icmp) trasmettendoli uno ad uno ad ogni “echo request” (ping) fino al completamento del contenuto del file.
L’utente A per inserire il file riservato nelle trasmissioni “ICMP echo requests”, nell’esempio, utilizza il programma hping3, un generatore e analizzatore di pacchetti per il protocollo TCP/IP, scritto dallo sviluppatore italiano Salvatore Sanfilippo (noto anche come Antirez). Il software si basa sullo stesso concetto del comando Unix ping ma fa anche uso di protocolli diversi dall’ICMP, permettendo di gestire la costruzione a piacere del pacchetto IP, quindi anche l’invio di pacchetti IP semplici, privi al loro interno di un protocollo layer 4 o che possono contenere dati personalizzati, come nel nostro caso.
Per installare il comando sulla sua macchina Linux l’utente A esegue il comando:
sudo apt install hping3
Il file riservato che l’utente A vuole trasmettere è messaggio.txt (Fig.5)
L’utente B per ricevere e catturare i dati deve mettersi in ascolto sulla rete e per fare questo, nel nostro esempio, installa l’applicazione tcpdump:
sudo apt-get install -y tcpdump
tcpdump è un tool per il debug di reti di computer che permette di intercettare i pacchetti che arrivano sulla scheda di rete.
Una volta installato, l’utente B si mette in ascolto, in attesa della trasmissione con il seguente comando:
L’utente A inizia la trasmissione eseguendo il comando :
L’utente A comincia a vedere le risposte di ricezione da parte del client remoto agli “echo request” (Fig.6)
Quando hping3 completa la lettura del file lo segnala con la scritta:
EOF reached, wait some second than press ctrl+c
A questo punto l’utente A può terminare la trasmissione.
L’utente B a sua volta termina la cattura dei pacchetti ed analizza i dati ricevuti.
Nel nostro esempio utilizziamo il programma wireshark per l’analisi dei dati e che può essere installato semplicemente con il comando:
sudo apt install wireshark
Installato wireshark l’utente B apre il file direttamente da terminale con il comando:
wireshark messaggio.pcap
L’interfaccia di wireshark permette all’utente B di vedere i pacchetti acquisiti e capire se i dati sono arrivati (Fig.7).
Il passo successivo, per l’utente B, è quello di ricomporre i pacchetti e rendere l’informazione nuovamente leggibile, quindi nel nostro caso, in formato ASCII. L’utente B procede quindi a convertire i dati raw in un formato esadecimale inserendo i caratteri di fine riga per ricostruire la formattazione del testo originale, per questo utilizza il programma tshark (sudo apt install tshark) con il seguente comando:
sudo tshark -n -q -r messaggio.pcap -T fields -e data.data | tr -d “\n” |tr -d “:” > messaggiohex.txt
Generato il file messaggiohex.txt l’utente B converte infine il testo esadecimale ottenuto in ASCII attraverso un sito di conversione di formati online (https://www.rapidtables.com/convert/number/hex-to-ascii.html) (Fig.8)
In questo articolo ho voluto dare una brevissima panoramica su un argomento molto più ampio ed esteso di quanto si possa pensare; infatti, sebbene la maggior parte dei canali nascosti esistenti, sia solitamente utilizzata per scopi dannosi come la diffusione di malware, spionaggio industriale o governativo, esistono molti studi per utilizzarli come alternative nella trasmissione di informazioni sensibili in reti non attendibili, ad es. come una sorta di backup, di connessione di emergenza che sfrutta temporaneamente altre risorse, normalmente progettate e utilizzate per scopi diversi, per poter continuare a comunicare in caso di interruzione del sistema di connessione principale.
I covert channel, i canali nascosti, rappresentano una grande sfida per la cybersecurity, da una parte la minaccia dall’altra una potenziale risorsa da studiare ed utilizzare, entrambe, facce della stessa medaglia.
Articolo a cura di Francesco Arruzzoli
https://www.ictsecuritymagazine.com/articoli/covert-channel-canali-segreti-per-comunicare-in-maniera-non-convenzionale/