Nome e qualifica del proponente del progetto: 
sb_p_1963221
Anno: 
2020
Abstract: 

Il progetto di ricerca proposto mira ad automatizzare il processo di reverse engineering (RE) al fine di recuperare informazioni di alto livello senza analizzare manualmente l'intero codice sorgente. Il reverse engineering è ampiamente utilizzato in cyber security per verificare che un sistema software sia privo di difetti di sicurezza o vulnerabilità: aiuta a rendere un sistema robusto, proteggendolo così da attacchi hacker e spyware. Ci sono due componenti nel reverse engineering: redocumentation e design recovery. Il componente considerato nel progetto è il design recovery, cioè l'utilizzo della deduzione o del ragionamento per comprendere appieno la funzionalità, non documentata, del prodotto.

Per facilitare il processo di analisi del software, sarebbe ideale disporre di strumenti che generino automaticamente un modello a partire dal codice sorgente. Il modello creato fornirebbe le informazioni essenziali, ma utili per l'analisi. Le informazioni ottenute saranno utilizzate per facilitare il lavoro dell'analista, ma soprattutto per determinare una classificazione del codice analizzato. L'analisi automatizzata non andrebbe a sostituire completamente la figura dell'analista, ma fungerebbe come strumento di supporto per guidare l'analisi.

In questo modo l'analista avendo un modello astratto del codice da analizzare potrà decidere quali sono le parti di codice che sono necessarie da analizzare perché risultano più interessanti secondo la classificazione proposta. Il codice sarà classificato seguendo due principali obiettivi. Per il primo obiettivo verrà effettuata una distinzione tra il codice maligno da quello non maligno. Invece per il secondo obiettivo si farà la distinzione tra codice di bassa qualità (codice soggetto a errori/bugs) e codice di alta qualità (ovvero un codice che segue le best practices di programmazioni).

ERC: 
PE6_11
PE6_3
Componenti gruppo di ricerca: 
sb_cp_is_2467056
Innovatività: 

I due obiettivi proposti sono di per sé innovativi. Per quello che viene rivelato dallo stato dell'arte, non esiste uno studio che si occupi dell'obiettivo 2 come descritto. L'obiettivo 2 potrebbe avere un forte impatto pratico, e potrebbe suscitare l'interesse di altri ricercatori, aprendo una linea di lavoro interessante. invece, per l'obiettivo 1, gli studi finora condotti si sono concentrati sull'analisi statica del codice per automatizzare il rilevamento del malware [2] o ci sono studi che, pur tenendo conto dell'analisi dinamica, non sono riusciti a sfruttare tutte le informazioni che l'esecuzione dinamica offre [3]. In particolare, non esistono studi che tentino di sfruttare modelli di machine learning per analizzare contemporaneamente le informazioni derivanti dall'analisi statica e dall'esecuzione dinamica del codice. In aggiunta, i lavori di binary similarity, finora presentati, non riescono a rilevare una somiglianza semantica del codice [1,2].

L'innovazione più notevole introdotta è la decisione di sfruttare sia il codice sorgente sia le informazioni che si possono ottenere durante l'osservazione dell'esecuzione del codice. Per fare ciò, è necessario trasformare il codice sorgente in una rappresentazione che possa essere utilizzata con tecnica di machine learning. Alcune rappresentazioni sono già state presentate [3,4] e quindi cercheremo di adattarle al nostro scopo, in caso di fallimento definiremo una nuova rappresentazione.
Durante l'esecuzione dinamica verrà registrata l'intera traccia di istruzioni x86 generata insieme agli effetti causati dall'esecuzione. Gli articoli proposti finora non considerano le informazioni ottenute dall'esecuzione dinamica del codice, o almeno non tutte le informazioni.

A titolo di esempio:
[7] sfrutta solo le informazioni registrate dalla sandbox in cui viene eseguito il malware, che sono contenute nei log di sistema, come i cambiamenti dei devices, i cambiamenti di sistema, le operazioni e altro ancora

Studi precedenti, come [8] hanno esaminato le relazioni di dipendenza tra le chiamate di sistema e utilizzano un algoritmo di graph matching che analizzati i sottografi del codice assegnando loro un certo peso, quello con il peso massimo è considerato codice dannoso

Invece [3] sfrutta l'incorporazione di parole, è un metodo ben studiato per convertire un corpus di testo scritto in linguaggio naturale in rappresentazioni vettoriali di parole incorporate in uno spazio a bassa dimensione, utilizzato per convertire il programma e usare il vettore restituito come input per un learner.

Pertanto, la proposta valuterà se le tracce di esecuzione arricchiscono la potenza dei modelli di rappresentazione del codice. In caso positivo, come si crede, questo farà avanzare lo stato dell'arte studiando una linea di ricerca valida. Al meglio delle nostre conoscenze, tutti i modelli rappresentativi del codice binario basati su Deep Neural Network (DNN) non considerano le informazioni di esecuzione. Questa lacuna è presente anche nella maggior parte delle opere che costruiscono modelli probabilistici di codice [6]. Multimodal Machine Learning (MML) sarà un framework utile per sviluppare i modelli. Per quanto si sa, l'MML non è stato utilizzato nel dominio del codice sorgente (e quindi anche del codice di basso livello). È interessante notare che lo studio dell'applicabilità del MML al codice è stato indicato come un importante obiettivo di ricerca futuro nell'indagine di Allamanis et al. sul Big Code [5].

Bibliografia:

[1] D. Gao, M. Reiter, D. Song. "Binhunt: Automatically finding semantic differences in binary programs." In International Conference on Information and Communications Security, pp. 238-255. Springer, Berlin, Heidelberg, 2008.

[2] D. McKee, N. Burow, M. Payer. "Software Ethology". arXiv:1906.02928v1, 2019.

[3] J. Henkel, S. Lahiri, B. Liblit, T. Reps. "Code vectors: Understanding programs through embedded abstracted symbolic traces." In Proc. of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, pp. 163-174. ACM, 2018.

[4] J. Pewny, B. Garmany, R. Gawlik, C. Rossow, and T. Holz. "Cross-architecture bug search in binary executables." In 2015 IEEE Symposium on Security and Privacy, pp. 709-724. IEEE, 2015.

[5] M. Allamanis, E. Barr, P. Devanbu, C. Sutton. "A Survey of Machine Learning for Big Code and Naturalness". arXiv:1709.06182, 2017.

[6] M. Allamanis, M. Brockschmidt, M. Khademi. "Learning to Represent Programs with Graphs". arXiv:1711.00740, 2017.

[7] Q. Chen, R. Bridges. "Automated behavioral analysis of malware a case study of WannaCry Ransomware". arXiv:1709.08753, 2017.

[8] Y. Ding, X. Xia, S. Chen, Y Li. "A malware detection method based on family behavior graph." Computers & Security 73 (2018): 73-86.

Codice Bando: 
1963221

© Università degli Studi di Roma "La Sapienza" - Piazzale Aldo Moro 5, 00185 Roma