Embedded systems are now a constant in our everyday life: we are used to using systems such as smartphones, smartwatches, fitness trackers, but also mass storage devices, power banks and others, as if they were extensions of our body, neglecting, however, the fact that opponents can tamper them. These tools are programmed to perform specific functions. Like all processor- based devices, however, they could harm users when they execute code (i.e., firmware) controlled by opponents. Firmware is a snippet of user-uneditable code that controls the hardware of a system by managing low-level operations without which the system would not be functional. If modified, it may cause malfunctions or introduce unwanted features from the user. In the last few years, various vulnerabilities and attacks on software embedded in USB devices have been discovered, thanks to the large diffusion of these devices. For this reason, they are among the primary targets of malicious attacks. The identification of these vulnerabilities was also possible thanks to automated firmware analysis systems, designed to find bugs that can be exploited to gain control of a device. In this paper, we want to present an automated and scalable method for extracting firmwares from USB device update applications, even in the absence of the device. This new method allows to automate and speed up the collection of firmwares from USB devices by analysing the update protocols used in Windows software, for subsequent large-scale analysis of vulnerabilities. The focus is on firmwares of USB devices because there are not many systems of analysis of such software (one of these is FirmUSB). Furthermore, these systems do not implement an effective method of extracting large amounts of data to make their approach scalable. Our way is also useful for the creation of new large-scale analysis systems for this type of firmware and devices. We have extracted and classified 34,051 resource files from 298 applications to detect the presence of firmware in the form of binary files. This is useful for further filtering the applications from which it is not possible to extract the binary files directly, thus speeding up further analysis of the protocols. We compared the results of clustering on resources with those of classification with a C4.5 decision tree and we obtained the best results with the latter, quantifiable with a 96.8% correct prediction calculated on a test set of 300 resource files extracted randomly from the dataset. The test set is composed at 20% from files recognized as firmware and at 80% from any resources. Currently, the method works only on HID USB devices (Human Interface Device) for the wide availability of software and the diffusion of such devices. We want to extend the work to USB devices of other classes and other embedded systems. We would also like to develop extraction compatibility to update different protocols from those analysed, to expand the possibilities of our system.

I sistemi embedded sono ormai una costante nella nostra vita di tutti i giorni: siamo abituati ad utilizzare sistemi come smartphones, smartwatchs, fitness trackers, ma anche dispositivi di archiviazione di massa, powerbanks e altri, come se fossero estensioni del nostro corpo, trascurando però il fatto che anch’essi possono essere manomessi da avversari. Questi strumenti sono programmati per eseguire determinate funzionalità. Come tutti i dispositivi dotati di microprocessore, però, potrebbero arrecare danno agli utenti, nel momento in cui venga eseguito del codice (i.e., firmware) controllato da avversari. Il firmware è un frammento di codice non modificabile dall’utente che controlla l’hardware di un sistema gestendo le operazioni di basso livello senza le quali il sistema non sarebbe funzionale. Se modificato, può causare malfunzionamenti o introdurre funzionalità indesiderate dall’ utente. Negli ultimi anni sono state scoperte diverse vulnerabilità e attacchi a livello di software embedded nei dispositivi USB, i quali hanno avuto una grande diffusione. Per questo motivo sono tra i principali bersagli di attacchi malevoli. L’identificazione di tali vulnerabilità e stata possibile anche grazie a sistemi automatici di analisi di firmware, pensati per trovare bugs che possono essere sfruttati per ottenere il controllo di un dispositivo. In questo lavoro vogliamo presentare un metodo automatizzato e scalabile per l’estrazione di firmware dalle applicazioni di aggiornamento dei dispositivi USB, anche in assenza del dispositivo. Questo nuovo metodo permette di automatizzare e velocizzare la raccolta di firmware da dispositivi USB tramite l’analisi dei protocolli di aggiornamento utilizzati nei software Windows, per successive analisi di vulnerabilità su larga scala. Il focus è rivolto ai firmware di dispositivi USB perché non ci sono molti sistemi di analisi di tale software (uno di questi è FirmUSB). Inoltre questi sistemi non implementano un metodo efficace di estrazione di grandi quantità di dati per rendere scalabile il loro approccio. Il nostro metodo è anche utile per la creazione di nuovi sistemi di analisi su larga scala per questa tipologia di firmware e di dispositivi. Nonostante vi siano alcuni protocolli standard per dispositivi USB, pochi produttori li adottano, preferendo l’implementazione dei propri algoritmi. Tutti i protocolli richiedono la presenza fisica del dispositivo USB per lanciare la procedura di aggiornamento e, nel caso dei protocolli proprietari, fanno l’upload del software sulla memoria del dispositivo usando metodi diversi da produttore a produttore. Ci siamo focalizzati sulla risoluzione di due problematiche principali. La prima legata alla presenza del dispositivo connesso, necessaria per lanciare la procedura di aggiornamento del firmware: abbiamo adottato un approccio di emulazione dei descrittori per il riconoscimento di una periferica USB, con l’obiettivo di rendere il nostro sistema indipendente da dispositivi fisici. La seconda è legata alla varietà di metodi per la scrittura del firmware in memoria: abbiamo usato metodi di IAT hooking, che consiste nel prendere il controllo del flow del programma durante le chiamate alle funzioni di scrittura, per dirottare la scrittura dal dispositivo a un supporto differente, come ad esempio un file di testo, estraendo così il firmware. Abbiamo estratto e classificato 34,051 file di risorse da 298 applicazioni per individuare la presenza di firmware sotto forma di file binari. Questo è utile per filtrare ulteriormente gli applicativi da cui non è possibile estrarre direttamente i file binari, velocizzando ancora di più le successive analisi sui protocolli. Abbiamo confrontato i risultati di clustering sulle risorse con quelli di classificazione con un albero di decisione C4.5 e abbiamo ottenuto i risultati migliori con quest’ultimo, quantificabili con una predizione corretta al 96.8% calcolata su un test set di 300 file di risorse estratti randomicamente dal dataset. Il test set, in particolare è composto al 20% da file riconosciuti come firmware e all’ 80% da risorse qualsiasi. Attualmente il metodo funziona solo su dispositivi USB HID (Human Interface Device) per l’ampia disponibilità di software e per la diffusione di tali dispostivi. Vorremmo estendere il lavoro a dispositivi USB di altre classi e ad altri sistemi embedded. Inoltre vorremmo sviluppare la compatibilità per l’estrazione a protocolli di aggiornamento diversi da quelli analizzati, per ampliare le possibilità del nostro sistema.

