Trusted Execution Environments (TEEs) are commonly used to handle security-sensitive data and operations in mobile devices. A TEE is a separate execution environment that provides a small set of services. These services can run uncompromised even when the main (rich) OS has been entirely compromised. In Android systems, TEEs are typically implemented using the ARM TrustZone technology and the main OS is based on Linux. In theory, an attacker able to fully compromise the main OS of a device should not be able to interfere with operations handled by the TEE. However, it has been shown that, in specific cases [][#broken_fingers], an attacker able to fully compromise the main OS (a kernel-level attacker) can tamper the communication channel between the main OS and the TEE, and, consequently, interfere with TEE-managed services and peripherals. For instance, consider the case of the fingerprint-unlock functionality supported by many modern devices. The fingerprint scanning and matching operations are fully handled by the TEE and therefore out of scope in our attacker’s model. However, when the TEE detects that a legitimate user touched the sensor, a constant message is sent from the TEE to the main OS, which proceeds in unlocking the device. Since this message is constant (i.e., no cryptographic signature is generated by the TEE to “attest” the “unlock the device” message), an attacker that has compromised the main OS can easily spoof this message and unlock the device without having a legitimate user touching the sensor. The primary goal of our research is to prove that many TEE features are not resistant against a kernel-level attacker. To this aim, we are planning to build a kernel module that intercepts and logs all the messages exchanged between the TEE and the main OS. These logs will then be used to study exchanged data, looking for problematic cases in a semi-automatic way. Specifically, our intuition is that problematic cases (such as the previously mentioned fingerprint-unlock functionality) can be automatically pinpointed by analysing the logs and detecting constant replies from the TEE to the OS since an attacker can easily spoof these constant replies. We are planning to implement our logger, called **TZ Logger**, as a modular and extensible system to inspect and change the data exchanged with a TEE on-the-fly. **TZ Logger**’s design allows to adapt it to different devices and operating system versions easily. Additionally, it allows to quickly write “dissector” modules to de-serialise specific types of messages exchanged by the OS and the TEE (e.g., cryptographic-related messages, fingerprint- sensor-related messages, …) and “patcher” modules to mutate at will exchanged messages. We used a preliminary prototype of **TZ Logger** to successfully showcase that a kernel-level attacker can unlock a device, without having a legitimate user touching the fingerprint reader sensor and without compromising the TEE’s code.

I Trusted Execution Environments (TEEs, Ambienti di esecuzione sicura) sono comunemente usati per gestire dati ed operazioni sensibili nei dispositivi mobili. Un TEE è un ambiente di esecuzione separato che fornisce un piccolo insieme di servizi. Questi servizi possono continuare la loro esecuzione senza essere compromessi anche quando il sistema operativo (OS, operative system) principale, chiamato anche "_ricco_" ( Rich ), è completamente compromesso. Nei sistemi Android, le TEEs sono tipicamente implementate usando la tecnologia ARM TrustZone, mentre il sistema operative principale è basato su Linux. Teoricamente, un malintenzionato capace di compromettere completamente il Rich OS di un dispositivo non dovrebbe essere in grado di interferire con le operazioni gestite dal TEE. Tuttavia, è stato mostrato che, in casi specifici [][#broken_fingers], un malintenzionato in grado di compromettere completamente il Rich OS ( ottenendo esecuzione arbitraria al livello del kernel ) può manomettere il canale di comunicazione tra il Rich OS ed il TEE, e, di conseguenza, interferire con i servizi e le periferiche gestite dal TEE. Per esempio, consideriamo la funzionalità di sblocco con impronta digitale supportato da molti dispositivi moderni. La scansione e confronto dell'impronta sono completamente gestiti dal TEE e perciò fuori dalla portata del nostro modello di attaccante. Tuttavia, quando TEE riconosce che un utente legittimo ha toccato il sensore, un messaggio costante viene inviato dal TEE al Rich OS, il quale procede allo sblocco del dispositivo. Siccome il messaggio è costante (i.e., nessuna firma crittografica è generata dal TEE per confermare l'autore del messaggio di sblocco ), un malintenzionato che ha completamente compromesso il Rich OS può facilmente falsificare questo messaggio e sbloccare il dispositivo senza che un utente legittimo abbia toccato il sensore. L'obiettivo principale della nostra ricerca è dimostrare che molte delle funzionalità offerte dai TEEs non sono resistenti ad un attacco con permessi di esecuzione nel kernel del Rich OS. Con questo scopo, svilupperemo un modulo per il kernel che intercetta e registra tutti i messaggi scambiati tra TEE ed il Rich OS. Questi registri verranno poi utilizzati per studiare i dati scambiati, cercando casi problematici in modo semi-automatico. In particolar modo, la nostra intuizione è che i casi problematici ( come quello precedentemente menzionato della funzionalità di sblocco con impronta digitale ) possono essere automaticamente evidenziati analizzando i registri e rilevando risposte costanti dal TEE al Rich OS, poiché l'attaccante può facilmente manomettere questi messaggi. Implementeremo il nostro logger ( registratore ), chiamato **TZ Logger**, in maniera modulare ed estensibile che permetta di ispezionare e modificare i dati scambiati con il TEE. La sua architettura permette di adattarsi velocemente a diversi dispositivi e versioni del sistema operativo. Esso consente inoltre di scrivere rapidamente dei moduli “dissector” per deserializzare alcuni tipi specifici di messaggi scambiati tra il Rich OS e TEE ( e.g., messaggi crittografici, messaggi relativi al sensore delle impronte digitali, ... ) e dei moduli “patcher” che si occupano di mutare i messaggi scambiati a piacere. Siamo riusciti ad utilizzare un prototipo preliminare di **TZ Logger** per dimostrare con successo che un attaccante con esecuzione di codice nel kernel può sbloccare il dispositivo. Questo senza che un utente legittimo scansioni la propria impronta digitale e senza aver compromesso il codice all'interno del TEE.

TZ logger. A multi-platform TEE logger

DRAGANO, MASSIMO
2017/2018

Abstract

Trusted Execution Environments (TEEs) are commonly used to handle security-sensitive data and operations in mobile devices. A TEE is a separate execution environment that provides a small set of services. These services can run uncompromised even when the main (rich) OS has been entirely compromised. In Android systems, TEEs are typically implemented using the ARM TrustZone technology and the main OS is based on Linux. In theory, an attacker able to fully compromise the main OS of a device should not be able to interfere with operations handled by the TEE. However, it has been shown that, in specific cases [][#broken_fingers], an attacker able to fully compromise the main OS (a kernel-level attacker) can tamper the communication channel between the main OS and the TEE, and, consequently, interfere with TEE-managed services and peripherals. For instance, consider the case of the fingerprint-unlock functionality supported by many modern devices. The fingerprint scanning and matching operations are fully handled by the TEE and therefore out of scope in our attacker’s model. However, when the TEE detects that a legitimate user touched the sensor, a constant message is sent from the TEE to the main OS, which proceeds in unlocking the device. Since this message is constant (i.e., no cryptographic signature is generated by the TEE to “attest” the “unlock the device” message), an attacker that has compromised the main OS can easily spoof this message and unlock the device without having a legitimate user touching the sensor. The primary goal of our research is to prove that many TEE features are not resistant against a kernel-level attacker. To this aim, we are planning to build a kernel module that intercepts and logs all the messages exchanged between the TEE and the main OS. These logs will then be used to study exchanged data, looking for problematic cases in a semi-automatic way. Specifically, our intuition is that problematic cases (such as the previously mentioned fingerprint-unlock functionality) can be automatically pinpointed by analysing the logs and detecting constant replies from the TEE to the OS since an attacker can easily spoof these constant replies. We are planning to implement our logger, called **TZ Logger**, as a modular and extensible system to inspect and change the data exchanged with a TEE on-the-fly. **TZ Logger**’s design allows to adapt it to different devices and operating system versions easily. Additionally, it allows to quickly write “dissector” modules to de-serialise specific types of messages exchanged by the OS and the TEE (e.g., cryptographic-related messages, fingerprint- sensor-related messages, …) and “patcher” modules to mutate at will exchanged messages. We used a preliminary prototype of **TZ Logger** to successfully showcase that a kernel-level attacker can unlock a device, without having a legitimate user touching the fingerprint reader sensor and without compromising the TEE’s code.
ING - Scuola di Ingegneria Industriale e dell'Informazione
25-lug-2018
2017/2018
I Trusted Execution Environments (TEEs, Ambienti di esecuzione sicura) sono comunemente usati per gestire dati ed operazioni sensibili nei dispositivi mobili. Un TEE è un ambiente di esecuzione separato che fornisce un piccolo insieme di servizi. Questi servizi possono continuare la loro esecuzione senza essere compromessi anche quando il sistema operativo (OS, operative system) principale, chiamato anche "_ricco_" ( Rich ), è completamente compromesso. Nei sistemi Android, le TEEs sono tipicamente implementate usando la tecnologia ARM TrustZone, mentre il sistema operative principale è basato su Linux. Teoricamente, un malintenzionato capace di compromettere completamente il Rich OS di un dispositivo non dovrebbe essere in grado di interferire con le operazioni gestite dal TEE. Tuttavia, è stato mostrato che, in casi specifici [][#broken_fingers], un malintenzionato in grado di compromettere completamente il Rich OS ( ottenendo esecuzione arbitraria al livello del kernel ) può manomettere il canale di comunicazione tra il Rich OS ed il TEE, e, di conseguenza, interferire con i servizi e le periferiche gestite dal TEE. Per esempio, consideriamo la funzionalità di sblocco con impronta digitale supportato da molti dispositivi moderni. La scansione e confronto dell'impronta sono completamente gestiti dal TEE e perciò fuori dalla portata del nostro modello di attaccante. Tuttavia, quando TEE riconosce che un utente legittimo ha toccato il sensore, un messaggio costante viene inviato dal TEE al Rich OS, il quale procede allo sblocco del dispositivo. Siccome il messaggio è costante (i.e., nessuna firma crittografica è generata dal TEE per confermare l'autore del messaggio di sblocco ), un malintenzionato che ha completamente compromesso il Rich OS può facilmente falsificare questo messaggio e sbloccare il dispositivo senza che un utente legittimo abbia toccato il sensore. L'obiettivo principale della nostra ricerca è dimostrare che molte delle funzionalità offerte dai TEEs non sono resistenti ad un attacco con permessi di esecuzione nel kernel del Rich OS. Con questo scopo, svilupperemo un modulo per il kernel che intercetta e registra tutti i messaggi scambiati tra TEE ed il Rich OS. Questi registri verranno poi utilizzati per studiare i dati scambiati, cercando casi problematici in modo semi-automatico. In particolar modo, la nostra intuizione è che i casi problematici ( come quello precedentemente menzionato della funzionalità di sblocco con impronta digitale ) possono essere automaticamente evidenziati analizzando i registri e rilevando risposte costanti dal TEE al Rich OS, poiché l'attaccante può facilmente manomettere questi messaggi. Implementeremo il nostro logger ( registratore ), chiamato **TZ Logger**, in maniera modulare ed estensibile che permetta di ispezionare e modificare i dati scambiati con il TEE. La sua architettura permette di adattarsi velocemente a diversi dispositivi e versioni del sistema operativo. Esso consente inoltre di scrivere rapidamente dei moduli “dissector” per deserializzare alcuni tipi specifici di messaggi scambiati tra il Rich OS e TEE ( e.g., messaggi crittografici, messaggi relativi al sensore delle impronte digitali, ... ) e dei moduli “patcher” che si occupano di mutare i messaggi scambiati a piacere. Siamo riusciti ad utilizzare un prototipo preliminare di **TZ Logger** per dimostrare con successo che un attaccante con esecuzione di codice nel kernel può sbloccare il dispositivo. Questo senza che un utente legittimo scansioni la propria impronta digitale e senza aver compromesso il codice all'interno del TEE.
Tesi di laurea Magistrale
File allegati
File Dimensione Formato  
thesis.pdf

accessibile in internet per tutti

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