Transparence des APK des services système Google

Dans le cadre de l'investissement continu de Google en faveur de la transparence de ses produits, nous ajoutons de la transparence à deux nouveaux APK de services système Google : Android System SafetyCore (com.google.android.safetycore) et Android System Key Verifier (com.google.android.contactkeys). Ces APK permettent d'utiliser les avertissements de contenu sensible et la fonctionnalité de vérification des clés cryptographiques dans Google Messages. Le journal de transparence que nous avons publié pour vérifier les affirmations que nous faisons concernant ces APK.

Packages couverts

Cette section décrit les packages couverts par le journal de transparence, ainsi que leurs clés de signature de transparence de code respectives.

Android System SafetyCore

Android System SafetyCore (com.google.android.safetycore) est un composant du système Android qui fournit une infrastructure de protection des utilisateurs sur l'appareil protégeant la confidentialité pour les applications.

Le code de cet APK est actuellement signé avec la clé suivante décrite par ce certificat:

-----BEGIN CERTIFICATE-----
MIIFyDCCA7CgAwIBAgIUf3otg1DSj4EfxlP2OjAapoQ/moEwDQYJKoZIhvcNAQELBQAwdDELMAkG
A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDAS
BgNVBAoTC0dvb2dsZSBJbmMuMRAwDgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMCAX
DTI0MDcxNzIwNDQzMFoYDzIwNTQwNzE3MjA0NDMwWjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
Q2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4x
EDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWQwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQCw93tMu9bD3tAfP1XDj2Y/vvBqDTvi86HesUK8gq0M7kxttep0BP2AkZS5AdVa
DNW6kuMhUN1XOao/Ib/mpgdi3pK6w0WDIlpHsg3coRuCxeniROw3+XUSLNox1mqfLSgHNg9gNoxK
dUyGf8nEIYVgLBUH8OX2oKeirRT7DyR64uVJmts0B0RvNt5VfP5vf6KFpa0prqCNGqQLHLyev3g/
35RH1oAVVsjZnylDYAm9qdAVugL0sgExY01vRNluZZKJuItNpdt+AMOTgStZAEwkhAg7pMbNF27g
AJDCC+XDS16/x1Jnxc+Exlw66aHB++1+dFK/rYkbB+ql4dHjs/LTGqPIeUuE3Xd7UkguKZRRLNtI
Ls9DP1UYuQGZ1IQ9kQamkxScNFgNmymkgTXhBajDKSPy4jb2t5yLHTIJn0OvyMLg2J7/ImHHmc99
07OuXCfy55aW99lqaYsc+rLPOHFi6GjvTUkkyxXqJlhQYb9uQznxkqsfbnBefxCCO924uVIwWDlt
rA+mQ3Bw7TNgb3NmKUmUrmFaRBmrAxnag/jj0N4ff7vXVBR0WkXpb3qRPlSvsEXGYOWPJtc2+U2Q
IFcNyEeu6zWD5yYIcnoX1go2zEVt99b1AFsN0zRWo0mNyeLizDNiDkGT9AtB8rdajhchDqfmZGGX
XqhhJVT9IRMBFQIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBQY4GYL4FxVcxk2Euj8
otSQHVYz7zAfBgNVHSMEGDAWgBQY4GYL4FxVcxk2Euj8otSQHVYz7zANBgkqhkiG9w0BAQsFAAOC
AgEAoDuItwszr0yIPcvn/l3s5xZs+3rXe52KcY+ZgMVyM4q5CTEHwX89+K+hMFMTqp8vkrLhjnhz
/SYEY0ZXMQsQ0GWrMHbfIbzUsLhIoMBYn1JA+AH+CCZIYo9GbxaCqu4KJPQNC7sqA3goWf6UqHya
rj8wzXT5+qmOVwBUHgQUap5406/DaPqU0g+w4+hiV/zI67ugWU1z+6WElYIsXjN59zA5rVIJTdnV
w04RNK5fldWUsbkPGQ7hwoyJG4wZewCZ0sU4NUqVecb8z52hdlGj15+rUhDJq0pbDRjFEnulfUFJ
gA5s6iosSYyXrGQgE6NOszxu7nMvSg7MPrS7GQUMnaadQAye/7ELBY4jxlHMOAuj9iwz2Asjuy0a
ye64nfcYBbFSIzV7xRgeUJy42jyRq9ZoILU9fW/I4rHNIcntgB2POpzFOZrKXLC/B8rHKZT9AZOd
iXEKqFRBnHEaGy+MARO7guCQLO8XIVQixDHWS6OJRIvw0LKaf4dSlCxcUEpYSSHJmt6JMOujapCa
JmKz7K+wZWSClJnrc0HhJnZFt6S3TakZx7ALVi0SqxBaxHYFieSn9rmXHOWrSxEz5cmASnsfqnc0
w//Yhjm+gGOmLs/5TzrCyYvYt8Ynsd1G1GHipwc8JXGxLqbOPrNcUpjM65m+sshERIua30du0GOm
4ZM=
-----END CERTIFICATE-----