Towards automatic firmware extraction from update applications

FERRER, MARK EDWARD
2017/2018

Abstract

Embedded systems are now a constant in our everyday life: we are used to using systems such as smartphones, smartwatches, fitness trackers, but also mass storage devices, power banks and others, as if they were extensions of our body, neglecting, however, the fact that opponents can tamper them. These tools are programmed to perform specific functions. Like all processor- based devices, however, they could harm users when they execute code (i.e., firmware) controlled by opponents. Firmware is a snippet of user-uneditable code that controls the hardware of a system by managing low-level operations without which the system would not be functional. If modified, it may cause malfunctions or introduce unwanted features from the user. In the last few years, various vulnerabilities and attacks on software embedded in USB devices have been discovered, thanks to the large diffusion of these devices. For this reason, they are among the primary targets of malicious attacks. The identification of these vulnerabilities was also possible thanks to automated firmware analysis systems, designed to find bugs that can be exploited to gain control of a device. In this paper, we want to present an automated and scalable method for extracting firmwares from USB device update applications, even in the absence of the device. This new method allows to automate and speed up the collection of firmwares from USB devices by analysing the update protocols used in Windows software, for subsequent large-scale analysis of vulnerabilities. The focus is on firmwares of USB devices because there are not many systems of analysis of such software (one of these is FirmUSB). Furthermore, these systems do not implement an effective method of extracting large amounts of data to make their approach scalable. Our way is also useful for the creation of new large-scale analysis systems for this type of firmware and devices. We have extracted and classified 34,051 resource files from 298 applications to detect the presence of firmware in the form of binary files. This is useful for further filtering the applications from which it is not possible to extract the binary files directly, thus speeding up further analysis of the protocols. We compared the results of clustering on resources with those of classification with a C4.5 decision tree and we obtained the best results with the latter, quantifiable with a 96.8% correct prediction calculated on a test set of 300 resource files extracted randomly from the dataset. The test set is composed at 20% from files recognized as firmware and at 80% from any resources. Currently, the method works only on HID USB devices (Human Interface Device) for the wide availability of software and the diffusion of such devices. We want to extend the work to USB devices of other classes and other embedded systems. We would also like to develop extraction compatibility to update different protocols from those analysed, to expand the possibilities of our system.
QUARTA, DAVIDE
ING - Scuola di Ingegneria Industriale e dell'Informazione
20-dic-2018
2017/2018
I sistemi embedded sono ormai una costante nella nostra vita di tutti i giorni: siamo abituati ad utilizzare sistemi come smartphones, smartwatchs, fitness trackers, ma anche dispositivi di archiviazione di massa, powerbanks e altri, come se fossero estensioni del nostro corpo, trascurando però il fatto che anch’essi possono essere manomessi da avversari. Questi strumenti sono programmati per eseguire determinate funzionalità. Come tutti i dispositivi dotati di microprocessore, però, potrebbero arrecare danno agli utenti, nel momento in cui venga eseguito del codice (i.e., firmware) controllato da avversari. Il firmware è un frammento di codice non modificabile dall’utente che controlla l’hardware di un sistema gestendo le operazioni di basso livello senza le quali il sistema non sarebbe funzionale. Se modificato, può causare malfunzionamenti o introdurre funzionalità indesiderate dall’ utente. Negli ultimi anni sono state scoperte diverse vulnerabilità e attacchi a livello di software embedded nei dispositivi USB, i quali hanno avuto una grande diffusione. Per questo motivo sono tra i principali bersagli di attacchi malevoli. L’identificazione di tali vulnerabilità e stata possibile anche grazie a sistemi automatici di analisi di firmware, pensati per trovare bugs che possono essere sfruttati per ottenere il controllo di un dispositivo. In questo lavoro vogliamo presentare un metodo automatizzato e scalabile per l’estrazione di firmware dalle applicazioni di aggiornamento dei dispositivi USB, anche in assenza del dispositivo. Questo nuovo metodo permette di automatizzare e velocizzare la raccolta di firmware da dispositivi USB tramite l’analisi dei protocolli di aggiornamento utilizzati nei software Windows, per successive analisi di vulnerabilità su larga scala. Il focus è rivolto ai firmware di dispositivi USB perché non ci sono molti sistemi di analisi di tale software (uno di questi è FirmUSB). Inoltre questi sistemi non implementano un metodo efficace di estrazione di grandi quantità di dati per rendere scalabile il loro approccio. Il nostro metodo è anche utile per la creazione di nuovi sistemi di analisi su larga scala per questa tipologia di firmware e di dispositivi. Nonostante vi siano alcuni protocolli standard per dispositivi USB, pochi produttori li adottano, preferendo l’implementazione dei propri algoritmi. Tutti i protocolli richiedono la presenza fisica del dispositivo USB per lanciare la procedura di aggiornamento e, nel caso dei protocolli proprietari, fanno l’upload del software sulla memoria del dispositivo usando metodi diversi da produttore a produttore. Ci siamo focalizzati sulla risoluzione di due problematiche principali. La prima legata alla presenza del dispositivo connesso, necessaria per lanciare la procedura di aggiornamento del firmware: abbiamo adottato un approccio di emulazione dei descrittori per il riconoscimento di una periferica USB, con l’obiettivo di rendere il nostro sistema indipendente da dispositivi fisici. La seconda è legata alla varietà di metodi per la scrittura del firmware in memoria: abbiamo usato metodi di IAT hooking, che consiste nel prendere il controllo del flow del programma durante le chiamate alle funzioni di scrittura, per dirottare la scrittura dal dispositivo a un supporto differente, come ad esempio un file di testo, estraendo così il firmware. Abbiamo estratto e classificato 34,051 file di risorse da 298 applicazioni per individuare la presenza di firmware sotto forma di file binari. Questo è utile per filtrare ulteriormente gli applicativi da cui non è possibile estrarre direttamente i file binari, velocizzando ancora di più le successive analisi sui protocolli. Abbiamo confrontato i risultati di clustering sulle risorse con quelli di classificazione con un albero di decisione C4.5 e abbiamo ottenuto i risultati migliori con quest’ultimo, quantificabili con una predizione corretta al 96.8% calcolata su un test set di 300 file di risorse estratti randomicamente dal dataset. Il test set, in particolare è composto al 20% da file riconosciuti come firmware e all’ 80% da risorse qualsiasi. Attualmente il metodo funziona solo su dispositivi USB HID (Human Interface Device) per l’ampia disponibilità di software e per la diffusione di tali dispostivi. Vorremmo estendere il lavoro a dispositivi USB di altre classi e ad altri sistemi embedded. Inoltre vorremmo sviluppare la compatibilità per l’estrazione a protocolli di aggiornamento diversi da quelli analizzati, per ampliare le possibilità del nostro sistema.
Tesi di laurea Magistrale
File allegati
File Dimensione Formato  
2018_12_Ferrer.pdf

accessibile in internet per tutti

Descrizione: Testo della tesi
Dimensione 1.64 MB
Formato Adobe PDF
1.64 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/144829