1 Introduzione
Nel ventunesimo secolo la tecnologia ` e stata protagonista di grandi passi in avanti;
la nostra vita quotidiana ` e stata stravolta dall’introduzione di un dispositivo che
ci accompagna durante l’arco di tutta la giornata: il cellulare. Con l’introduzione
dello smartphone ` e cambiato drasticamente il modo di vivere la quotidianit` a; la
comunicazione fra gli utenti ` e nettamente pi` u veloce rispetto agli anni passati e at-
traverso cookies e permessi si ` e in grado di apprendere la posizione delle persone,
cosa piace in base alle ricerche effettuate, accedere ai contatti e di conseguenza
entrare nella vita privata di ognuno di noi.
A primo impatto potrebbe sembrare una violazione della privacy ma con lo
sviluppo degli smartphone sono state sviluppate tecnologie di sicurezza molto
avanzate per rendere la navigazione pi` u sicura rispetto agli anni passati. Lo svi-
luppo dei sistemi di sicurezza ` e di fondamentale importanza per tutti i sistemi di
navigazione mobile a causa della loro ampia diffusione e le informazioni riser-
vate in loro possesso. Per arrivare a un grande aumento di protezione offerto agli
utenti, sia Android che iOS hanno visto investimenti significativi verso la realizza-
zione di tecniche di sicurezza. Data la necessit` a degli utenti di installare numerose
applicazioni, a volte anche sconosciute e che possono nascondere le loro funzioni
dannose, sono stati introdotti vari livelli di protezione.
Il primo livello di sicurezza, utilizzato sia da Android che da iOS, ` e quello di
offrire un preliminary screening delle applicazioni prima che siano messe a dispo-
sizione sul mercato e prima che vengano installate sul proprio dispositivo. Questo
passaggio, seppur fondamentale, non pu` o offrire una considerevole garanzia per
gli utenti e per questo sono stati introdotti dei meccanismi di sicurezza interni al
sistema operativo di ogni dispositivo necessari per limitare le applicazioni a ope-
rare solo entro dei limiti prefissati dal proprietario nel momento dell’installazione.
Uno dei pi` u importanti requisiti di sicurezza ` e la protezione delle risorse del si-
stema e focalizzandoci su Andorid notiamo una significativa evoluzione nella sua
architettura di sicurezza: Selinux.
Selinux implementa il Mandatory Access Control (MAC), un meccanismo che
si basa sul dichiarare le operazioni che un processo pu` o eseguire su una risorsa.
In confronto al Discretionary Access Control (DAC), ancora in uso su ampia sca-
7
la nei dispositivi Android, MAC ha delle caratteristiche di sicurezza pi` u rigide
e prevede maggiori garanzie contro i comportamenti indesiderati. Selinux ` e sta-
to introdotto nel sistema Android a partire dal 2013, nella versione Android 4.3,
con un set limitato di domini di sistema ed ` e stato utilizzato principalmente per
la separazione delle risorse di sistema delle app. Con l’evoluzione dei sistemi di
sicurezza lo stesso Selinux ` e stato migliorato e reso pi` u complesso con l’introdu-
zione di svariati insiemi di domini con l’obiettivo di isolare diversi servizi e risorse
in modo che un bug o qualsiasi altra vulnerabilit` a non comprometta l’intero siste-
ma. Possiamo definire l’introduzione da parte di Android di Selinux un vero e
proprio successo nonostante i benefici di protezione pi` u importanti non si esten-
dano alle applicazioni regolari che sono assegnate a un singolo dominio chiamato
untrusted app.
Come spiegato in precedenza, Selinux e il supporto MAC sono stati due fatto-
ri cruciali nella realizzazione di un sistema sicuro; un difetto per` o ` e che questo ` e
l’unico modo che le applicazioni possono beneficiare del supporto MAC. Al mo-
mento infatti non c’` e nessuna opzione che consenta allo sviluppatore di controllare
l’uso del livello MAC.
Ci` o che prover` o a fare ` e implementare SEApp in un’applicazione Android,
mostrando la differenza tra un’applicazione che ne benefici e un’altra che non lo
utilizzi.
8
1.1 Sicurezza delle App
Android ` e un sistema operativo open source basato su kernel Linux, le applica-
zioni possono essere scritte tramite linguaggio di programmazione Java o codice
nativo e i principali blocchi di costruzione di un app sono:
• AndroidManifest.xml: ` e il file che controlla e gestisce i componenti di
livello superiore;
• Attivit` a: ` e il codice per un singolo task;
• Servizio: ` e il corpo di un codice che funziona in background, per esempio
il media player;
• Ricevitore di trasmissione: ` e l’oggetto di cui viene creata un’istanza quan-
do un meccanismo IPC (Interprocess Communication) viene emesso dal
sistema operativo o da un’altra App.
Il sistema gestisce l’accesso alle App tramite delle restrizioni implementate in
varie forme. Alcune funzionalit` a sono limitate da una mancanza intenzionale di
API, in altre istanze la separazione dei ruoli fornisce una misura di sicurezza come
l’isolamento dello storage per l’App. Tutte le versioni di Android a partire dal
sistema operativo 6.0 utilizzano il ”runtime permission, uno schema che permette
di accedere alle API protette come la fotocamera, il GPS, il bluetooth, la telefonia
e il network. [1]
Android oltre ai classici meccanismi di tipo UNIX offre nuovi meccanismi di
tipo IPC:
• Binder: ` e una chiamata remota basata sulle prestazioni elevate durante l’e-
secuzione di chiamate in-process e cross-process. Binder ` e una primitiva
IPC e non ha un impatto significato sul ciclo vitale delle applicazioni, in-
fatti per poter funzionare correttamente ` e necessario usarla su componenti
applicativi di alto livello, in modo tale che il sistema sappia che il processo
deve rimanere in esecuzione [2];
• Services: forniscono interfacce usando direttamente Binder;
9
• Intents: sono un semplice messaggio oggetto che rappresenta l’intenzione
di fare qualcosa. Un intent ` e formato da un’azione e da delle informazioni;
• ContentProviders: ` e un database che fornisce l’accesso ai dati sul dispositi-
vo. Permette, per esempio, di accedere ai contatti dell’utente e cancellare,
inserire e aggiornare i dati; un generico ContentProvider viene usato solo
quando ` e necessario condividere dati tra pi` u applicazioni e rappresenta uno
dei principali blocchi di costruzione delle applicazioni Android [3].
A partire dal modello Android 4.2 sono state introdotte le App verificate, che per-
mettono all’utente di capire la pericolosit` a di un’app. La piattaforma Android
fornisce un framework DRM estensibile, che consente alle App di gestire il con-
tenuto protetto con RMS in base ai vincoli di licenza associati al contenuto. Prima
dei sistemi operativi Android 7.0 si potevano modificare le autorit` a di certificazio-
ne; dal modello successivo, invece, le modifiche non sono pi` u permesse e ogni
dispositivo ` e basato su delle impostazioni uniformi. Un altro sistema utilizzato
dagli sviluppatori per identificare l’autore delle app ` e la firma del codice che per-
mette di semplificare i passaggi di aggiornamento e autorizzazione dell’app stessa.
Ogni app della piattaforma Android necessita della propria firma per definire qua-
le ID utente ` e associato a una determinata app e inoltre, garantisce l’accesso di
un’app a un’altra solo tramite IPC ben definito [1].
10
1.2 Implementazione della sicurezza
Regolarmente, nel mondo Android, vengono segnalati potenziali problemi di sicu-
rezza all’Android Security Team che tramite dei test all’interno del CTS (Android
Compability Test Suite) e Android Lint cerca di prevenire e risolvere questi peri-
coli [8]. Esistono molteplici ambienti di sviluppo che gestiscono questi problemi,
tra questi troviamo:
• Revisione del codice sorgente: permette di rilevare un’ampia gamma di pro-
blemi di sicurezza;
• test automatico: individua un’ampia gamma di problemi di sicurezza;
• firma d’immagini di sistema: determina l’integrit` a di sistema;
• firma di applicazioni (APK): ricopre un ruolo importante nella sicurezza dei
dispositivi ed ` e usata per controlli di permessi;
• Google Play: fornisce ai produttori di dispositivi la possibilit` a di aggiornare
le App senza eseguire un aggiornamento completo del sistema.
Oltre agli ambienti di sviluppo vanno considerate anche le pratiche migliori
che permettono di integrare un prodotto; tra le pi` u diffuse ci sono:
• Isolamento dei processi di root: rappresenta l’obiettivo pi` u frequente degli
attacchi di escalation di privilegi;
• isolamento di un’app di sistema: le app preinstallate non devono funzionare
con il sistema di condivisione UID;
• isolamento di processi: la sandbox delle app Android fornisce app con un’a-
spettativa di isolamento dagli altri processi sul sistema, includendo i proces-
si di root e i debug;
• sicurezza di file SUID: i nuovi programmi setuid non dovrebbero essere ac-
cessibili da programmi non attendibili, che sono la fonte di possibili vulne-
rabilit` a;
11