Saya akan memberikan gambaran umum tentang bagaimana dm-verity dan hal-hal terkait berfungsi di Android menurut pengetahuan saya yang terbatas. Situasi mungkin berbeda pada perangkat dan ROM yang berbeda.
BAGAIMANA DM-VERITY DILAKUKAN?
dm-verity (Boot Terverifikasi dan AVB) serta dm-crypt (FDE) adalah target dari device-mapper fitur kernel Linux. dm-verity memverifikasi integritas setiap blok saat dibaca dari perangkat blok; ditegakkan oleh init_first_stage sesuai fs_mgr_flags diatur dalam fstab . Pada perangkat sistem sebagai root (A/B dan non-A/B ), kernel ditambal untuk memaksakan kebenaran saat memasang /system dan /vendor jika verify /avb flag ditemukan di pohon perangkat fstab (dtb).
dm-crypt mendekripsi/mengenkripsi data secara transparan saat dibaca/ditulis dari/untuk memblokir perangkat. FBE didasarkan pada kerangka kernel yang berbeda fscrypt; namun keduanya dikelola oleh vold (yang berjalan sebagai layanan asli) if fs_mgr_flags berisi voldmanaged .
DIMANA FSTAB?
fstab secara tradisional menjadi file di Linux untuk menentukan sistem file yang akan dipasang saat boot. Ini adalah komponen inti dari fs_mgr fungsionalitas di Android.
Pada rilis pra-Oreo fstab berada di ramdisk . Dengan Treble dipindahkan ke /vendor (atau /system/vendor ) sedangkan entri fstab untuk system dan vendor (dan odm ) dipindahkan ke Device Tree Blob (dtb ). Kernel mengekspor dtb fstab entri dalam direktori pohon perangkat di /proc/device-tree/firmware/android .
Beberapa OEM juga memasukkan fstab di odm atau nvdata partisi.
Sumber: Konfigurasi Perangkat Penyimpanan Android
DI MANA DTB ADA?
Device Tree adalah struktur data untuk mendeskripsikan perangkat keras yang tidak dapat ditemukan oleh kernel. Sumber Pohon Perangkat (dts ) dapat dikonversi menjadi dtb (gumpalan biner DT) dan sebaliknya menggunakan dtc . DTB dimuat oleh bootloader saat boot dan diteruskan ke kernel sehingga dapat menemukan perangkat keras dan membuat node perangkat yang sesuai.
DTB adalah:
- Ditambahkan ke kernel
zImageatauImage.gzdiboot.img. Itu dapat dipisahkan darigziparsipkan menggunakansplit-appended-dtb (sadtb). -
Atau di
dtbopartisi seperti yang dilakukan beberapa OEM. Ini dapat diperiksa dengan:~# ls -l /dev/block/bootdevice/by-name/dtbo* ~# grep -C5 PARTNAME=dtbo /sys/dev/block/*/uevent | grep DEVNAME | sed 's/.*=//; s|^|/dev/block/&|' - Atau di akhir
boot.imgsetelah tahap ke-2, atau diodmpartisi (jarang, beberapa OEM melakukannya).
Juga jika perangkatnya adalah non-A/B , dtb (dari boot.img dan/atau dtbo partisi) juga ditambahkan ke recovery.img di bagian DTBO setelah header, kernel, ramdisk dan 2nd stage . Namun ini tidak masalah untuk boot normal. Tetapi jika perangkatnya juga system-as-root , Magisk perlu diinstal di partisi pemulihan ini sebagai boot.img tidak mengandung ramdisk .
Jika DTB tidak ditambahkan ke kernel, dtb(s) dikonversi menjadi dtb.img menggunakan mkdtimg . Alat yang sama dapat mengembalikan gambar.
Sumber: Menerapkan DTO
CARA MENONAKTIFKAN DM-VERITY?
Di userdebug ROM, dm-verity dapat dinonaktifkan menggunakan adb . Itu memodifikasi angka ajaib dari blok metadata kebenaran yang ditulis setelah blok sistem file terakhir pada perangkat blok (system atau vendor ) . Dikutip dari sini:
tidak adanya nomor ajaib ini akan menghentikan proses verifikasi
Dalam hal AVB, adb memodifikasi vbmeta header untuk menonaktifkan verifikasi gambar hashtree . Dikutip dari sini:
jika
AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLEDflag diatur di vbmeta tingkat atas, laluandroidboot.veritymodedisetel ke nonaktif
Di user membangun ro.debuggable adalah 0 dan adbd tidak berjalan sebagai root. Juga ada perbedaan lain seperti ALLOW_ADBD_DISABLE_VERITY , jadi adb tidak akan menonaktifkan dm-verity . Pendekatan lainnya adalah menghapus verify atau avb bendera dari fstab . Dikutip dari sini:
Untuk memverifikasi partisi...
...
Di fstab untuk entri yang relevan, tambahkanverifykefs_mgrbendera.
Demikian pula untuk menghapus enkripsi, forceencrypt= , forcefdeorfbe= atau fileencryption= perlu diganti dengan encryptable= . Namun enkripsi tidak dapat dihapus tanpa pengaturan ulang pabrik (FBE juga?), jadi hapus centang Preserve force encryption di aplikasi Magisk tidak akan melakukan apa pun.
Beberapa OEM juga menggunakan support_scfs fs_mgr bendera dan ro.config.dmverity=true properti pada perangkat dengan dm-verity diaktifkan.
Ada juga beberapa exploit yang ditemukan di bootloader dan implementasi adb dari beberapa OEM yang dapat digunakan untuk menonaktifkan dm-verity pada perangkat yang terpengaruh. Namun kelemahan keamanan seperti itu biasanya diperbaiki dari waktu ke waktu dengan pembaruan dari OEM.
OPSI 1
Tetapkan opsi dalam file konfigurasi sebelum menginstal Magisk:
~# echo 'KEEPVERITY=false' >/cache/.magisk
~# echo 'KEEPFORCEENCRYPT=true' >>/cache/.magisk
Jika terpasang, setelah hapus centang Preserve AVB v2.0/dm-verity di aplikasi, Magisk perlu diinstal ulang. Dikutip dari sini:
di Magisk Manager, “Uninstall> Restore Images” untuk memulihkan gambar, centang kotak “Preserve AVB 2.0/dm-verity” di Advanced Settings, lalu instal ulang Magisk melalui aplikasi.
OPSI 2
Gunakan beberapa dm-verity zip penonaktifan seperti ini.
OPSI 3
Cari tahu di mana fstab entri /system dan /vendor ada di perangkat Anda.
Jika di ramdisk (pra-Treble):
- Ekstrak
ramdisk, ubahfstabdan mengemas ulang. -
Atau tambal
ramdisklangsung:~# magiskboot cpio ramdisk.cpio 'patch false true'
Jika di dtb :
- Jika ditambahkan ke kernel:
- Ekstrak
boot.img - Split menambahkan
dtb(s) - Patch
dtb(s). - Tambahkan
dtb(s)ke kernel - Kemas ulang
boot.img
- Ekstrak
- Jika di
dtbopartisi atau diboot.imgsetelah tahap ke-2, tambaldtb.imgdan tulis kembali ke partisi atauboot.img.
Bagaimana cara Unpack / Repack Boot atau Recovery image dan Ramdisk?
Gunakan AIK atau magiskboot .
Cara Menambal dtb ?
Patch langsung menggunakan magiskboot atau konversikan dtb secara manual ke dts , edit dts dengan editor teks apa pun untuk menghapus dm-verity bendera, dan konversikan dts kembali ke dtb .
TERKAIT:
- Bagaimana Magisk bekerja?
- Partisi dan Sistem File Perangkat Android