Altering the behavior of binary programs without access to their source code is desirable for many purposes, including bug-fixing, debugging, reverse engineering, security research and more. Throughout the years the research field of binary rewriting has created techniques suited for many of those purposes, although a general approach to this task is still an open problem. In this thesis, we present CRISPR, a system which allows to apply patches to individual functions of a compiled program, with the ability to write them in a high level language such as C. The patch can be applied in-place, affecting only the code of the function to patch, or it can be applied out-of-place gaining the ability to include an arbitrary amount of code and data and import new dynamic libraries. We also describe how the source code obtained automatically from the rev.ng binary lifter can be edited and used with CRISPR to apply patches without the need to reimplement the entire target function. We apply CRISPR in a case study where we patch a vulnerability – both in-place and out-of-place –, and collect data showing how effectively the code obtained using the rev.ng lifter can be used to apply patches without reimplementing unrelated pieces of code.

Modificare il comportamento di programmi compilati senza avere accesso al loro codice sorgente è utile in molteplici ambiti, come ad esempio il l'identificazione e la correzione di bug, l'ingegneria inversa e la ricerca di vulnerabilità di sicurezza. Negli anni, il campo di ricerca del binary rewriting ha originato tecniche che possono servire a molti degli scopi sopracitati, tuttavia una soluzione generale è ancora un problema aperto. In questa tesi presentiamo CRISPR, un sistema che permette di applicare modifiche non invasive a funzioni individuali di un programma compilato, consentendo di scrivere la patch in un linguaggio di alto livello come il C. La patch può essere applicata localmente (in-place), sovrascrivendo solamente il codice della funzione da modificare, o può essere applicata non in-place, ottenendo la possibilità di includere una quantità arbitraria di nuovo codice e dati e di importare nuove librerie dinamiche. Discutiamo inoltre di come il codice sorgente ottenuto automaticamente tramite l'utilizzo del binary lifter rev.ng sia utilizzabile come punto di partenza modificabile per applicare modifiche senza reimplementare l'intera funzione da alterare. Applichiamo CRISPR in un caso di studio in cui correggiamo una vulnerabilità – sia in-place che non –, ed inoltre raccogliamo dei dati che misurano l'efficacia delle metodologie presentate nel consentire l'uso del codice ottenuto da rev.ng per applicare patch senza la necessità di reimplementare parti di codice non correlate.

CRISPR. Binary patching using high-level languages

Cremonese, Filippo
2020/2021

Abstract

Altering the behavior of binary programs without access to their source code is desirable for many purposes, including bug-fixing, debugging, reverse engineering, security research and more. Throughout the years the research field of binary rewriting has created techniques suited for many of those purposes, although a general approach to this task is still an open problem. In this thesis, we present CRISPR, a system which allows to apply patches to individual functions of a compiled program, with the ability to write them in a high level language such as C. The patch can be applied in-place, affecting only the code of the function to patch, or it can be applied out-of-place gaining the ability to include an arbitrary amount of code and data and import new dynamic libraries. We also describe how the source code obtained automatically from the rev.ng binary lifter can be edited and used with CRISPR to apply patches without the need to reimplement the entire target function. We apply CRISPR in a case study where we patch a vulnerability – both in-place and out-of-place –, and collect data showing how effectively the code obtained using the rev.ng lifter can be used to apply patches without reimplementing unrelated pieces of code.
DI FEDERICO, ALESSANDRO
ING - Scuola di Ingegneria Industriale e dell'Informazione
23-lug-2021
2020/2021
Modificare il comportamento di programmi compilati senza avere accesso al loro codice sorgente è utile in molteplici ambiti, come ad esempio il l'identificazione e la correzione di bug, l'ingegneria inversa e la ricerca di vulnerabilità di sicurezza. Negli anni, il campo di ricerca del binary rewriting ha originato tecniche che possono servire a molti degli scopi sopracitati, tuttavia una soluzione generale è ancora un problema aperto. In questa tesi presentiamo CRISPR, un sistema che permette di applicare modifiche non invasive a funzioni individuali di un programma compilato, consentendo di scrivere la patch in un linguaggio di alto livello come il C. La patch può essere applicata localmente (in-place), sovrascrivendo solamente il codice della funzione da modificare, o può essere applicata non in-place, ottenendo la possibilità di includere una quantità arbitraria di nuovo codice e dati e di importare nuove librerie dinamiche. Discutiamo inoltre di come il codice sorgente ottenuto automaticamente tramite l'utilizzo del binary lifter rev.ng sia utilizzabile come punto di partenza modificabile per applicare modifiche senza reimplementare l'intera funzione da alterare. Applichiamo CRISPR in un caso di studio in cui correggiamo una vulnerabilità – sia in-place che non –, ed inoltre raccogliamo dei dati che misurano l'efficacia delle metodologie presentate nel consentire l'uso del codice ottenuto da rev.ng per applicare patch senza la necessità di reimplementare parti di codice non correlate.
File allegati
File Dimensione Formato  
2021_07_Cremonese.pdf

Open Access dal 09/07/2022

Dimensione 1.35 MB
Formato Adobe PDF
1.35 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/177822