English  |  Italiano 

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.