Exploits for memory corruption vulnerabilities often use control-flow redirection as means of achieving arbitrary code execution. For this reason, current state-of-the-art defense proposals have control-flow integrity (CFI) preservation as their main objective. A recent example is Intel's Control-flow Enforcement Technology (CET): a hardware-assisted CFI preservation mechanism implemented in modern Intel Core processors, which makes it significantly harder for a potential attacker to perform control-flow redirection of a vulnerable program. However, post-CET exploitation is still possible through function pointer hijacking under the right conditions. If an arbitrary write vulnerability is present in a program, global function pointers of loaded libraries could be overwritten to possibly achieve arbitrary code execution bypassing state-of-the-art CFI defenses such as CET. We propose an approach for identifying global function pointers defined in C libraries, their call sites reachable from exported library functions, and how to reach them. The identification of such library functions is done through static source code analysis, and symbolic execution is then used to identify and solve constraints on function parameters and global variables needed to direct the control-flow of a program to such call sites, with focus on the evaluation of complex parameters such as structure pointers. We present Untangle, an open-source tool that implements and automates this approach. Untangle was tested on several open source C libraries, identifying a total of 57 unique global function pointers, reachable through 1488 different exported functions, finding and verifying the correctness of the constraints to be satisfied in order to reach global function pointer calls through 484 of them.

Gli exploit di vulnerabilità di corruzione della memoria vengono spesso attuati tramite redirezione del control-flow di un programma per ottenere esecuzione di codice arbitrario. Per questo motivo, l'attuale stato dell'arte in termini di difesa ha come scopo principale la preservazione dell'integrità del control-flow. Un esempio recente è un'estensione di sicurezza sviluppata da Intel per gli ultimi modelli di processori Intel Core, chiamata Control-flow Enforcement Technology (CET). Meccanismi di difesa come CET rendono significativamente più complesso alterare il control-flow di un programma vulnerabile. Tuttavia, l'utilizzo di exploit che sfruttano la sovrascrittura di puntatori a funzione è ancora possibile in determinate condizioni. Un programma che presenta vulnerabilità che permettono la scrittura arbitraria in memoria, renderebbe possibile la sovrascrittura di puntatori a funzione globali definiti nelle librerie utilizzate dal programma, permettendo di aggirare meccanismi di difesa all'avanguardia come CET. Con il nostro lavoro proponiamo un approccio per identificare puntatori a funzione globali definiti in librerie C, le loro chiamate raggiungibili da funzioni di libreria esportate, ed il modo in cui raggiungerle. L'identificazione di tali funzioni di libreria è effettuata tramite analisi statica del codice sorgente. L'esecuzione simbolica viene successivamente impiegata per trovare e soddisfare eventuali vincoli su parametri di funzione e variabili globali necessari per raggiungere chiamate di puntatori a funzione globali, con particolare interesse verso parametri complessi come puntatori a strutture. Abbiamo sviluppato Untangle, uno strumento open source che implementa ed automatizza questo approccio. Untangle è stato testato su diverse librerie C open source, nelle quali abbiamo identificato un totale di 57 differenti puntatori a funzione globali, le cui chiamate sono raggiungibili tramite 1488 funzioni esportate. Abbiamo infine identificato i vincoli necessari per il raggiungimento di tali chiamate e verificato la loro correttezza in 484 dei casi.

Aiding global function pointer hijacking for post-CET binary exploitation

Bertani, Alessandro;BONELLI, MARCO
2021/2022

Abstract

Exploits for memory corruption vulnerabilities often use control-flow redirection as means of achieving arbitrary code execution. For this reason, current state-of-the-art defense proposals have control-flow integrity (CFI) preservation as their main objective. A recent example is Intel's Control-flow Enforcement Technology (CET): a hardware-assisted CFI preservation mechanism implemented in modern Intel Core processors, which makes it significantly harder for a potential attacker to perform control-flow redirection of a vulnerable program. However, post-CET exploitation is still possible through function pointer hijacking under the right conditions. If an arbitrary write vulnerability is present in a program, global function pointers of loaded libraries could be overwritten to possibly achieve arbitrary code execution bypassing state-of-the-art CFI defenses such as CET. We propose an approach for identifying global function pointers defined in C libraries, their call sites reachable from exported library functions, and how to reach them. The identification of such library functions is done through static source code analysis, and symbolic execution is then used to identify and solve constraints on function parameters and global variables needed to direct the control-flow of a program to such call sites, with focus on the evaluation of complex parameters such as structure pointers. We present Untangle, an open-source tool that implements and automates this approach. Untangle was tested on several open source C libraries, identifying a total of 57 unique global function pointers, reachable through 1488 different exported functions, finding and verifying the correctness of the constraints to be satisfied in order to reach global function pointer calls through 484 of them.
BINOSI, LORENZO
ZANERO, STEFANO
ING - Scuola di Ingegneria Industriale e dell'Informazione
6-ott-2022
2021/2022
Gli exploit di vulnerabilità di corruzione della memoria vengono spesso attuati tramite redirezione del control-flow di un programma per ottenere esecuzione di codice arbitrario. Per questo motivo, l'attuale stato dell'arte in termini di difesa ha come scopo principale la preservazione dell'integrità del control-flow. Un esempio recente è un'estensione di sicurezza sviluppata da Intel per gli ultimi modelli di processori Intel Core, chiamata Control-flow Enforcement Technology (CET). Meccanismi di difesa come CET rendono significativamente più complesso alterare il control-flow di un programma vulnerabile. Tuttavia, l'utilizzo di exploit che sfruttano la sovrascrittura di puntatori a funzione è ancora possibile in determinate condizioni. Un programma che presenta vulnerabilità che permettono la scrittura arbitraria in memoria, renderebbe possibile la sovrascrittura di puntatori a funzione globali definiti nelle librerie utilizzate dal programma, permettendo di aggirare meccanismi di difesa all'avanguardia come CET. Con il nostro lavoro proponiamo un approccio per identificare puntatori a funzione globali definiti in librerie C, le loro chiamate raggiungibili da funzioni di libreria esportate, ed il modo in cui raggiungerle. L'identificazione di tali funzioni di libreria è effettuata tramite analisi statica del codice sorgente. L'esecuzione simbolica viene successivamente impiegata per trovare e soddisfare eventuali vincoli su parametri di funzione e variabili globali necessari per raggiungere chiamate di puntatori a funzione globali, con particolare interesse verso parametri complessi come puntatori a strutture. Abbiamo sviluppato Untangle, uno strumento open source che implementa ed automatizza questo approccio. Untangle è stato testato su diverse librerie C open source, nelle quali abbiamo identificato un totale di 57 differenti puntatori a funzione globali, le cui chiamate sono raggiungibili tramite 1488 funzioni esportate. Abbiamo infine identificato i vincoli necessari per il raggiungimento di tali chiamate e verificato la loro correttezza in 484 dei casi.
File allegati
File Dimensione Formato  
executive_summary.pdf

accessibile in internet per tutti

Descrizione: Executive Summary
Dimensione 493.68 kB
Formato Adobe PDF
493.68 kB Adobe PDF Visualizza/Apri
thesis.pdf

accessibile in internet per tutti

Descrizione: Thesis
Dimensione 1.17 MB
Formato Adobe PDF
1.17 MB 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/195248