Architettura della funzionalità di messagistica crittografata
per la distribuzione Android 4.4.4 "KitKat" fortificata
di Guido Trentalancia
La funzionalità di messaggistica MMS/SMS nella distribuzione Android KitKat
originale era progettata come raffigurato nella figura sottostante.
In tale schema l'Applicazione MMS/SMS utilizzava un Fornitore (Provider) unico
per Telefonia e Messagistica, il quale a sua volta utilizzava due basi di dati
telephony.db e mmssms.db per memorizzare chiamate telefoniche e
messaggi di testo.
La base di dati MMS/SMS utilizzava una etichetta SELinux generica e pertanto
ad essa potevano accedere molti domini SELinux (include tutte le applicazioni),
quindi se uno di tali domini fosse stato compromesso, la confidenzialità dei
messaggi di testo inviati e ricevuti sarebbe venuta meno.
Al fine di salvaguardare la confidenzialità della base di dati MMS/SMS,
l'architettura è stata riprogettata come segue: il Fornitore unico (Provider)
è stato diviso in un Fornitore di Telefonia ed un Fornitore di Messaggistica
separati, all'Applicazione MMS/SMS è stato assegnato un nuovo distinto dominio
SELinux, condiviso solo con il Fornitore MMS/SMS, in modo che essi vengano
eseguiti in un contesto SELinux dedicato, il quale ha accesso esclusivo alla
base di dati MMS/SMS, etichettata con una nuova specifica etichetta SELinux,
piuttosto che con una etichetta SELinux generica. Il nuovo schema progettuale
è raffigurato di seguito e da esso dovrebbe risultare evidente che la base di
dati MMS/SMS è accessibile solo al Fornitore MMS/SMS ed indirettamente
all'Applicazione MMS/SMS.
Queste precauzioni aggiuntive di sicurezza a livello di Sistema Operativo aumentano la sicurezza a livello locale del sistema di crittografia via radio.
Per concludere, avviamo una shell sul dispositivo mobile e verifichiamo che la nuova architettura sia stata implementata correttamente e che sia efficacemente in esecuzione:
linux-pc$ adb shell
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
shell@android:/ $ ps -Z | grep com.android.mms
u:r:mms_app:s0 mmssms 1173 245 com.android.mms
u:r:mms_app:s0:c512,c768 u0_a8 1369 245 com.android.mms
shell@android:/ $ ps -Z | grep mms_app
u:r:mms_app:s0 mmssms 1173 245 com.android.mms
u:r:mms_app:s0:c512,c768 u0_a8 1369 245 com.android.mms
shell@android:/ $ ls -lZ /data/data/com.android.providers.messaging/databases/mmssms.db
/data/data/com.android.providers.messaging/databases/mmssms.db: Permission denied
shell@android:/ $ dmesg | grep denied
...
type=1400 audit: avc: denied { search } for comm="ls" name="com.android.providers.messaging" dev="mmcblk0p24" scontext=u:r:shell:s0 tcontext=u:object_r:mms_data_file:s0 tclass=dir
shell@android:/ $ ls -lZ /data/data/com.android.providers.telephony/databases/telephony.db
/data/data/com.android.providers.telephony/databases/telephony.db: Permission denied
shell@android:/ $ dmesg | grep denied
...
type=1400 audit: avc: denied { search } for comm="ls" name="com.android.providers.telephony" dev="mmcblk0p24" scontext=u:r:shell:s0 tcontext=u:object_r:radio_data_file:s0 tclass=dir
Il risultato del primo comando nella shell Android, indica che sia il Fornitore MMS/SMS (primo processo) che l'Applicazione MMS/SMS (secondo processo) sono in esecuzione nel nuovo contesto SELinux mms_app.
Dal secondo comando nella shell Android possiamo concludere anche che il Fornitore MMS/SMS e l'Applicazione MMS/SMS sono i soli due processi in esecuzione nel nuovo contesto SELinux mms_app.
Il terzo comando impartito alla shell Android non produce risultati a causa di restrizioni SELinux sul processo shell (errore "Permission denied"), tuttavia possiamo usare un trucco e mostrare i nuovi tipi di file SELinux tramite i risultati del comando dmesg (quarto comando impartito alla shell).
Come previsto, l'ultima riga del risultato di dmesg mostra che la cartella /data/data/com.android.providers.messaging è correttamente etichettata con il nuovo tipo di file mms_data_file (e che, di conseguenza, ogni nuova sotto-cartella o file in tale cartella erediteranno tale etichetta).
La quinta e sesta prova effettuata tramite la shell Android confermano che la cartella /data/data/com.android.providers.telephony (e tutte le sue sotto-cartelle e file in essa contenuti) sono etichettati come un diverso tipo di file SELinux radio_data_file.
Come già notato all'inizio, al nuovo tipo di file mms_data_file si può accedere solo tramite il nuovo dominio SELinux mms_app, quindi la base di dati MMS/SMS /data/data/com.android.providers.messaging/databases/mmssms.db è ora protetta.
Esercizio
La nuova architettura che separa i Fornitori Telefonia e MMS/SMS e che protegge l'Applicazione MMS/SMS con un nuovo dominio SELinux è stata introdotta nell'anno 2025. Esegui nuovamente i passi indicati sopra su qualunque versione datata prima dell'anno 2025 e verifica che le vecchie versioni (architettura originale Android) non proteggono l'Applicazione ed la base di dati MMS/SMS.
La distribuzione Android 4.4.4 "KitKat" fortificata per telefoni Sony Xperia E3 (D2203, D2206, D2243, D2202) è disponibile alla seguente pagina web: distribuzione Android 4.4.4 KitKat fortificata
Android è Copyright (C) 2007-2025 by the Android Open Source Project
ed è un marchio registrato di Google Inc.
Xperia è un marchio registrato di Sony Mobile Communications Inc.
Copyright © 2007-2025 Guido Trentalancia. Tutti i diritti riservati.