1. Vulnerabilità della piattaforma
Android, metodi di attacco e
protezione delle applicazioni
Sergiy Shevchenko
Laurea in Informatica
2017/2018
Relatore: Prof. Roberto De Prisco
4. La vita di una
applicazione
2
Sviluppatore Play Store Utente
5. La vita di una
applicazione
2
Sviluppatore Play Store Utente
Garantire l’integrità
6. Architettura
Android
3
Linux Kernel
Drivers
USB AudioBinderCamera WiFi ...
Hardware Abstraction Level
Android Runtime
ART
Core Libraries
Native C/C++ Libraries
LibC WebKit
OpenGL ES ...
Java API Framework
Managers
Activity ...Package
Content Providers
View System
7. Architettura
Android
3
Linux Kernel
Drivers
USB AudioBinderCamera WiFi ...
Hardware Abstraction Level
Android Runtime
ART
Core Libraries
Native C/C++ Libraries
LibC WebKit
OpenGL ES ...
Java API Framework
Managers
Activity ...Package
Content Providers
View System
▸ Tutte le applicazioni dipendono da questo layer
▸ È possibile “estrarre” un’app utilizzando il
Content Provider
8. Architettura
Android
3
Linux Kernel
Drivers
USB AudioBinderCamera WiFi ...
Hardware Abstraction Level
Android Runtime
ART
Core Libraries
Native C/C++ Libraries
LibC WebKit
OpenGL ES ...
Java API Framework
Managers
Activity ...Package
Content Providers
View System
▸ Nessuna restrizione livello API Java
▸ Codice macchina Armv7 o Arm64
▸ Interazione con gli altri componenti
via JNI
9. Architettura
Android
3
Linux Kernel
Drivers
USB AudioBinderCamera WiFi ...
Hardware Abstraction Level
Android Runtime
ART
Core Libraries
Native C/C++ Libraries
LibC WebKit
OpenGL ES ...
Java API Framework
Managers
Activity ...Package
Content Providers
View System
▸ Core di Android, codice native e java
vengono eseguiti da ART
▸ Applicazioni non disinstallabili
10. Architettura
Android
3
Linux Kernel
Drivers
USB AudioBinderCamera WiFi ...
Hardware Abstraction Level
Android Runtime
ART
Core Libraries
Native C/C++ Libraries
LibC WebKit
OpenGL ES ...
Java API Framework
Managers
Activity ...Package
Content Providers
View System
▸ Esecuzione delle applicazioni via un
fork()
▸ Interazioni con hardware
11. Firma dell’App
Lo sviluppatore genera una chiave e firma le applicazioni solo con questa chiave. Google
salva il fingerprint della chiave per i futuri update. Il dispositivo finale verifica l’integrità della
firma e installa l’applicazione
4
12. Firma dell’App
Un nuovo modo introduce le chiavi di upload (del developer) e di release (di google).
La verifica della integrità rimane la stessa
5
13. Firma dell’App
Un potenziale attaccante modifica il codice aggiungendo del malware e apporre una firma
diversa, ma sempre valida per il dispositivo finale.
5
15. CERT-CHECK LIVELLO
JAVA
Implementare la logica di verifica
puramente in Java nel livello di
Android activity.
CERT-CHECK LIVELLO
NATIVO
Implementare la logica in codice
nativo C/C++, caricare la libreria
prodotta a runtime. Scatenare la
verifica con un timer con
inizializzazione randomica.
Nel caso di fallimento della verifica
provocare un eccezione al livello
nativo facendo esplodere
l’esecuzione
6Verifica
certificato a
runtime
Nel caso la verifica falisse,
interrompere l’esecuzione
dell’app.
16. CERT-CHECK LIVELLO
JAVA
Implementare la logica di verifica
puramente in Java nel livello di
Android activity.
CERT-CHECK LIVELLO
NATIVO
Implementare la logica in codice
nativo C/C++, caricare la libreria
prodotta a runtime. Scatenare la
verifica con un timer con
inizializzazione randomica.
Nel caso di fallimento della verifica
provocare un eccezione al livello
nativo facendo esplodere
l’esecuzione
7Verifica
certificato a
runtime
Nel caso la verifica falisse,
interrompere l’esecuzione
dell’app.
18. Difficoltà nel
disassemblaggio
9 Codice Java
Viene compilato in byte-code, una via di
mezzo tra codice di macchina e codice
java. Viene eseguito in macchina virtuale
Dalvik o ART
Codice Macchina
C/C++ viene compilato in codice
macchina, che sono le istruzioni dirette al
processore per una particolare
architettura.
● Difficile da disassemblare
● Difficile da debuggare se non si
possiede dei codici sorgenti
19. CertyCheck
10
Linux Kernel
Drivers
USB AudioBinderCamera WiFi ...
Hardware Abstraction Level
Android Runtime
ART
Core Libraries
Native C/C++ Libraries
LibC WebKit
OpenGL ES ...
Java API Framework
Managers
Activity ...Package
Content Providers
View System
L’app parte regolarmente,
vengono caricate le view e
invocato onCreate()
20. CertyCheck
10
Linux Kernel
Drivers
USB AudioBinderCamera WiFi ...
Hardware Abstraction Level
Android Runtime
ART
Core Libraries
Native C/C++ Libraries
LibC WebKit
OpenGL ES ...
Java API Framework
Managers
Activity ...Package
Content Providers
View System
L’app parte regolarmente,
vengono caricate le view e
invocato onCreate()
Parallelamente viene
caricata la libreria in
memoria
21. CertyCheck
10
Linux Kernel
Drivers
USB AudioBinderCamera WiFi ...
Hardware Abstraction Level
Android Runtime
ART
Core Libraries
Native C/C++ Libraries
LibC WebKit
OpenGL ES ...
Java API Framework
Managers
Activity ...Package
Content Providers
View System
L’app parte regolarmente,
vengono caricate le view e
invocato onCreate()
Parallelamente viene
caricata la librerie in
memoria
La libreria in maniera
asincrona interagisce con
ART per effettuare la
verifica
22. Limitazioni
Esclusione binaria
Se la libreria di
verifica non è una
parte integrante
dell’app è facile
escluderla dall’APK.
Rimpiazzamento
contesto
La soluzione
interagisce con il
runtime di Android
il quale può essere
emulato da un
malintenzionato.
Rooted Android
La piattaforma
può essere
hackerata, a
questo punto non
è possibile fidarsi
di validità del
certificato.
11
Aggiungere delle
funzionalità nella
libreria rendendo
inutilizzabile app
senza di essa
Fare le verifiche
approfondite del
contesto
Eseguire verifica
del certificato
gestito dalla
libreria
23. Futuri sviluppi12
▸ Rendere l’installazione FromTheBox
▸ Proteggere le librerie calcolando gli hash
▸ Usare librerie crittografiche staticamente
linkate