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
zImage
atauImage.gz
diboot.img
. Itu dapat dipisahkan darigzip
arsipkan menggunakansplit-appended-dtb (sadtb)
. -
Atau di
dtbo
partisi 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.img
setelah tahap ke-2, atau diodm
partisi (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_DISABLED
flag diatur di vbmeta tingkat atas, laluandroidboot.veritymode
disetel 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, tambahkanverify
kefs_mgr
bendera.
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
, ubahfstab
dan mengemas ulang. -
Atau tambal
ramdisk
langsung:~# 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
dtbo
partisi atau diboot.img
setelah tahap ke-2, tambaldtb.img
dan 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