Facciamo una valutazione degli attuali sistemi di detection basati sulla signature, implementati negli attuali prodotti antimalware commerciali e non. E così scoprire quanto è facile eludere i controlli, per un malware.
Attraverso un software si è in grado di applicare una serie di trasformazioni (triviali e non) ad una serie di malware noti e ben conosciuti, lo scopo finale è valutare se gli attuali sistemi di detection di malware sono in grado di rilevare i software malevoli anche in seguito all’applicazione di una serie di tecniche di offuscamento (atte ovviamente a non cambiare la finalità malevola del programma, ergo la semantica, ma solo la sintassi, ovvero la struttura del codice).
Gli attuali sistemi di riconoscimenti del malware (ovvero, i cosiddetti software antimalware) funzionano su un paradigma che è denominato signature-based, basato quindi su una firma, ovvero un identificatore. La generazione di questa firma è un processo che avviene attraverso un processo di ispezione manuale da parte degli analisti, i quali attraverso l’utilizzo di tecniche di analisi statica (analisi del codice, che non quindi non richiede l’esecuzione dell’applicazione) e dinamica (analisi di registri, della memoria e del comportamento del software in esame quando è in esecuzione) sono costantemente alla ricerca di nuovi comportamenti malevoli implementati nel software. Una volta che una firma è stata generata dagli analisti, quest’ ultima viene rilasciata attraverso il meccanismo di aggiornamento delle firme virali dell’antimalware installato sul nostro computer: da questo momento in poi saremo protetti contro questa minaccia, in quanto il nostro antimalware sarà in grado di riconoscerla. |
Valutazione degli attuali sistemi antimalware
Esamineremo, come caso di studio, la piattaforma Android.
Di seguito le trasformazioni implementate nell’offuscatore:
- Disassembling and Reassembling: questa trasformazione consente di rappresentare i vari elementi presenti all’interno dell’eseguibile dell’applicazione Android (il cosiddetto dex file) in maniera differente;
- Changing package name: ogni applicazione Android presenta una firma dello sviluppatore, che andrà persa in seguito all’operazione di disassembling and reassembling. Per creare una nuova firma ci siamo avvalsi del tool signapk, al fine di integrare una nuova firma (anche l’applicazione di una nuova firma può rappresentare quindi una trasformazione);
- Identifier renaming: ogni applicazione è identificata da un nome di package univoco. Scopo della seguente trasformazione è quello di sostituire il nome del package, e quindi tutte le chiamate che coinvolgono quest’ ultimo, con una stringa generate casualmente;
- Data encoding: questa trasformazione prevede la sostituzione di tutte le stringhe alfanumeriche presenti all’interno dell’applicazione in esame con un’altra stringa codifica con un cifrario di Cesare con chiave pari a tre. E’ stata prevista anche la routine di decifratura, la quale a tempo d’esecuzione provvede a rendere di nuovo in chiaro le stringhe cifrate al momento dell’invocazione;
- Call indirection: questa trasformazione provvede a cambiare l’ordine delle invocazioni fra due metodi dell’applicazione. In pratica viene inserito automaticamente un nuovo metodo fra due metodi, il cui è scopo è solo quello di essere invocato dal metodo precedente e di invocare il metodo successo.
- Code reordering: il riordino casuale delle istruzioni è lo scopo principale di questa trasformazione. In pratica vengono inserite una serie di operazioni “goto”, preservando ovviamente il flusso originale di esecuzione dell’applicazione;
- Junk code insertion: scopo di questa trasformazione è l’inserimento di istruzioni cosiddette di “nop” (cioè, no-operation). Antimalware che basano la firma su sequenze di istruzioni consecutive potrebbero essere inefficaci contro software malevolo offuscato con questa tecnica.
Queste trasformazioni sono state implementate in uno strumento sviluppato in Python e Java reso disponibile per scopi di ricerca su github.
Le trasformazioni sono state applicate su un dataset di 5600 malware Android i quali sono stati esaminati con 57 differenti antimalware forniti dal servizio VirusTotal.
I risultati
I risultati sono nella tabella seguente:
Tabella 1: risultati dell’ analisi, la colonna “pop” indica il numero di campioni per la famiglia in analisi, la colonna “#pre” indica il numero di campioni identificati come non malware prima della trasformazioni, la colonna “#post” indica il numero di campioni identificati come legittimi dopo la trasformazione, mentre l’ultima colonna (%trusted) indica la percentuale di campioni trasformati della famiglia identificati come software benevolo dopo l’applicazione delle tecniche di offuscamento.
Dai risultati ottenuti si evince che, pur avendo applicato tecniche di offuscamento triviali, si è stati in grado di generare varianti di malware esistente che non vengono rilevate dagli strumenti antimalware.
Per esempio, analizzando la famiglia “FakeInstaller”, una delle più popolose nel dataset esaminato, il risultato ottenuto è che su una popolazione di 919 malware della famiglia in oggetto, un solo campione era stato rilevato come legittimo prima dell’ applicazione delle trasformazioni (colonna “#pre”), in seguito all’ applicazione delle tecniche di offuscamento 918 campioni su 919 sono stati etichettati come legittimi (colonna “#post”), con una percentuale di 99.89 campioni della famiglia identificati come legittimi.
Medesimi risultati sono stati ottenuti per le rimanenti famiglie, evidenziando come l’applicazione di semplici tecniche di offuscamento (talmente semplici che possono essere applicate in maniera automatizzata attraverso un software che prende in input l’applicazione e permette di generare automaticamente la versione trasformata) è effettivamente possibile eludere gli attuali meccanismi di rilevamento malware basati su signature. I risultati completi dello studio sono visionabili nella ref. 1).
____________________________________________________________
Bibliografia
- Canfora, G., Di Sorbo, A., Mercaldo, F., & Visaggio, C. A. (2015, May). Obfuscation techniques against signature-based detection: a case study. In Mobile Systems Technologies Workshop (MST), 2015 (pp. 21-26). IEEE
- Mercaldo, F., Visaggio, C. A., Oropallo, A., & Pirone, P. (2016). Evaluating the commercial and research antimalware tools against malware in the wild and third-party markets: A technical report.
- Maiorca, D., Mercaldo, F., Giacinto, G., Visaggio, C. A., & Martinelli, F. (2017, April). R-PackDroid: API package-based characterization and detection of mobile ransomware. In Proceedings of the Symposium on Applied Computing (pp. 1718-1723). ACM.
- Mercaldo, F., Nardone, V., Santone, A., & Visaggio, C. A. (2016, June). Ransomware steals your phone. formal methods rescue it. In International Conference on Formal Techniques for Distributed Objects, Components, and Systems (pp. 212-221). Springer, Cham.
- Cimitile, A., Mercaldo, F., Nardone, V., Santone, A., & Visaggio, C. A. (2017). Talos: no more ransomware victims with formal methods. International Journal of Information Security, 1-20.
- Cimitile, A., Martinelli, F., Mercaldo, F., Nardone, V., & Santone, A. (2017, June). Formal methods meet mobile code obfuscation identification of code reordering technique. In Enabling Technologies: Infrastructure for Collaborative Enterprises (WETICE), 2017 IEEE 26th International Conference on (pp. 263-268). IEEE.