Il log di trasparenza binaria di Pixel sfrutta la tecnologia dei log di trasparenza.
L'utilità dei log di trasparenza è stata dimostrata con Certificate Transparency, un protocollo internet che richiede alle autorità di certificazione di pubblicare i certificati che emettono nei log di trasparenza dei certificati pubblici. Questo processo ha ridotto notevolmente l'emissione errata di certificati, aumentando così la sicurezza di internet. Molti operatori di log di Certificate Transparency si basano su un'implementazione dei log di trasparenza disponibile all'indirizzo transparency.dev.
I log di trasparenza vengono implementati con alberi Merkle. Questa pagina presuppone una conoscenza generale degli alberi Merkle e della trasparenza binaria. Consulta Strutture di dati verificabili per una panoramica degli alberi Merkle e la pagina di destinazione per una panoramica della trasparenza binaria.
Implementazione dei log
Il log di trasparenza binaria di Pixel è implementato come
struttura ad albero Merkle basata su riquadri. La radice
dei contenuti del riquadro viene pubblicata all'indirizzo
https://developers.google.com/android/binary_transparency/tile. Nota: questa non è una normale pagina web; le voci di log contenute nelle relative sottodirectory devono essere lette in modo programmatico con la libreria TLog di Golang SumDB e non tramite un browser.
Consulta Contenuti del log per una descrizione dei contenuti delle voci.
L'hash radice dell'albero Merkle di un log, contenuto in un checkpoint, viene pubblicato all'indirizzo https://developers.google.com/android/binary_transparency/checkpoint.txt. È presentato nel formato checkpoint. Le foglie di questo albero Merkle sono pubblicate all'indirizzo https://developers.google.com/android/binary_transparency/image_info.txt. La firma del checkpoint può essere verificata con la seguente chiave pubblica:
-----BEGIN CERTIFICATE-----
MIICPDCCAeOgAwIBAgIVAPooxISw/nFF/dPwmCUaV36Z4s3hMAoGCCqGSM49BAMCMHQxCzAJBgNV
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYD
VQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAgFw0y
MTA3MTkyMjQxNDFaGA8yMDUxMDcxOTIyNDE0MVowdDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBJbmMuMRAw
DgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
QgAEU83uXNUiTYE53c2TfdWmqpW20bBXy4KEf5Ff8dV8GLKlVAXKHyjw3Lp9J3E0yCRJ/39XKeuA
AMF7KzSvhD248KNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUHRpvuNkzjtBY213BWgUyWWHm
3VYwHwYDVR0jBBgwFoAUHRpvuNkzjtBY213BWgUyWWHm3VYwCgYIKoZIzj0EAwIDRwAwRAIgZsZb
CNBXRkCKLS+LG/41VWj1cTszt9QCdJQNuy7aT94CIDPgn7v5b1ykBVUTuLgRSofxAzHg9R4dg1oA
7tTFAuDg
-----END CERTIFICATE-----
Il processo di verifica legge il checkpoint e i riquadri contenenti le voci di log dal log.
Procedura di verifica
Un log di trasparenza viene implementato con una struttura ad albero Merkle costituita da hash. Un nodo foglia contiene dati e un nodo principale contiene l'hash dei relativi nodi secondari.
Sull'albero Merkle vengono eseguiti due calcoli per verificare la proprietà a prova di manomissione dei log di trasparenza: la prova di inclusione e la prova di coerenza. Il primo dimostra che il log include una voce corrispondente a una versione dell'immagine, ovvero. La voce di log include il digest VBMeta, un hash che rappresenta le immagini sistema operativo, che può essere restituito da un dispositivo. Quest'ultima dimostra che quando vengono aggiunte nuove voci all'albero, il nuovo checkpoint è coerente con la versione precedente dell'albero.
Per verificare l'immagine Pixel, esegui la prova di inclusione. L'esecuzione del calcolo della prova di coerenza è facoltativa, perché le terze parti lo fanno continuamente.
Se vuoi familiarizzare con i concetti di verifica in Pixel Binary Transparency, puoi seguire le istruzioni riportate di seguito per utilizzare l'immagine in esecuzione sul tuo dispositivo Pixel. Se vuoi eseguire il firmware Pixel con il massimo grado di affidabilità, consulta la procedura di verifica in Verifica completa della trasparenza binaria di Pixel.
Prerequisiti di verifica
Prima di procedere con la verifica che l'artefatto (firmware o APK) sia conforme alla rivendicazione, assicurati che i seguenti strumenti siano disponibili su un computer connesso alla rete. A seconda della destinazione della verifica, potresti non aver bisogno di tutti.
Linguaggio Go
Lo strumento di verifica è scritto in Go. Per crearlo, installa Go 1.24 o versioni successive dal sito di Go.
Android Debug Bridge (ADB)
ADB è uno strumento che comunica con un dispositivo Android per esaminare l'immagine o
estrarre gli APK, disponibile sul sito web di Android SDK Platform Tools.
Inclusion Proof verifier
Il programma di verifica della prova di inclusione è un modulo Go che esegue query nel log di trasparenza
e indica se un artefatto è incluso nel log.
È pubblicato nel repository GitHub android-binary-transparency all'indirizzo
https://github.com/android/android-binary-transparency/tree/main
Per clonare il repository AOSP avb:
computer:~$ git clone https://android.googlesource.com/platform/external/avb
Per clonare il repository GitHub android-binary-transparency:
computer:~$ git clone https://github.com/android/android-binary-transparency
AAPT2
AAPT2 (Android Asset Packaging Tool) è uno strumento di compilazione utilizzato per compilare e pacchettizzare le risorse di un'app per Android. Può essere trovato come strumento autonomo in Android SDK Build Tools versione 26.0.2 e successive.
bundletool
bundletool è uno strumento utilizzato per creare un Android App Bundle (AAB). Può essere utilizzato anche per verificare le firme del codice APK.
Può essere scaricato da GitHub.
wget o curl
wget e curl sono strumenti che possono essere utilizzati per recuperare o scaricare file da internet. Assicurati di aver installato uno di questi strumenti, poiché gli script di verifica potrebbero farvi affidamento.
Avbtool
avbtool
viene utilizzato per calcolare il digest VBMeta delle immagini di fabbrica e la verifica dei
file binari.
Dopo aver clonato il repository avb (come mostrato nella sezione del programma di verifica della prova di inclusione), avbtool.py si trova all'interno della directory avb clonata.
Devi aggiungere questa directory alla variabile di ambiente $PATH.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool
è uno script Python utilizzato per decomprimere i singoli componenti nel
bootloader.img di Pixel.
Non è necessario se stai verificando gli APK.
Questo strumento è importante perché consente a avbtool.py di scoprire le immagini richieste per la verifica.
Per utilizzare questo strumento, devi scaricare i tre script Python seguenti
nella directory in cui si trova avbtool.py,
rendere eseguibile fbpacktool.py
e creare un link simbolico denominato fbpacktool a fbpacktool.py per comodità.
Se hai wget:
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
Se hai curl:
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
openssl consente di eseguire varie operazioni di crittografia utilizzando il terminale nel flusso di lavoro di verifica. Assicurati che sia installato sul tuo sistema. Puoi controllare sul terminale eseguendo il seguente comando e assicurandoti che il risultato restituito non sia vuoto:
computer:~$ which openssl
/usr/bin/openssl
Prova di inclusione
Il proprietario di Pixel può verificare che la sua immagine sia nel log estraendo prima i metadati pertinenti, quindi confrontando l'hash radice ricalcolato con l'hash radice contenuto nel checkpoint pubblicato. Se corrispondono, il proprietario di Pixel può contare su alcune protezioni esemplificate nel modello di minaccia.
Per verificare che l'immagine su un dispositivo Pixel sia nel log di trasparenza, connettiti al dispositivo con adb, quindi esegui i seguenti comandi:
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
La prima strofa recupera i metadati da un dispositivo Pixel nel formato di una
voce di log e li salva in /tmp/log_payload.txt.
La seconda strofa esegue il programma di verifica della prova di inclusione pubblicato nel repository di Avvio verificato Android. Questo strumento calcola l'hash della voce di log candidata, recupera gli altri hash necessari per ricalcolare il checkpoint dal log e lo confronta con il checkpoint pubblicato dal log.
L'output del comando viene scritto in stdout:
OKse l'immagine è inclusa nel log,FAILUREse non lo è.
(Facoltativo) Prova di coerenza
Poiché Google rilascia periodicamente nuove versioni dell'immagine di fabbrica di Pixel, il log di trasparenza è in continua crescita. Un testimone verifica che l'albero cresca in modo coerente con le foglie precedenti. Il testimone tiene traccia dell'hash della radice dell'albero e calcola l'hash della radice candidato successivo richiedendo i nuovi hash delle foglie dell'albero. Affinché un log di trasparenza sia a prova di manomissione, deve essere controllato continuamente per verificarne la coerenza.
Il comportamento di sola aggiunta del log di trasparenza viene controllato attivamente da terze parti, quindi la maggior parte degli utenti non deve farlo autonomamente, ma chiunque può monitorare la coerenza del log. Google ha pubblicato un'implementazione open source di un testimone in questo repository GitHub. È necessario utilizzare la configurazione specifica per il log Pixel Binary Transparency (PixelBT).