Halaman ini menguraikan cara memverifikasi bahwa APK atau APEX yang diinstal di perangkat Android Anda sesuai dengan klaim yang dibuat dalam Model Penggugat. Proses ini melibatkan pengambilan APK dari perangkat Anda dan melakukan bukti penyertaan log pada artefak yang diekstrak.
Proses Verifikasi
Log transparansi diimplementasikan dengan pohon Merkle yang terdiri dari hash. Node daun berisi data, dan node induk berisi hash turunan.
Dua komputasi mendasar memverifikasi properti log transparansi yang tahan terhadap gangguan: bukti penyertaan dan bukti konsistensi. Bukti penyertaan mengonfirmasi bahwa log menyertakan entri untuk versi APK tertentu. Entri log ini berisi hash, yang merupakan ringkasan SHA256 dari file APK yang diinstal di perangkat. Bukti konsistensi memastikan bahwa saat entri baru ditambahkan, checkpoint baru tetap konsisten secara kriptografi dengan versi pohon sebelumnya (atau pohon tidak dirusak). Kami berfokus pada proses komputasi bukti penyertaan dalam panduan ini, sambil mengandalkan saksi untuk terus melakukan bukti konsistensi terhadap checkpoint terbaru.
Untuk memverifikasi APK yang tercakup, lakukan bukti penyertaan terhadap checkpoint yang disaksikan. Perhatikan bahwa kami berencana mengintegrasikan log ini dengan jaringan saksi publik menggunakan protokol saksi standar. Integrasi ini akan memberikan checkpoint yang disaksikan, yang menjamin konsistensi log.
Untuk memverifikasi bahwa aplikasi Google di perangkat Anda sesuai dengan klaim yang dibuat dalam model penggugat, ikuti langkah-langkah di bawah.
Bukti Penyertaan
Anda dapat memverifikasi bahwa APK yang tercakup di perangkat Anda ada dalam log dengan mengekstrak APK, menghitung hash-nya, dan menggunakan bukti penyertaan untuk memeriksa apakah hash tersebut ada di checkpoint yang dipublikasikan. Bukti penyertaan yang berhasil memberikan jaminan terhadap risiko yang dijelaskan dalam Model Ancaman, yang mengonfirmasi bahwa aplikasi tersebut adalah aplikasi Google yang sah.
Cara Memverifikasi Penyertaan APK Dalam Log
Aplikasi apa pun yang mengklaim sebagai aplikasi Google pihak pertama dapat diverifikasi terhadap log ini.
Prasyarat Verifikasi
Sebelum melanjutkan untuk memverifikasi bahwa artefak (firmware atau APK) sesuai dengan klaim, pastikan alat berikut tersedia di komputer yang terhubung ke jaringan. Bergantung pada target verifikasi, Anda mungkin tidak memerlukan semuanya.
Golang
Alat verifikasi ditulis dalam Go. Untuk mem-build-nya, instal Go 1.24 atau yang lebih baru dari situs Go.
Android Debug Bridge (ADB)
ADB adalah alat yang berkomunikasi dengan perangkat Android untuk memeriksa image atau
mengekstrak APK, yang tersedia di Android SDK Platform Tools situs web.
Pemverifikasi Bukti Penyertaan
Pemverifikasi bukti penyertaan adalah modul Go yang membuat kueri log transparansi dan menampilkan apakah artefak disertakan dalam log.
Modul ini dipublikasikan di repositori GitHub android-binary-transparency di
https://github.com/android/android-binary-transparency/tree/main
Untuk meng-clone repositori avb AOSP:
computer:~$ git clone https://android.googlesource.com/platform/external/avb
Untuk meng-clone repositori GitHub android-binary-transparency:
computer:~$ git clone https://github.com/android/android-binary-transparency
AAPT2
AAPT2 (Android Asset Packaging Tool) adalah alat build yang digunakan untuk mengompilasi dan memaketkan resource aplikasi Android. Alat ini dapat ditemukan sebagai alat mandiri di Android SDK Build Tools versi 26.0.2 dan yang lebih tinggi.
bundletool
bundletool adalah alat yang digunakan untuk mem-build Android App Bundle (AAB). Alat ini juga dapat digunakan untuk memverifikasi tanda tangan kode APK.
Alat ini dapat didownload dari GitHub.
wget atau curl
wget dan curl adalah alat yang dapat digunakan untuk mengambil atau mendownload file dari Internet. Pastikan Anda telah menginstal salah satu alat ini, karena skrip verifikasi mungkin bergantung pada alat tersebut.
Avbtool
avbtool digunakan untuk menghitung digest VBMeta image setelan pabrik dan verifikasi biner.
Setelah meng-clone repositori avb (seperti yang ditunjukkan di bagian Pemverifikasi Bukti Penyertaan
bagian), avbtool.py dapat ditemukan dalam direktori avb yang di-clone.
Anda harus menambahkan direktori ini ke variabel lingkungan $PATH.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool
adalah skrip Python yang digunakan untuk mengekstrak komponen individual di Pixel's
bootloader.img.
Anda tidak memerlukan alat ini jika memverifikasi APK.
Alat ini penting karena memungkinkan avbtool.py menemukan image yang diperlukan untuk verifikasi.
fbpacktool memerlukan Python 3.6 atau yang lebih baru dan paket
PyYAML
(misalnya, python3 -m pip install pyyaml).
Untuk menggunakan alat ini, Anda harus mendownload enam skrip Python berikut
ke direktori tempat avbtool.py berada,
membuat fbpacktool.py dapat dieksekusi,
dan membuat symlink bernama fbpacktool ke fbpacktool.py untuk memudahkan.
Jika Anda memiliki wget:
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
Jika Anda memiliki curl:
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 membantu melakukan berbagai operasi kriptografi menggunakan terminal dalam alur kerja verifikasi. Pastikan alat ini diinstal di sistem Anda. Anda dapat memeriksa di terminal dengan menjalankan perintah berikut dan memastikan hasil yang ditampilkan tidak kosong:
computer:~$ which openssl
/usr/bin/openssl
Membuat Payload untuk Verifikasi
Untuk memverifikasi APK yang diekstrak, Anda harus membuat payload log menggunakan informasi yang berasal dari APK itu sendiri.
Sebelum memulai, aktifkan proses debug USB di perangkat Anda untuk mengizinkan adb
koneksi.
Selanjutnya, temukan APK yang diinstal di perangkat Anda. Panduan ini menggunakan
APK layanan Google Play (com.google.android.gms) sebagai contoh kerja.
adb shell pm path com.google.android.gms
Anda akan melihat output yang mirip dengan berikut ini:
computer:~$ adb shell pm path com.google.android.gms
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/base.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_CronetDynamite_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_DynamiteLoader_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_DynamiteModulesA_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_DynamiteModulesC_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_GoogleCertificates_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_MapsDynamite_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_MeasurementDynamite_installtime.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_config.en.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_config.xxhdpi.apk
package:/data/app/~~oI3N-m7I3VNMk5eKUCscQg==/com.google.android.gms-O79jYXgqkqKaQ9IzJ5zqfA==/split_maps_core_dynamite_ondemand.apk
Output ini menunjukkan bahwa satu APK dasar dan beberapa APK terpisah diinstal
untuk com.google.android.gms di perangkat Anda.
Jumlah pasti APK terpisah bervariasi, bergantung pada konfigurasi perangkat Anda.
Setiap APK pecahan memiliki nama paket dan kode versi yang sama dengan APK dasar.
Download APK yang tercantum dari perangkat Android ke komputer Anda menggunakan perintah berikut (perhatikan bahwa jalur file sebenarnya mungkin berbeda):
mkdir -p /tmp/testdir/gms && cd /tmp/testdir/gms && \
adb shell pm path com.google.android.gms | cut -d':' -f2 | tr -d '\r' | xargs -n1 adb pull
Untuk memverifikasi nama paket dan versi APK yang didownload, Anda harus
memeriksa manifes (AndroidManifest.xml).
Karena manifes di dalam APK berada dalam format biner, gunakan alat aapt2(diinstal selama langkah prasyarat) untuk mengekstrak dan membaca informasi langsung dari APK:
computer:/tmp/testdir/gms$ aapt2 dump badging ./base.apk
package: name='com.google.android.gms' versionCode='260834035' versionName='26.08.34 (260400-876566425)' platformBuildVersionName='Baklava' platformBuildVersionCode='36' compileSdkVersion='36' compileSdkVersionCodename='Baklava'
minSdkVersion:'35'
targetSdkVersion:'36'
...
Anda harus mengulangi langkah ini untuk mendapatkan informasi yang relevan hingga Anda memperhitungkan semua APK pecahan yang diinstal di perangkat Anda.
Output mengonfirmasi bahwa nama paket APK adalah com.google.android.gms dan nomor versinya (versionCode) adalah 260834035.
Selanjutnya, hitung hash kriptografi setiap APK:
computer:/tmp/testdir/gms$ sha256sum *.apk
66aa2d7b9752cdd61065b55c8e16739d8367fa18a0f1c8c84122369f86958f1a base.apk
c20754aee886cc55a9de91ee15c623c59d94ad22b7e435a1a48afc43cf1a106c split_config.en.apk
68c09b63a1262e0d34020c139bc77deff3c32bd2b01177abac64790a62fb3be6 split_config.xxhdpi.apk
cd746820c27babd855fa5daea6fabcdf7b44abf3060bc547adc4219212410af0 split_CronetDynamite_installtime.apk
512ee48b60fdb0787a17f84a7dc448fdbf885b2b86a9cb50525d4c22d561b0f1 split_DynamiteLoader_installtime.apk
9e0c74bdc75c50c80d4e2e580a7eda6b8391423ab1161645f41ec6cadc07d678 split_DynamiteModulesA_installtime.apk
955780ac01f59b98bd9be12968f3824ad71b762620f7bf223c569c1a6ab7056c split_DynamiteModulesC_installtime.apk
34c4a2e32d31554d55fc1519e2cfc3ed5027a090fb29b54cfc99f42d1da43bc5 split_GoogleCertificates_installtime.apk
475e18dde92472cde9d8300c082b6dc269613db03398bcd9d1987dff3e68f7b5 split_maps_core_dynamite_ondemand.apk
f83faf40f08bc13f4879302e01c08c863ca2304b4b4e7c9eaf8cd1e869bb6573 split_MapsDynamite_installtime.apk
ec6d854ddda6cd1ba2ba7af2d9fdf4f28c5c78be8713c64521c785429296738c split_MeasurementDynamite_installtime.apk
Sekarang Anda memiliki semua informasi yang diperlukan untuk membuat payload log, yang diformat seperti yang dijelaskan di bagian Konten Log. Dengan memilih satu hash dari hasil sebagai contoh (Anda harus memverifikasi hash setiap APK pecahan), payload log akan terlihat seperti ini:
66aa2d7b9752cdd61065b55c8e16739d8367fa18a0f1c8c84122369f86958f1a
SHA256(APK)
com.google.android.gms
260834035
Pastikan Anda menyertakan karakter newline di akhir file. Simpan konten ini ke file, seperti payload.txt, untuk digunakan dengan alat verifier nanti.
Memverifikasi Penyertaan Paket (Bukti Penyertaan)
Setelah membuat payload, Anda kini dapat memeriksa apakah paket disertakan dalam log transparansi. Build alat bukti penyertaan dari repositori android-binary-transparency yang Anda clone sebelumnya:
go build cmd/verifier/verifier.go
Tindakan ini akan menghasilkan file yang dapat dieksekusi bernama verifier di direktori tersebut.
Jalankan pemverifikasi, berikan jalur ke payload Anda, dan tentukan jenis log:
computer:android-binary-transparency$ PAYLOAD_PATH=PATH_TO_PAYLOAD_DIR/payload.txt
computer:android-binary-transparency$ ./verifier --payload_path=${PAYLOAD_PATH} --log_type=google_1p_apk
Pemverifikasi menggunakan checkpoint dan konten log (dari direktori ubin) untuk memeriksa apakah payload APK Anda ada dalam log transparansi, yang mengonfirmasi bahwa payload tersebut dipublikasikan oleh Google.
Output perintah ke stderr:
OK. inclusion check success!jika paket disertakan dalam log.FAILUREjika tidak.
Memverifikasi Semua Paket di Perangkat Secara Otomatis
Mengingat jumlah aplikasi Google yang mungkin telah diinstal di perangkat Anda, menghitung setiap aplikasi dan melakukan bukti penyertaan satu per satu dapat menjadi tugas yang membosankan.
Kami menyediakan alat otomatis lain yang disebut Uraniborg yang dapat mendeteksi dan mengukur semua paket yang saat ini diinstal di perangkat Anda.
Alat ini memasukkan outputnya langsung ke alat verifier, sehingga Anda dapat menemukan dan memverifikasi transparansi semua aplikasi di perangkat Anda dalam satu langkah.
Untuk menggunakan alur kerja otomatis ini, pastikan perangkat Android Anda terhubung ke komputer Anda melalui ADB. Kode sumber Uraniborg juga disertakan dalam repositori android-binary-transparency.
Jalankan skrip automate_observation.py yang terletak di direktori scripts/python:
python3 automate_observation.py --pull-all-apks --perform_inclusion_proof_check --verifier_path <path_to_verifier_executable>
Setelah skrip selesai, Anda akan melihat output yang mirip dengan ini:
INFO:automate_observation.py:main(858): SUCCESS! Hubble was successfully deployed and executed on connected device ABCDEFGHN01234.
INFO:automate_observation.py:main(860): Hubble output files can be found at: /Users/user/home/src/android-binary-transparency/uraniborg/scripts/python/results/google/lynx/lynx:16/BP4A.260105.004.E1/14587043:user/release-keys/001
Buka direktori output yang ditunjukkan oleh skrip.
Di dalamnya, temukan file bernama packages_with_inclusion_proof_signal.txt.
File ini mencantumkan setiap paket yang diinstal bersama dengan kolom inclusion_proof_verified yang ditetapkan ke true atau false.
Nilai true menunjukkan bahwa paket telah diverifikasi secara kriptografi terhadap log transparansi, yang mengonfirmasi bahwa paket tersebut mematuhi klaim log.