Trasparenza degli APK dei servizi di sistema di Google

Nell'ambito dell'investimento continuo di Google per la trasparenza dei suoi prodotti, stiamo aggiungendo la trasparenza a due nuovi APK dei servizi di sistema di Google: Android System SafetyCore (com.google.android.safetycore) e Android System Key Verifier (com.google.android.contactkeys). Questi APK supportano rispettivamente la funzionalità di avviso per contenuti sensibili e verifica della chiave di crittografia in Google Messaggi. Il log di trasparenza che abbiamo pubblicato per verificare le dichiarazioni fatte in merito a questi APK.

Pacchetti coperti

Questa sezione descrive i pacchetti coperti dal log di trasparenza e anche le rispettive chiavi di firma per la trasparenza del codice.

Android System SafetyCore

Android System SafetyCore (com.google.android.safetycore) è un componente di sistema Android che fornisce un'infrastruttura di protezione degli utenti sul dispositivo per le app incentrata sulla tutela della privacy.

Il codice di questo APK è attualmente firmato con la seguente chiave descritta da questo certificato:

-----BEGIN CERTIFICATE-----
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
4ZM=
-----END CERTIFICATE-----

Android System Key Verifier

L'APK Android System Key Verifier (com.google.android.contactkeys) è un servizio per la verifica dei contatti su Android. Consente a un utente di verificare le chiavi pubbliche di un contatto per confermare di stare comunicando con la persona a cui intende inviare un messaggio. Il servizio è un sistema unificato per la verifica delle chiavi pubbliche in diverse app, che utilizza la verifica tramite la scansione del codice QR o il confronto dei numeri.

Il codice di questo APK è attualmente firmato con la seguente chiave descritta da questo certificato:

-----BEGIN CERTIFICATE-----
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
PLM=
-----END CERTIFICATE-----

Modello di minaccia

I sistemi di trasparenza possono essere utilizzati per rilevare e quindi scoraggiare gli attacchi alla catena di approvvigionamento. Ecco alcuni esempi.

Supponiamo che un malintenzionato modifichi in modo dannoso un APK dei servizi di sistema di Google e addirittura riesca a firmarlo con la chiave di firma utilizzata da Google Play. Chiunque riceva l'APK dannoso può eseguire query sul log di trasparenza dei file binari per verificare l'autenticità dell'APK. Vedrà che Google non ha aggiunto i metadati APK corrispondenti al log e saprà di non dover considerare attendibile l'APK compromesso.

Poiché la pubblicazione nel log è una procedura separata dalla procedura di rilascio con firma (come illustrato nel diagramma dell'ecosistema), l'attaccante deve fare di più che compromettere la chiave.

Abbiamo in programma di integrare questo log anche in una rete pubblica di testimoni utilizzando un protocollo di testimoni standard, invitiamo pertanto terze parti indipendenti a monitorare l'integrità di questo log disponibile pubblicamente. Queste parti possono attestare la proprietà di sola aggiunta del log e segnalare eventuali manomissioni.

L'esistenza di un sistema di trasparenza e la maggiore rilevabilità degli attacchi scoraggiano le attività dannose. Se un APK è compromesso, ma gli utenti ritengono attendibili solo quelli presenti nel log, l'APK compromesso deve essere esposto pubblicamente. Ciò aumenta la probabilità di scoprire l'esistenza dell'APK compromesso e consente di intervenire per rimuoverne la distribuzione.

Modello autore della rivendicazione

Il modello di autore della rivendicazione è un framework utilizzato per definire ruoli e elementi in un sistema verificabile. Nel caso della trasparenza degli APK dei servizi di sistema di Google, affermiamo che l'hash dei binari firmati registrato in questo log rappresenta il codice ufficiale per i rispettivi APK dei servizi di sistema di Google.

  • DichiarazioneGoogleSystemServicesApk: (io, Google, dichiaro che $codeSignature è per $googleSystemServicesApk), dove:
    • $codeSignature è un token JWT (JWT) firmato che contiene un elenco di file DEX e librerie native e i relativi hash inclusi in una versione specifica di $googleSystemServicesApk.
    • $googleSystemServicesApk è un pacchetto Android (APK) del seguente insieme di pacchetti: {Android System SafetyCore (com.google.android.safetycore), Android System Key Verifier (com.google.android.contactkeys)}

Chiunque abbia una copia di $googleSystemServicesApk può verificare la rivendicazione di cui sopra. e descriviamo questa procedura in dettaglio nella pagina di verifica.

Contenuti del log

Quando Google rilascia una nuova versione degli APK sopra elencati, aggiunge una voce corrispondente al log di trasparenza degli APK dei servizi di sistema di Google.

Ogni voce di questo log contiene quattro metadati APK:

  1. L'hash della firma del codice di un APK sviluppato da Google. Si tratta di una stringa esadecimale del digest SHA256 di un token di trasparenza del codice (noto anche come JWT di trasparenza del codice).
  2. La descrizione del tipo di hash sopra indicato. Questa è una stringa.
  3. Il nome del pacchetto dell'APK. Questa è una stringa.
  4. Il numero di versione (versionCode) dell'APK. Si tratta di un numero intero.

Il formato di una voce di log è la concatenazione delle quattro informazioni con un carattere di nuova riga (\n), come illustrato di seguito:

hash\nSHA256(Signed Code Transparency JWT)\npackage_name\npackage_version\n

Tieni presente che in questa release stiamo sperimentando l'utilizzo della trasparenza del codice. Ciò significa che, anziché l'hash dell'APK, registriamo il digest del token di trasparenza del codice. Pertanto, la descrizione dell'hash è attualmente impostata su SHA256(Signed Code Transparency JWT).

Inoltre, questo dimostra un modo in cui la trasparenza del codice può essere utilizzata dagli sviluppatori di app quando le loro chiavi di firma dell'app sono detenute da Google Play.

Diagramma dell'ecosistema

Diagramma dell'ecosistema di log verificabili