Software reverse engineering is a process that enables the comprehension of the internal workings of a binary executable, without accessing the original source code. Malware detection is an application of reverse engineering. It involves determining whether a binary executable is harmful or not. One common technique for classifying binaries as malicious is to build their control flow graph (CFG) and compare it against a set of CFGs extracted from known malicious software. Traditionally, control-flow analysis is performed statically, without actually running the sample. However, malware creators frequently obfuscate their binaries to hinder static analysis. Packing is an obfuscation technique consisting of encrypting a binary and creating a new one that automatically decrypts itself during the execution. Static approaches fail to analyze packed binaries, and manually unpacking them is an incredibly time-consuming activity that is specific to the employed packer. Therefore, there is a need for a general approach to generate the CFG of such binaries, without unpacking them before the analysis. This work presents Pinflow, a generic, dynamic approach to recovering the control flow graph of packed Windows binary executables. We test our approach on GNU Coreutils binaries, both non-obfuscated and obfuscated with two different types of packers, and compare our results against those of state-of-the-art static tools such as Ghidra. Pinflow constructs for unpacked binaries a CFG that is perfectly comparable to the one recovered by Ghidra, with a function coverage of approximately 31%, a basic block coverage of approximately 38.81%, and an edge coverage of approximately 18%. Moreover, Pinflow outperforms Ghidra on the same binaries when packed, since it recovers about 468% more basic blocks and 680% more functions.

Il reverse engineering del software è un processo che consente di comprendere il funzion- amento interno di un programma, senza accedere al codice sorgente originale. La rile- vazione di malware è un’applicazione del reverse engineering, che consiste nel determinare se un file eseguibile è dannoso. Una tecnica comune per classificare un programma come malevolo o meno consiste nel costruire il suo control-flow graph (CFG) e confrontarlo con un insieme di altri CFG estratti da software notoriamente malevoli. Tradizionalmente, l’estrazione del control-flow graph viene effettuata staticamente, senza effettivamente es- eguire il binario. Tuttavia, gli sviluppatori di malware spesso offuscano i loro binari per ostacolare l’analisi statica. Il packing è una tecnica di offuscamento che consiste nel criptare un binario e crearne uno nuovo che si descripta automaticamente durante la sua esecuzione. Gli approcci statici falliscono nell’analisi di binari packati e il processo di unpacking manuale è incredibilmente dispendioso in termini di tempo, nonchè specifico per il packer utilizzato. Pertanto, c’è bisogno di un approccio generale per recuperare il CFG di tali binari senza doverli unpackare prima dell’analisi. Questo lavoro presenta Pinflow, un generico approccio dinamico per recuperare il control- flow graph di un eseguibile Windows packato. Abbiamo testato il nostro approccio sui binari della suite GNU Coreutils, sia non offuscati che offuscati con due diversi tipi di packer, e abbiamo confrontato i nostri risultati con quelli di strumenti allo stato dell’arte, ad esempio Ghidra. Pinflow costruisce per i binari non offuscati un CFG perfettamente confrontabile con quello recuperato da Ghidra, con una function coverage di circa il 31%, una basic block coverage di circa il 38,81% e una edge coverage di circa il 18%. Inoltre, il nostro strumento ha risultati migliori di Ghidra sugli stessi binari quando packati, recu- perando circa il 468% di basic block in piu’ e il 680% di funzioni in piu’.

Pinflow : a dynamic approach to recover the control-flow graph of packed binaries

Mammone, Daniele
2021/2022

Abstract

Software reverse engineering is a process that enables the comprehension of the internal workings of a binary executable, without accessing the original source code. Malware detection is an application of reverse engineering. It involves determining whether a binary executable is harmful or not. One common technique for classifying binaries as malicious is to build their control flow graph (CFG) and compare it against a set of CFGs extracted from known malicious software. Traditionally, control-flow analysis is performed statically, without actually running the sample. However, malware creators frequently obfuscate their binaries to hinder static analysis. Packing is an obfuscation technique consisting of encrypting a binary and creating a new one that automatically decrypts itself during the execution. Static approaches fail to analyze packed binaries, and manually unpacking them is an incredibly time-consuming activity that is specific to the employed packer. Therefore, there is a need for a general approach to generate the CFG of such binaries, without unpacking them before the analysis. This work presents Pinflow, a generic, dynamic approach to recovering the control flow graph of packed Windows binary executables. We test our approach on GNU Coreutils binaries, both non-obfuscated and obfuscated with two different types of packers, and compare our results against those of state-of-the-art static tools such as Ghidra. Pinflow constructs for unpacked binaries a CFG that is perfectly comparable to the one recovered by Ghidra, with a function coverage of approximately 31%, a basic block coverage of approximately 38.81%, and an edge coverage of approximately 18%. Moreover, Pinflow outperforms Ghidra on the same binaries when packed, since it recovers about 468% more basic blocks and 680% more functions.
D'ONGHIA, MARIO
ING - Scuola di Ingegneria Industriale e dell'Informazione
4-mag-2023
2021/2022
Il reverse engineering del software è un processo che consente di comprendere il funzion- amento interno di un programma, senza accedere al codice sorgente originale. La rile- vazione di malware è un’applicazione del reverse engineering, che consiste nel determinare se un file eseguibile è dannoso. Una tecnica comune per classificare un programma come malevolo o meno consiste nel costruire il suo control-flow graph (CFG) e confrontarlo con un insieme di altri CFG estratti da software notoriamente malevoli. Tradizionalmente, l’estrazione del control-flow graph viene effettuata staticamente, senza effettivamente es- eguire il binario. Tuttavia, gli sviluppatori di malware spesso offuscano i loro binari per ostacolare l’analisi statica. Il packing è una tecnica di offuscamento che consiste nel criptare un binario e crearne uno nuovo che si descripta automaticamente durante la sua esecuzione. Gli approcci statici falliscono nell’analisi di binari packati e il processo di unpacking manuale è incredibilmente dispendioso in termini di tempo, nonchè specifico per il packer utilizzato. Pertanto, c’è bisogno di un approccio generale per recuperare il CFG di tali binari senza doverli unpackare prima dell’analisi. Questo lavoro presenta Pinflow, un generico approccio dinamico per recuperare il control- flow graph di un eseguibile Windows packato. Abbiamo testato il nostro approccio sui binari della suite GNU Coreutils, sia non offuscati che offuscati con due diversi tipi di packer, e abbiamo confrontato i nostri risultati con quelli di strumenti allo stato dell’arte, ad esempio Ghidra. Pinflow costruisce per i binari non offuscati un CFG perfettamente confrontabile con quello recuperato da Ghidra, con una function coverage di circa il 31%, una basic block coverage di circa il 38,81% e una edge coverage di circa il 18%. Inoltre, il nostro strumento ha risultati migliori di Ghidra sugli stessi binari quando packati, recu- perando circa il 468% di basic block in piu’ e il 680% di funzioni in piu’.
File allegati
File Dimensione Formato  
thesis_daniele_mammone.pdf

solo utenti autorizzati dal 11/04/2024

Descrizione: Thesis
Dimensione 1.22 MB
Formato Adobe PDF
1.22 MB Adobe PDF   Visualizza/Apri
executive_summary_daniele_mammone.pdf

solo utenti autorizzati dal 11/04/2024

Descrizione: Executive Summary
Dimensione 491.57 kB
Formato Adobe PDF
491.57 kB Adobe PDF   Visualizza/Apri

I documenti in POLITesi sono protetti da copyright e tutti i diritti sono riservati, salvo diversa indicazione.

Utilizza questo identificativo per citare o creare un link a questo documento: https://hdl.handle.net/10589/204932