Android System Key Verifier

L'APK Android System Key Verifier (com.google.android.contactkeys) est un service de validation des contacts sur Android. Il permet à un utilisateur de vérifier les clés publiques d'un contact pour confirmer qu'il communique avec la personne à qui il souhaite envoyer un message. Il s'agit d'un système unifié pour la validation des clés publiques dans différentes applications, qui utilise la validation par scan d'un code QR ou par comparaison de chiffres.

Le code de cet APK est actuellement signé avec la clé suivante décrite par ce certificat:

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

Modèle de menace

Les systèmes de transparence peuvent être utilisés pour détecter et donc dissuader les attaques de la chaîne d'approvisionnement. Nous illustrons cela par quelques exemples.

Supposons qu'un pirate informatique modifie de manière malveillante un APK de services système Google et parvienne même à le signer avec la clé de signature utilisée par Google Play. Toute personne qui reçoit l'APK malveillant peut interroger le journal de transparence binaire pour vérifier l'authenticité de l'APK. Il constatera que Google n'a pas ajouté les métadonnées APK correspondantes au journal et saura ne pas faire confiance à l'APK compromis.

Étant donné que la publication dans le journal est un processus distinct du processus de publication avec signature (comme illustré dans le diagramme de l'écosystème), cela augmente la difficulté pour l'attaquant au-delà de la compromission de la clé.

Nous prévoyons également d'intégrer ce journal à un réseau public de témoins à l'aide d'un protocole de témoin standard. Nous encourageons les parties externes et indépendantes à surveiller l'intégrité de ce journal accessible au public. Ces parties peuvent attester de la propriété d'ajout uniquement du journal et signaler toute falsification.

L'existence d'un tel système de transparence et la visibilité accrue des attaques découragent les activités malveillantes. Si un APK est compromis, mais que les utilisateurs ne font confiance qu'à ceux qui figurent dans le journal, l'APK compromis doit être exposé publiquement. Cela augmente la probabilité de découvrir l'existence de l'APK compromis et des mesures peuvent être prises pour en supprimer la distribution.

Modèle de demandeur

Le modèle de demandeur est un framework utilisé pour définir les rôles et les artefacts dans un système vérifiable. Dans le cas de la transparence des APK des services système Google, nous affirmons que le hachage des binaires signés enregistrés dans ce journal représente le code officiel des APK des services système Google respectifs.

  • Réclamation GoogleSystemServicesApk: (je, Google, affirme que $codeSignature est pour $googleSystemServicesApk), où :
    • $codeSignature est un jeton Web JSON (JWT) signé qui contient une liste de fichiers DEX et de bibliothèques natives, ainsi que leurs hachages correspondants inclus dans une version spécifique de $googleSystemServicesApk.
    • $googleSystemServicesApk est un package Android (APK) de l'ensemble de packages suivant: {Android System SafetyCore (com.google.android.safetycore), Android System Key Verifier (com.google.android.contactkeys)}

Toute personne disposant d'une copie de $googleSystemServicesApk peut vérifier la revendication ci-dessus. Nous décrivons ce processus en détail sur la page de validation.

Contenu du journal

Lorsque Google publie une nouvelle version des APK listés ci-dessus, il ajoute une entrée correspondante au journal de transparence de l'APK des services système Google.

Chaque entrée de ce journal contient quatre métadonnées APK:

  1. Hachage de la signature de code d'un APK développé par Google. Il s'agit d'une chaîne hexadécimale du condensé SHA256 d'un jeton de transparence du code (également appelé jeton JWT de transparence du code).
  2. Description du type de hachage ci-dessus. Il s'agit d'une chaîne.
  3. Nom du package de l'APK. Il s'agit d'une chaîne.
  4. Numéro de version (versionCode) de l'APK. Il s'agit d'un entier.

Le format d'une entrée de journal est la concaténation des quatre éléments d'information avec un caractère de nouvelle ligne (\n), comme illustré ci-dessous:

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

Notez que dans cette version, nous testons l'utilisation de la transparence du code. Cela signifie qu'au lieu du hachage de l'APK, nous enregistrons le récapitulatif du jeton de transparence du code. La description du hachage est donc actuellement définie sur SHA256(Signed Code Transparency JWT).

De plus, cela montre comment les développeurs d'applications peuvent utiliser la transparence du code lorsque leurs clés de signature d'application sont détenues par Google Play.

Schéma de l'écosystème

Schéma de l'écosystème des journaux vérifiables