Technische Details zur Binärtransparenz für Pixel

Das Pixel Binary Transparency Log nutzt die Technologie des Transparency-Logs.

Der Nutzen von Transparency-Logs hat sich mit Certificate Transparency bewährt, einem Internet protokoll, das von Zertifizierungsstellen verlangt, die von ihnen ausgestellten Zertifikate in öffentlichen Certificate Transparency-Logs zu veröffentlichen. Dieser Prozess hat die fälschliche Ausstellung von Zertifikaten erheblich reduziert und dadurch die Sicherheit des Internets erhöht. Viele Betreiber von Certificate Transparency-Logs verwenden eine Implementierung von Transparency-Logs, die unter transparency.dev zu finden ist.

Transparency-Logs werden mit Merkle-Bäumen implementiert. Auf dieser Seite werden allgemeine Kenntnisse über Merkle-Bäume und binäre Transparenz vorausgesetzt. Eine Übersicht über Merkle-Bäume finden Sie unter Verifiable Data Structures und eine Übersicht über binäre Transparenz auf der entsprechenden Landingpage.

Log-Implementierung

Das Pixel Binary Transparency Log wird als kachelbasierter Merkle-Baum implementiert. Der Stamm der Kachelinhalte wird unter https://developers.google.com/android/binary_transparency/tile bereitgestellt. Hinweis: Dies ist keine normale Webseite. Die Logeinträge in den Unterverzeichnissen sollten programmatisch mit der Golang SumDB TLog-Bibliothek und nicht über einen Browser gelesen werden.

Eine Beschreibung des Inhalts der Einträge finden Sie unter Log-Inhalt.

Der Merkle-Baum-Stamm-Hash eines Logs, der in einem Prüfpunkt enthalten ist, wird unter https://developers.google.com/android/binary_transparency/checkpoint.txt bereitgestellt. Er wird im Prüfpunktformat dargestellt. Die Blätter dieses Merkle-Baums werden unter https://developers.google.com/android/binary_transparency/image_info.txt bereitgestellt. Die Signatur des Prüfpunkts kann mit dem folgenden öffentlichen Schlüssel überprüft werden:

-----BEGIN CERTIFICATE-----
MIICPDCCAeOgAwIBAgIVAPooxISw/nFF/dPwmCUaV36Z4s3hMAoGCCqGSM49BAMCMHQxCzAJBgNV
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYD
VQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAgFw0y
MTA3MTkyMjQxNDFaGA8yMDUxMDcxOTIyNDE0MVowdDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBJbmMuMRAw
DgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
QgAEU83uXNUiTYE53c2TfdWmqpW20bBXy4KEf5Ff8dV8GLKlVAXKHyjw3Lp9J3E0yCRJ/39XKeuA
AMF7KzSvhD248KNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUHRpvuNkzjtBY213BWgUyWWHm
3VYwHwYDVR0jBBgwFoAUHRpvuNkzjtBY213BWgUyWWHm3VYwCgYIKoZIzj0EAwIDRwAwRAIgZsZb
CNBXRkCKLS+LG/41VWj1cTszt9QCdJQNuy7aT94CIDPgn7v5b1ykBVUTuLgRSofxAzHg9R4dg1oA
7tTFAuDg
-----END CERTIFICATE-----

Beim Überprüfungsprozess werden der Prüfpunkt und die Kacheln mit den Logeinträgen aus dem Log gelesen.

Überprüfungsprozess

Ein Transparency-Log wird mit einem Merkle-Baum implementiert, der aus Hashes besteht. Ein Blattknoten enthält Daten und ein übergeordneter Knoten den Hash seiner untergeordneten Knoten.

Zwei Berechnungen werden am Merkle-Baum durchgeführt, um die Manipulationssicherheit von Transparency-Logs zu überprüfen: der Inclusion Proof und der Consistency Proof. Ersterer beweist, dass das Log einen Eintrag enthält, der einer Image-Version entspricht, das heißt. Der Logeintrag enthält den VBMeta-Digest, einen Hash, der die Betriebssystem-Images darstellt, die von einem Gerät zurückgegeben werden können. Letzterer beweist, dass der neue Prüfpunkt mit der vorherigen Version des Baums übereinstimmt, wenn neue Einträge hinzugefügt werden.

