Un’attenta analisi dei malware ci fornisce tutti gli strumenti e le informazioni necessarie per studiare i comportamenti di questi software malevoli e classificarli in base a una serie di possibili schemi. Le librerie di malware, dette anche collezioni, sono uno strumento importantissimo in mano al ricercatore, allo stesso modo di un orto botanico, uno zoo o un acquario: può essere utilizzato per fare dei test su strumenti di sicurezza che dovrebbero riconoscerli, come gli antivirus, per sistematizzare tutta la conoscenza, a mo’ di enciclopedia, sui malware esistenti conosciuti e a fini didattici nelle facoltà di informatica per insegnare la struttura e il funzionamento di questi programmi.
Il Virus Test Center di Amburgo ha dato una serie di linee guida per chi volesse essere interessato a costruirsi una tale base di dati.
Le tre funzionalità principali delle librerie di malware (o threat library) sono le seguenti:
- fornire posizioni organizzate, indicizzate e ricercabili per informazioni strutturate e non, relative alla sicurezza;
- essere facilmente accessibile non solo da interfaccia nativa, web o altro ma fornire pure accesso ai dati da sistemi remoti tramite API o altri modi machine-friendly;
- aggregare automaticamente e normalizzare i dati mantenendo la traccia di cosa è stato aggiunto o modificato, da chi e quando.
Secondo Panda security ogni giorno vengono prodotti più di 230.000 nuovi campioni di malware facendo sì, quindi, che una libreria possa facilmente contenere diversi milioni di esemplari. Essendo, di fatto, un archivio, si può assumere come modello generico di funzionamento lo standard OAIS.
Un oggetto da archiviare (nel nostro caso campioni di malware) vive in un archivio in almeno tre formati diversi:
- quello in cui viene depositato all’archivio;
- quello in cui viene fisicamente archiviato;
- quello in cui viene reso disponibile al ricercatore che ne fa richiesta.
Quando si sceglie il formato di deposito, ad esempio, bisogna specificare se il campione può arrivare criptato, eventualmente con password, oppure compresso, se deve essere un singolo file o se può contenere directory e così via. Inoltre, va concordato il mezzo di trasmissione, ad esempio via e-mail criptata o via SFTP.
Il processo di deposito in archivio comporta la trasformazione, senza perdita di informazioni, dal formato di deposito al formato di archiviazione, ma anche la classificazione, il riconoscimento se trattasi di un malware noto e l’eventuale scarto se il campione esiste già nell’archivio. Per quanto riguarda il riconoscimento di duplicati, può fare comodo l’uso di utility di Duplicate File Locator, come ad esempio questa o AllDup, tanto per citarne un paio. Ovviamente è necessario definire cosa si intende per duplicato: se, cioè, file con lo stesso nome, con la stessa prima parte del nome, con gli stessi contenuti o anche con lo stesso hash o checksum CRC.
Un altro aspetto da verificare in fase di deposito è che il file non sia corrotto o anche infettato. In quest’ultimo caso è importante avere a disposizione strumenti appositi per rimuovere tutto ciò che non interessa.
Indice degli argomenti
Librerie di malware: ecco come avviene la classificazione
La fase di classificazione deve seguire standard appropriati come ad esempio quello di CARO (the Computer Anti-virus Researchers’ Organization). In questo caso occorrerà creare nell’archivio un albero gerarchico di directory in cui i malware costituiscono le “foglie”.
Per ogni deposito, oltre al file devono essere raccolti opportuni metadati e altri ancora si aggiungeranno in fase di analisi. Occorre tenere presente che non tutti i metadati raccolti devono per forza essere pubblici dal momento che tra di essi ci potrebbero essere la descrizione di come e dove sono stati trovati, il nome dell’organizzazione infettata e altri dati anche sensibili. L’analisi, poi, restituirà in generale una serie di IOC (Indicatori di Compromissione), come indirizzi IP, URL, hash ecc. che accompagneranno il campione come metadati.
Se l’archivio prevede che i campioni vengano messi a disposizione di ricercatori esterni, devono essere stabilite le policy di utilizzo e, in particolare, le modalità di accesso (ad esempio utente registrato o no, utente proveniente da istituzioni riconosciute o no ecc.), i formati di download, sottoscrizione di un agreement di usare i campioni solo a fini di studio e così via. Eventualmente è possibile anche pensare a un accesso utente a due livelli: al primo è possibile visionare tutte le caratteristiche del malware mentre al secondo è possibile anche scaricare un campione dello stesso, il che permetterebbe di distinguere tra un utente generico e uno specialista.
Tra le librerie indichiamo:
- TheZoo (altro link)
- Nothink
- VirusTotal
- The Malware Museum
- Mal4all
- AVCaesar
- VirusBay
- VX Vault
- Hybrid Analysis
- Infosec cert-pa
- VX Collector Edition
- VX Heaven (altro link)
- VirusShare
- Contagio Malware dump
- Das Malwerk
- Kernelmode.info
- Malshare
- Mac Malware
- Virusign
Evoluzione dei malware
Il “riuso del codice” è una pratica anzi, potremmo dire, una best practice, che costituisce un obiettivo dello sviluppo software probabilmente a partire da quando si parla di ingegneria del software. Esso ha portato alla nascita del concetto di sviluppo per librerie, componenti, moduli, controlli e così via che costituiscono i blocchi costruttivi da assemblare e integrare per costruire un qualsiasi programma. Lo stesso concetto vale anche per i malware. Questi, come virus e worm, sono spesso riferiti a malware precedenti attraverso relazioni evoluzionistiche. Scoprire queste relazioni e costruire un modello filogenetico è utile per analizzare nuovi malware e per stabilire dei criteri di nomenclatura.
Gli autori di malware usano generatori, incorporano librerie e prendono in prestito codice da altri. Esiste una rete consolidata, soprattutto nel Dark Web, per lo scambio di codice malevolo.
La filogenesi (o filogenetica o filogenia) è un termine mutuato dalla biologia dove indica il processo di ramificazione delle linee di discendenza nell’evoluzione della vita. La sua ricostruzione è fondamentale per la sistematica che si occupa di ricostruire le relazioni di parentela evolutiva, di gruppi tassonomici di organismi a qualunque livello sistematico. Il diagramma che mostra i rapporti filogenetici tra specie o gruppi superiori si chiama albero filogenetico (fonte Wikipedia).
I due approcci principali al problema si basano su:
- l’osservazione di un organismo dal punto di vista morfologico cioè sostanzialmente come è fatto e cosa fa (es. come corre, come mangia, il numero di arti, il modo di riprodursi, se ha degli occhi ecc.);
- l’osservazione di un organismo dal punto di vista costitutivo, cioè da cosa è composto, il che viene fatto con l’analisi biochimica o della sequenza del DNA.
Se ribaltiamo quanto appena visto allo studio di un malware questi due approcci si traducono in due tecniche:
- l’analisi di un software in termini delle funzionalità e del comportamento che espone;
- le sequenze di codice da cui è composto.
Nel primo caso si può supporre di partire da un malware p e, attraverso l’applicazione di un certo numero di operazioni di offuscamento T, che vedremo in un articolo successivo, generare un nuovo malware p’=T(p).
Nel secondo, invece, si tratta di capire se esistono pezzi di codice in comune.
In entrambi i casi portare quello che si sa in ambito biologico, in termini di metodologie soprattutto, in ambito informatico può certamente aiutare.
Le tecniche per individuare i malware
L’albero dei suffissi (suffix tree), ad esempio, è una tecnica che aiuta a ricercare, in tempi ragionevoli, sottostringhe, di lunghezza arbitraria, all’interno di una stringa data. Esso quindi permette di risolvere il problema:
Data una stringa T (chiamata testo) e una stringa P (chiamata pattern), trovare tutte le occorrenze di P in T. Un’occorrenza di P in T è una sottostringa di T uguale a P.
Ad esempio:
T = ATACATACCCATATACGAGGCATACATGGCGAGTGTGC
P = CGAG
Con i modelli di tipo edit distance si cerca di quantificare le differenze tra due stringhe contando il numero minimo di operazioni necessario per trasformare una nell’altra. Questa tecnica, ad esempio, viene utilizzata nel processamento del linguaggio naturale per la correzione automatica di parole scritte male selezionando parole da un dizionario che si trovino a breve distanza da una parola data. In bioinformatica, ciò può essere usato per quantificare la somiglianza di sequenze di DNA. Tra le operazioni previste per la trasformazione ci possono essere ad esempio inserimento, eliminazione, sostituzione di un singolo carattere oppure trasposizioni di due caratteri adiacenti oppure anche merge o split.
Un’ulteriore tecnica sono gli algoritmi MSA (Multiple sequence alignments). Questa si riferisce al fatto di localizzare in stringhe diverse sequenze di stringhe uguali intervallate da altri caratteri. Nella bioinformatica, le sequenze possono essere sequenze di DNA, RNA o proteine che hanno regioni simili l’una con l’altra a causa di relazioni strutturali, funzionali o evolutive. Ad esempio, in figura è mostrato l’esistenza di sequenze di stringhe uguali all’interno di proteine di specie di mammiferi diverse.
Nel caso del malware queste tecniche servono ovviamente a trovare sequenze di codice uguale in campioni diversi.
Una rappresentazione grafica dell’algoritmo MSA
Ulteriori metodi di machine learning di analisi dei malware utilizzano gli n-grammi. Data una stringa, gli n-grammi sono tutte le sottostringhe di lunghezza fissa n. Ad esempio, la stringa “MALWARE” può essere segmentata in diversi 4-grammi: “MALW”, “ALWA”, “LWAR”, “WARE” e così via. Relativamente al codice di un malware, che sarebbe la nostra “stringa di partenza”, è possibile lavorare con granularità variabile, a seconda che si lavori a livello di singoli byte, oppure di istruzioni assembler o di intere linee di codice. Tipicamente l’analisi riguarda tutti gli n-grammi con n che va da 1 a 10 e, come prima cosa, si misura quante volte, cioè la frequenza, con cui ogni n-gramma capita nel codice del malware. Avremo così alla fine un certo numero di coppie chiave-valore in cui la chiave è lo specifico n-gramma e il valore è quante volte viene trovato nel testo. Questo insieme per un malware sconosciuto viene dato in pasto a una macchina a cui è stato dato in apprendimento lo stesso insieme per il numero più grosso possibile di malware noti. In tal modo, l’algoritmo dovrebbe riuscire a estrarre eventuali situazioni simili già note.
Un’altra metodologia per scoprire le somiglianze tra i malware è quella delle Chernoff face. È una tecnica di analisi dei dati semi-automatica che trasforma insiemi di attributi di una variabile in caratteristiche di una faccia come, ad esempio, la forma e la posizione di occhi, orecchi, sopracciglia ecc. In questo modo si sfrutta l’elevata capacità del cervello umano di riconoscere le differenze nelle facce: facce simili vogliono dire campioni simili, cioè appartenenti allo stesso cluster. Nel nostro caso, gli strumenti di analisi estraggono dai malware una serie di indicatori che vengono visualizzati attraverso questa tecnica, consentendo così all’analista umano di riconoscere a colpo d’occhio, è proprio il caso di dire, campioni che potrebbero appartenere alle stesse famiglie.