GNU/Linux >> Belajar Linux >  >> Linux

Android - Bagaimana cara menonaktifkan dm-verity di Android dengan ROM tipe build pengguna?

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 atau Image.gz di boot.img . Itu dapat dipisahkan dari gzip arsipkan menggunakan split-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 di odm 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, lalu androidboot.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, tambahkan verify ke fs_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 , ubah fstab 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
  • Jika di dtbo partisi atau di boot.img setelah tahap ke-2, tambal dtb.img dan tulis kembali ke partisi atau boot.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

Linux
  1. Cara Menonaktifkan Login Pengguna Root melalui SSH

  2. Bagaimana Cara Membuat Pengguna Baru Dengan Akses Ssh?

  3. Android - Bagaimana cara agar perangkat saya terdeteksi oleh ADB di Linux?

  1. Cara Memblokir atau Menonaktifkan Login Pengguna Normal di Linux

  2. Cara mengenkripsi partisi dengan DM-Crypt LUKS di Linux

  3. Cara menginstal Nextcloud dengan ISPConfig 3.1

  1. Cara Mengubah, Menghapus, atau Menonaktifkan Kata Sandi Pengguna di Linux

  2. Bagaimana mengelola pengguna dengan useradd di linux

  3. Cara menonaktifkan pendaftaran pengguna di Joomla