Führen Sie den Inclusion Proof aus, um Ihr Pixel-Image zu überprüfen. Die Berechnung des Consistency Proof ist optional, da sie kontinuierlich von Dritten durchgeführt wird.

Wenn Sie sich mit den Konzepten der Überprüfung in Pixel Binary Transparency vertraut machen möchten, können Sie der Anleitung unten folgen, um das Image zu verwenden, das auf Ihrem Pixel-Gerät ausgeführt wird. Wenn Sie die Pixel-Firmware mit höchster Zuverlässigkeit ausführen möchten, lesen Sie den Überprüfungsprozess unter Pixel Binary Transparency Full Verification.

Bestätigungsgrundlagen

Bevor Sie überprüfen, ob das Artefakt (Firmware oder APK) mit dem Anspruch übereinstimmt, prüfen Sie, ob die folgenden Tools auf einem mit dem Netzwerk verbundenen Computer verfügbar sind. Je nach Überprüfungsziel benötigen Sie möglicherweise nicht alle.

Golang

Das Überprüfungstool ist in Go geschrieben. Installieren Sie Go 1.24 oder höher von der Go-Website, um es zu erstellen.

Android Debug Bridge (ADB)

ADB ist ein Tool, das mit einem Android-Gerät kommuniziert, um das Image zu prüfen oder APKs zu extrahieren. Es ist auf der Android SDK Platform Tools Website verfügbar.

Inclusion Proof-Prüfer

Der Inclusion Proof-Prüfer ist ein Go-Modul, das das Transparency-Log abfragt und ausgibt, ob ein Artefakt im Log enthalten ist. Es wird im android-binary-transparency GitHub-Repository unter https://github.com/android/android-binary-transparency/tree/main veröffentlicht.

So klonen Sie das AOSP-Repository avb:

computer:~$ git clone https://android.googlesource.com/platform/external/avb

So klonen Sie das GitHub-Repository android-binary-transparency:

computer:~$ git clone https://github.com/android/android-binary-transparency

AAPT2

AAPT2 (Android Asset Packaging Tool) ist ein Build-Tool, mit dem die Ressourcen einer Android-App kompiliert und verpackt werden. Es ist als eigenständiges Tool in Android SDK Build Tools Version 26.0.2 und höher verfügbar.

bundletool

bundletool ist ein Tool zum Erstellen eines Android App Bundle (AAB). Es kann auch zum Überprüfen von APK-Codesignaturen verwendet werden. Es kann von GitHub heruntergeladen werden.

wget oder curl

wget und curl sind Tools, mit denen Dateien aus dem Internet abgerufen oder heruntergeladen werden können. Achten Sie darauf, dass eines dieser Tools installiert ist, da die Überprüfungsskripts möglicherweise darauf angewiesen sind.

Avbtool

avbtool wird verwendet, um den VBMeta-Digest der Factory Images zu berechnen und Binärdateien zu überprüfen. Nach dem Klonen des avb-Repositorys (wie im Abschnitt Inclusion Proof-Prüfer gezeigt) finden Sie avbtool.py im geklonten avb-Verzeichnis. Sie sollten dieses Verzeichnis der Umgebungsvariable $PATH hinzufügen.

computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL

Fbpacktool

fbpacktool ist ein Python-Skript, mit dem einzelne Komponenten in der `bootloader.img`-Datei von Pixel entpackt werden. bootloader.img Wenn Sie APKs überprüfen, ist es nicht erforderlich. Dieses Tool ist wichtig, da avbtool.py damit die für die Überprüfung erforderlichen Images finden kann.

fbpacktool erfordert Python 3.6 oder höher und das PyYAML-Paket (z. B. python3 -m pip install pyyaml).

Wenn Sie dieses Tool verwenden möchten, laden Sie die folgenden sechs Python-Skripts in das Verzeichnis herunter, in dem sich avbtool.py befindet, machen Sie fbpacktool.py ausführbar und erstellen Sie zur Vereinfachung einen Symlink mit dem Namen fbpacktool zu fbpacktool.py.

