Im Rahmen der kontinuierlichen Investitionen von Google in die Transparenz seiner Produkte erhöhen wir die Transparenz bei zwei neuen APKs von Google-Systemdiensten: Android System SafetyCore (com.google.android.safetycore) und Android System Key Verifier (com.google.android.contactkeys). Diese APKs ermöglichen die Warnungen zu sensiblen Inhalten und die Funktion zur Überprüfung kryptografischer Schlüssel in Google Messages. Das Transparenzprotokoll, das wir veröffentlicht haben, um die Behauptungen zu diesen APKs zu überprüfen.
Abgedeckte Pakete
In diesem Abschnitt werden die Pakete beschrieben, die im Transparenzprotokoll enthalten sind, sowie die entsprechenden Signaturschlüssel für die Codetransparenz.
Android System SafetyCore
Android System SafetyCore (com.google.android.safetycore) ist eine Android-Systemkomponente, die eine datenschutzfreundliche On-Device-Infrastruktur für den Nutzerschutz für Apps bietet.
Der Code dieses APKs ist derzeit mit dem folgenden Schlüssel signiert, der in diesem Zertifikat beschrieben ist:
-----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
Die APK Android System Key Verifier (com.google.android.contactkeys) ist ein Dienst zur Kontaktbestätigung unter Android. Nutzer können damit die öffentlichen Schlüssel eines Kontakts überprüfen, um sicherzustellen, dass sie tatsächlich mit der Person kommunizieren, an die sie eine Nachricht senden möchten. Der Dienst ist ein einheitliches System für die Überprüfung öffentlicher Schlüssel in verschiedenen Apps, bei dem die Überprüfung per QR-Code-Scan oder Zahlenvergleich erfolgt.
Der Code dieses APKs ist derzeit mit dem folgenden Schlüssel signiert, der in diesem Zertifikat beschrieben ist:
-----BEGIN CERTIFICATE-----
MIIFyDCCA7CgAwIBAgIUQwApn2X0vcGMw/VyRoUQkFXuekYwDQYJKoZIhvcNAQELBQAwdDELMAkG
A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDAS
BgNVBAoTC0dvb2dsZSBJbmMuMRAwDgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMCAX
DTI0MDczMTE5MzY0MVoYDzIwNTQwNzMxMTkzNjQxWjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
Q2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4x
EDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWQwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQDKZqLKu5eeBir6muCiQ5vGQxIDzZcQhLZLpbAkVBNKcrpjgMB6ef0JvrKBnmzN
tHzgExjv4jzyZ1UnU8kaTinVWZF5F9unwuH/957zpc9Ja/JDioGn0V0Q4fgCfIaCLxj4GxK9ywby
TMBWg4ZN0nzcNTCX7ygSzZa24qSq/zOJd2wcO6RxO6MOS2TJPBABA1Wi6l7R/ldXDvzy/3doy5VU
4SElcwWosLFr4jORKGK4R0en96722skXCfl3kNz0J/aIUohdd3cggRnUX7N7tz1nlJpKmDFKeuKn
4lTITUf0MKWzs6PKabyoHzJZYf3XNN88cDy41wR9lsA33DSutuS2tQ2wUlXHfzikZVoI/kCANLW1
2ew3Wo+1D/qYhWXDzO8eM/c4R17vpzSt3kl/2IkYVuHvp1S4luY0DT3S9rKYg630BO+ubEg5NaMt
hGpCAcfMu8WUbdpWxIvdHPM8mQZbzSB2r5eON7ufzq3pB9pwKvslpdNtINvrKtZCrMSqTTqVI2dL
8d8YWIFHYySgKZFKNNcG0Y/OapbAy8zoQZT8oz4P0lWCTVcCoh/54jCBdAKUO+LOm3ATMzw/v57o
g1Lr0wTM7YjFkToGI/dytMyEFkG3fGxYcgzkn3pu0EoQ4FsrnL3jHcIKPCX6wSykXzODVwPLoO3z
YQHn1i0dxzIkKwIDAQABo1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBQU/Oocht8Ntbcrqvx5
xljCPmYp1DAfBgNVHSMEGDAWgBQU/Oocht8Ntbcrqvx5xljCPmYp1DANBgkqhkiG9w0BAQsFAAOC
AgEAaWxz1VV1hUE+A/rQZNfNe2IH1B9f+4QCSF/VRmEOfSUB346cZgtSMkGpirXOczu0FExUAWzc
9GDV+w59P0YZ37IgB9l8nFh6qW9oCTBp3IOitvfKrz4x6GDhx6iU4j7WU60ezQZKnnchh4fIvraA
vy3m6/PLr6cbIvlHsUqCtt0gbNyj+fAgxJtbDSkqMwxYBOaOhQYQepkQuYD+juO08knwzMy5yFPL
MWBuhdB9Mqvv3l1MNcOB1Y+8RJGTp66ft1pVE2zuBDgix8m/Hizuewlws5xzLap/Rcx2BCHIFBlW
k4VbSZ6ERtkb/uh/q30psrBxcROxDR1LbynvPsayC+0pUjXCMVD7de3+HkeKiAT+OPQf8EAx2bMx
Nyz858lpVX9Eh92Q5jE/sxLvij3T6rBUBdatfpuE1dxGlpHNL7NVOEQpDOCZi9jSPstAoKYdtEzk
Im85maujM8udLoexXBTLgwYc/9Zz0nJXuVQJYyon70thXTrBc43gmi646rU4YFFhIei9N4dUQNgO
fxCGd8y8L8fTFAWQm9YQ7x7uxwjkalCh/ahRDtCdyk/ab8mHl/V1M5gkylUW6lt0Ba8Yw6j8PWqc
+io39beMlVWMfwj5mO2MTIKmUChUxULvQPcR46hve5mhSVZeBohPWnrc6B5XTf/4siWWRu0rYBD8
PLM=
-----END CERTIFICATE-----
Bedrohungsmodell
Transparenzsysteme können dazu verwendet werden, Angriffe auf die Lieferkette zu erkennen und so abzuschrecken. Hier einige Beispiele:
Angenommen, ein Angreifer ändert böswillig ein APK für Google-Systemdienste und schafft es sogar, es mit dem Signaturschlüssel zu signieren, der von Google Play verwendet wird. Jeder, der das schädliche APK empfängt, kann das Binary Transparency Log abfragen, um die Authentizität des APK zu überprüfen. Sie stellen fest, dass Google dem Log die entsprechenden APK-Metadaten nicht hinzugefügt hat, und wissen, dass sie dem manipulierten APK nicht vertrauen können.
Da die Veröffentlichung im Log ein separater Prozess vom Release-Prozess mit Signatur ist (wie im Ecosystem-Diagramm dargestellt), muss der Angreifer nicht nur den Schlüssel manipulieren, sondern auch den Log-Datensatz ändern.
Wir planen, dieses Protokoll auch in ein öffentliches Netzwerk von Zeugen einzubinden, das ein standardmäßiges Zeugenprotokoll verwendet. Wir empfehlen externen, unabhängigen Stellen, die Integrität dieses öffentlich zugänglichen Protokolls zu überwachen. Diese Parteien können die Eigenschaft „Nur anhängen“ des Protokolls bestätigen und Manipulationen melden.
Die Existenz eines solchen Transparenzsystems und die zusätzliche Auffindbarkeit von Angriffen schrecken vor schädlichen Aktivitäten ab. Wenn ein APK manipuliert wurde, aber Nutzer nur den im Log enthaltenen vertrauen, muss das manipulierte APK öffentlich zugänglich sein. So lässt sich die Wahrscheinlichkeit erhöhen, dass das manipulierte APK gefunden wird, und es können Maßnahmen ergriffen werden, um die Verbreitung zu beenden.
Modell für Anspruchsteller
Das Claimant-Modell ist ein Framework, mit dem Rollen und Artefakte in einem überprüfbaren System definiert werden. Im Fall der APK-Transparenz von Google-Systemdiensten machen wir den Anspruch geltend, dass der Hash der signierten Binärdateien, der in diesem Log aufgezeichnet ist, offiziellen Code für die entsprechenden APKs der Google-Systemdienste darstellt.
- AnspruchGoogleSystemServicesApk: (Ich, Google, beanspruche, dass
$codeSignature
für$googleSystemServicesApk
bestimmt ist), wobei:$codeSignature
ist ein signiertes JSON Web Token (JWT), das eine Liste von DEX-Dateien und nativen Bibliotheken sowie die entsprechenden Hash-Werte in einer bestimmten Version von$googleSystemServicesApk
enthält.$googleSystemServicesApk
ist ein Android-Paket (APK) aus den folgenden Paketen:{Android System SafetyCore (com.google.android.safetycore), Android System Key Verifier (com.google.android.contactkeys)}
Jeder, der eine Kopie von $googleSystemServicesApk
hat, kann die oben genannte Behauptung überprüfen. Auf der Überprüfungsseite wird dieser Vorgang ausführlich beschrieben.
Protokollinhalt
Wenn Google eine neue Version der oben aufgeführten APKs veröffentlicht, wird dem APK-Transparenzprotokoll für Google-Systemdienste ein entsprechender Eintrag hinzugefügt.
Jeder Eintrag in diesem Protokoll enthält vier APK-Metadaten:
- Der Hash der Codesignatur eines von Google entwickelten APKs. Dies ist ein Hexadezimalstring der SHA256-Digest eines Codetransparenz-Tokens (auch als Codetransparenz-JWT bezeichnet).
- Die Beschreibung des Hash-Typs oben. Dies ist ein String.
- Der Paketname des APK. Dies ist ein String.
- Die Versionsnummer (versionCode) des APK. Dies ist eine Ganzzahl.
Das Format eines Logeintrags besteht aus der Konkatenierung der vier Informationen mit einem Zeilenumbruchzeichen (\n
), wie im folgenden Beispiel dargestellt:
hash\nSHA256(Signed Code Transparency JWT)\npackage_name\npackage_version\n
In dieser Version testen wir die Codetransparenz.
Das bedeutet, dass anstelle des Hashwerts des APK der Digest des Codetransparenz-Tokens aufgezeichnet wird.
Daher ist die Hash-Beschreibung derzeit auf SHA256(Signed Code Transparency JWT)
festgelegt.
Außerdem zeigt dies, wie App-Entwickler Codetransparenz nutzen können, wenn ihre App-Signaturschlüssel von Google Play aufbewahrt werden.