Auf dieser Seite wird eine Methode beschrieben, mit der Sie mit hoher Wahrscheinlichkeit sicherstellen können, dass auf Ihrem Pixel eine legitime Version des Pixel-Images ausgeführt wird. Dazu müssen Sie ein Firmware-Image auf Ihren Computer herunterladen und einen Log-Inclusion-Nachweis für das heruntergeladene Artefakt ausführen, bevor Sie es auf Ihr Gerät flashen.
Werksimage von Google Pixel prüfen
Voraussetzungen für die Bestätigung
Bevor Sie prüfen, ob das gerade heruntergeladene Image mit unserer Behauptung übereinstimmt, müssen Sie auf einem mit dem Netzwerk verbundenen Computer Folgendes tun:
Programmiersprache Go
Das Überprüfungstool ist in Go geschrieben. Um es zu erstellen, müssen Sie Go 1.17 oder höher von der Go-Website installieren.
wget oder curl
wget und curl sind Tools, mit denen Dateien aus dem Internet abgerufen oder heruntergeladen werden können. Eines dieser Tools muss auf Ihrem System installiert sein, da der Rest dieser Anleitung und das von uns bereitgestellte Script davon ausgehen, dass eines davon vorhanden ist.
Avbtool
avbtool wird verwendet, um den VBMeta-Digest der Firmware-Images zu berechnen und Binärdateien zu verifizieren.
Sie können es mit dem folgenden Befehl aus dem AOSP-Repository herunterladen. Weitere Informationen finden Sie in der verknüpften Dokumentation.
computer:~$ git clone https://android.googlesource.com/platform/external/avb
Nach dem Klonen dieses Repositorys befindet sich avbtool.py
im geklonten Repositoryverzeichnis avb
. Außerdem sollten Sie dieses Verzeichnis der Umgebungsvariablen $PATH
hinzufügen.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Prüfer für Nachweise zur Inklusion
Der Verifizierer für den Nachweis der Aufnahme ist ein Go-Modul, das das Pixel-Factory-Transparenzprotokoll für Bilder abfragt und ausgibt, ob ein Bild im Protokoll enthalten ist.
Nachdem Sie das AVB-Repository oben geklont haben, finden Sie den Quellcode des Verifiers in tools/transparency/verify/
.
Fbpacktool
fbpacktool ist ein Python-Script, mit dem einzelne Komponenten in der bootloader.img
von Pixel entpackt werden. Dieses Tool ist wichtig, damit avbtool.py
die für die Überprüfung erforderlichen Bilder finden kann.
Wenn Sie dieses Tool verwenden möchten, laden Sie die folgenden drei Python-Scripts in das Verzeichnis herunter, in dem sich avbtool.py
befindet, machen Sie fbpacktool.py
ausführbar und erstellen Sie zur besseren Übersicht einen Symlink namens fbpacktool
zu fbpacktool.py
.
Wenn Sie wget
haben, können Sie die drei Scripts mit dem folgenden Befehl herunterladen:
computer:dir_to_avbtool$ wget https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool
Wenn Sie curl
haben, können Sie die folgenden Befehle ausführen, um die drei Scripts herunterzuladen:
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool
OpenSSL
Außerdem benötigen Sie das Tool openssl, um verschiedene kryptografische Vorgänge über das Terminal im Überprüfungsablauf auszuführen. Prüfen Sie, ob es auf Ihrem System installiert ist. Sie können dies mit dem folgenden Befehl in Ihrem Terminal prüfen und darauf achten, dass das zurückgegebene Ergebnis nicht leer ist. Beispiel:
computer:~$ which openssl
/usr/bin/openssl
Nutzlast für die Überprüfung erstellen
Wenn Sie das Image auf Ihrem Gerät oder ein Download von der Pixel Factory Image-Website überprüfen möchten, müssen Sie zuerst die zu diesem Image gehörende Nutzlast aus dem Build-Fingerabdruck und dem VBMeta-Digest erstellen. Es gibt zwei Optionen: manuell oder automatisch. Eine Beschreibung dazu finden Sie unten.
- Build-Fingerprint: Eine String-ID des Werksimages.
- Beispiel:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
- Beispiel:
- VBMeta-Digest: Ein SHA-256-kryptografischer Digest, der die verschiedenen Teile der Firmware-Images zusammenbindet.
- Beispiel:
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
- Beispiel:
Manuelle Nutzlasterstellung
Wenn Sie die Payload zur Überprüfung manuell generieren möchten, müssen Sie eine Textdatei namens payload.txt
erstellen, die in einer Zeile die Build-Fingerabdruck und in der nächsten Zeile den VBMeta-Digest enthält. Zwischen den Zeilen muss eine leere Zeile stehen. Das genaue Format finden Sie im Abschnitt Log-Inhalt.
Nachdem Sie die Schritte auf der Website für das Firmware-Image ausgeführt haben, sollte der Inhalt der Datei payload.txt
so aussehen:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
VBMeta-Digest und Build-Fingerabdruck von der Website mit Pixel-Factory-Images extrahieren
Wenn Sie ein Werksimage von der Website mit Pixel-Werksimages herunterladen, müssen Sie die heruntergeladene Datei entpacken. Dadurch wird ein neuer Ordner erstellt. Rufen Sie den neu erstellten Ordner auf und entpacken Sie die zugehörige image-*.zip
-Datei, um einzelne *.img
-Dateien zu erhalten. Diese Binärdateien sind Partitions-Images. Achten Sie darauf, dass sich unter den img-Dateien eine vbmeta.img
-Datei befindet.
Auf dem Bildschirm sollte Folgendes zu sehen sein:
computer:oriole-sd1a.210817.015.a4$ unzip image-oriole-sd1a.210817.015.a4.zip
Archive: image-oriole-sd1a.210817.015.a4.zip
inflating: android-info.txt
inflating: boot.img
inflating: vendor_boot.img
inflating: system.img
inflating: vendor.img
inflating: product.img
inflating: system_ext.img
inflating: system_other.img
inflating: dtbo.img
inflating: vbmeta_system.img
inflating: vbmeta.img
inflating: super_empty.img
Sie können den Build-Fingerabdruck extrahieren und den VBMeta-Digest aus allen heruntergeladenen Dateien berechnen.
Nachdem avbtool.py
für Ihre $PATH
verfügbar gemacht wurde, können Sie die folgenden Befehle über Ihr Terminal ausführen, um den Build-Fingerabdruck zu extrahieren und den VBMeta-Digest des gerade heruntergeladenen Firmware-Images zu berechnen:
computer:dir_containing_unzipped_factory_image~$ grep -a 'ro\..*build\.fingerprint=google/.*/release-keys' system.img | cut -f2 -d'='
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
computer:dir_containing_unzipped_factory_image$ avbtool.py calculate_vbmeta_digest --image vbmeta.img
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Manuelle Überprüfung des heruntergeladenen Original-Images
Um das heruntergeladene Firmware-Image korrekt zu überprüfen, müssen Sie fbpacktool.py und zwei weitere Python-Dateien herunterladen, von denen es abhängt (fbpack.py und packedstruct.py), um die Komponenten in bootloader.img
zu entpacken, da sie einzeln in der VBMeta-Struktur beschrieben sind. Sobald Sie den Entpacker haben, können Sie das Bootloader-Image mit fbpacktool.py
entpacken. Beispiel:
computer:dir_containing_unzipped_images$ python3 fbpacktool.py unpack bootloader-oriole-slider-1.0-7683913.img
In diesem Verzeichnis sollten jetzt weitere .img-Dateien angezeigt werden.
Sie können jetzt mit avbtool.py
manuell prüfen, ob die Signaturen der verschiedenen Partitionen übereinstimmen.
computer:dir_containing_unzipped_images$ avbtool.py verify_image --image vbmeta.img --follow_chain_partitions
Verifying image vbmeta.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta.img
vbmeta_system: Chained but ROLLBACK_SLOT (which is 1) and KEY (which has sha1 df529646b7225015196a714006346f0768b87fcf) not specified
--
Verifying image vbmeta_system.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta_system.img
product: Successfully verified sha256 hashtree of product.img for image of 2700468224 bytes
system: Successfully verified sha256 hashtree of system.img for image of 878493696 bytes
system_ext: Successfully verified sha256 hashtree of system_ext.img for image of 251334656 bytes
vbmeta_vendor: Chained but ROLLBACK_SLOT (which is 3) and KEY (which has sha1 85322346680a860c091fa14a64cef1fe4a3ffe31) not specified
--
Verifying image vbmeta_vendor.img using embedded public key
vbmeta: Successfully verified SHA256_RSA4096 vbmeta struct in vbmeta_vendor.img
vendor: Successfully verified sha256 hashtree of vendor.img for image of 472940544 bytes
boot: Chained but ROLLBACK_SLOT (which is 2) and KEY (which has sha1 85322346680a860c091fa14a64cef1fe4a3ffe31) not specified
--
Verifying image boot.img using embedded public key
vbmeta: Successfully verified footer and SHA256_RSA4096 vbmeta struct in boot.img
boot: Successfully verified sha256 hash of boot.img for image of 24481792 bytes
abl: Successfully verified sha256 hash of abl.img for image of 1744896 bytes
bl1: Successfully verified sha256 hash of bl1.img for image of 12288 bytes
bl2: Successfully verified sha256 hash of bl2.img for image of 544768 bytes
bl31: Successfully verified sha256 hash of bl31.img for image of 86016 bytes
dtbo: Successfully verified sha256 hash of dtbo.img for image of 2152234 bytes
gsa: Successfully verified sha256 hash of gsa.img for image of 262144 bytes
ldfw: Successfully verified sha256 hash of ldfw.img for image of 4096000 bytes
pbl: Successfully verified sha256 hash of pbl.img for image of 49152 bytes
tzsw: Successfully verified sha256 hash of tzsw.img for image of 4304896 bytes
vendor_boot: Successfully verified sha256 hash of vendor_boot.img for image of 25718784 bytes
vendor_dlkm: Successfully verified sha256 hashtree of vendor_dlkm.img for image of 54505472 bytes
Wenn keine Fehler- oder Fehlschlagsmeldungen angezeigt werden, wurde die VBMeta des heruntergeladenen Bilds jetzt erfolgreich überprüft.
Automatische Nutzlasterstellung
Wir haben auch ein Python-Script für Sie bereitgestellt. Mit diesem Tool müssen Sie nicht manuell Dateien abrufen und entpacken, sondern nur die URL zum Werksimage angeben.
computer:dir_to_avb_repo/tools/transparency$ python3 ./pixel_factory_image_verify.py https://dl.google.com/dl/android/aosp/oriole-sd1a.210817.015.a4-factory-074b7f51.zip
Fetching file from: https://dl.google.com/dl/android/aosp/oriole-sd1a.210817.015.a4-factory-074b7f51.zip
Successfully downloaded file.
Successfully unpacked factory image.
Successfully unpacked factory image partitions.
Successfully unpacked bootloader image.
Successfully verified VBmeta.
Successfully extracted build fingerprint.
Successfully calculated VBMeta Digest.
The build fingerprint for factory image is: google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
The VBMeta Digest for factory image is: 4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
A corresponding "payload.txt" file has been created.
Wenn Sie den Befehl oben ausführen, wird das Image-Bundle heruntergeladen, entpackt und die Signaturen der signierten Partitionen werden überprüft. Nach erfolgreicher Überprüfung wird eine neue Datei mit dem Namen payload.txt
erstellt. Der Inhalt sollte in etwa so aussehen:
google/oriole/oriole:12/SD1A.210817.015.A4/7697517:user/release-keys
4d5e41b7c675a821de81f7d2c744623fe808c8c2d3e19a83e894dab5d0829dbe
Nachdem die Datei „payload.txt“ erstellt wurde, können Sie mit den Schritten zur Prüfung der Bildeinfügung beginnen.
Einschluss von Bildern nachweisen
Nachdem Sie die Nutzlast erstellt haben, legen Sie eine Shell-Variable (z.B. $PAYLOAD_PATH
) so fest, dass sie auf den Pfad zur Nutzlast verweist.
Ein Tool zum Nachweis der Einbeziehung wurde im avb
-Repository im Android Open Source-Projekt veröffentlicht. So führen Sie ihn aus:
computer:external/avb/tools/transparency/verify$ PAYLOAD_PATH=../payload.txt
computer:external/avb/tools/transparency/verify$ go build cmd/verifier/verifier.go
computer:external/avb/tools/transparency/verify$ ./verifier --payload_path=${PAYLOAD_PATH} --log_type=pixel
Der Prüfer verwendet den Checkpoint und den Loginhalt (im Kachelverzeichnis), um zu prüfen, ob sich Ihre Bildnutzlast im Transparenzprotokoll befindet, d. h., ob sie von Google veröffentlicht wurde.
Die Ausgabe des Befehls wird in stdout geschrieben:
OK. inclusion check success!
, wenn das Bild im Protokoll enthalten ist,FAILURE
, wenn dies nicht der Fall ist.