Wenn Sie wget haben:

computer:dir_to_avbtool$ wget https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpacktool.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpack.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/packedstruct.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlparser.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlserializer.py \
https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/yamlparser.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool

Wenn Sie curl haben:

computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpacktool.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/fbpack.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/packedstruct.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlparser.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/xmlserializer.py
computer:dir_to_avbtool$ curl -LO https://developers.google.com/android/binary_transparency/tools/pixel/fbpacktool/yamlparser.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool

OpenSSL

openssl hilft bei der Durchführung verschiedener kryptografischer Vorgänge über das Terminal im Überprüfungsworkflow. Achten Sie darauf, dass es auf Ihrem System installiert ist. Sie können das in Ihrem Terminal prüfen, indem Sie den folgenden Befehl ausführen und darauf achten, dass das zurückgegebene Ergebnis nicht leer ist:

computer:~$ which openssl
/usr/bin/openssl

Inclusion Proof

Ein Pixel-Nutzer kann prüfen, ob sich sein Image im Log befindet, indem er zuerst die relevanten Metadaten extrahiert und dann den neu berechneten Stamm-Hash mit dem Stamm-Hash im veröffentlichten Prüfpunkt vergleicht. Wenn sie übereinstimmen, kann der Pixel-Nutzer sich auf einige Schutzmaßnahmen verlassen, die im Bedrohungsmodell beschrieben sind.

Wenn Sie prüfen möchten, ob sich das Image auf einem Pixel-Gerät im Transparency-Log befindet, stellen Sie mit ADB eine Verbindung zum Gerät her, und führen Sie dann die folgenden Befehle aus:

FINGERPRINT=$(adb shell getprop ro.build.fingerprint)
VBMETA_DIGEST=$(adb shell getprop ro.boot.vbmeta.digest)
LOG_ENTRY="${FINGERPRINT}\n${VBMETA_DIGEST}\n"
PAYLOAD_PATH="/tmp/log_payload.txt"
echo -e $LOG_ENTRY > $PAYLOAD_PATH

cd avb/tools/transparency/verify/
go build cmd/verifier/verifier.go
./verifier --payload_path=$PAYLOAD_PATH --log_type=pixel

Im ersten Abschnitt werden die Metadaten von einem Pixel-Gerät im Format eines Logeintrags abgerufen und in /tmp/log_payload.txt gespeichert.

Im zweiten Abschnitt wird der Inclusion Proof-Prüfer ausgeführt, der im Android Verified Boot-Repository veröffentlicht wurde. Dieses Tool berechnet den Hash des Kandidaten-Logeintrags, ruft die anderen Hashes ab, die zum Neuberechnen des Prüfpunkts aus dem Log erforderlich sind, und vergleicht ihn mit dem vom Log veröffentlichten Prüfpunkt.

Die Ausgabe des Befehls wird in stdout geschrieben:

  • OK, wenn das Image im Log enthalten ist
  • FAILURE, wenn es nicht enthalten ist

Consistency Proof (optional)

Da Google regelmäßig neue Versionen des Pixel Factory Images veröffentlicht, wächst das Transparency-Log kontinuierlich. Ein Zeuge prüft, ob der Baum in einer Weise wächst, die mit seinen vorherigen Blättern übereinstimmt. Der Zeuge verfolgt den Stamm-Hash des Baums und berechnet den nächsten Kandidaten-Stamm-Hash, indem er die neuen Blatt-Hashes vom Baum anfordert. Damit ein Transparency-Log manipulationssicher ist, muss es kontinuierlich auf Konsistenz überprüft werden.

Das Verhalten des Transparency-Logs, dass nur Einträge angehängt werden können, wird aktiv von Dritten überprüft. Die meisten Nutzer müssen dies also nicht selbst tun. Es ist jedoch für jeden möglich, die Konsistenz des Logs zu überwachen. Google hat in diesem GitHub-Repository eine Open-Source Implementierung eines Zeugen veröffentlicht. Es ist erforderlich, die spezifische Konfiguration für das Pixel Binary Transparency (PixelBT)-Log zu verwenden.