GNU/Linux >> Linux の 問題 >  >> Linux

Android - ユーザー ビルド タイプの ROM を使用する Android で dm-verity を無効にする方法は?

dm-verity の概要を説明します。 私の限られた知識によると、関連するものはAndroidで動作します。デバイスや ROM によって状況が異なる場合があります。

DM-VERITY はどのように適用されますか?

dm-verity (検証済みのブートと AVB) および dm-crypt (FDE) は device-mapper のターゲットです Linux カーネルの機能。 dm-verity ブロックデバイスから読み取られる各ブロックの整合性を検証します。 init_first_stage により施行 fs_mgr_flags のとおり fstab で設定します。 system-as-root デバイス (A/Bnon-A/B )、/system のマウント中に verity を強制するようにカーネルにパッチが適用されます および /vendor verify の場合 /avb フラグは fstab デバイス ツリー (dtb) にあります。
dm-crypt ブロックデバイスから/への読み取り/書き込み時にデータを透過的に復号化/暗号化します。 FBE は別のカーネル フレームワーク fscrypt に基づいています;しかし、どちらも vold によって管理されています (ネイティブ サービスとして実行) if fs_mgr_flags voldmanaged を含む .

FSTAB はどこにありますか?

fstab は伝統的に、起動時にマウントされるファイルシステムを指定するための Linux 上のファイルでした。 fs_mgr のコア コンポーネントです。 Android の機能。

Pre Oreo リリース fstab ramdisk にありました . Treble では /vendor に移動しました (または /system/vendor ) system の fstab エントリ と vendor (そして odm ) はデバイス ツリー Blob (dtb) に移動されます )。カーネルは dtb fstab をエクスポートします /proc/device-tree/firmware/android のデバイス ツリー ディレクトリのエントリ .

一部の OEM は fstab も入れています odm で または nvdata

ソース: Android ストレージ デバイスの構成

DTB はどこにありますか?

デバイス ツリーは、カーネルが検出できないハードウェアを記述するためのデータ構造です。デバイス ツリー ソース (dts ) dtb に変換できます (DT のバイナリ blob) と dtc を使用してその逆 . DTB は、ブート時にブートローダーによって読み込まれ、カーネルに渡されます。これにより、ハードウェアが検出され、それに応じてデバイス ノードが作成されます。

DTB は次のいずれかです:

  • カーネル zImage に追加 または Image.gz boot.img で . gzip から分割できます split-appended-dtb (sadtb) を使用してアーカイブする .
  • または dtbo で 一部の OEM と同じようにパーティション分割します。これは以下で確認できます:

    ~# ls -l /dev/block/bootdevice/by-name/dtbo*
    ~# grep -C5 PARTNAME=dtbo /sys/dev/block/*/uevent | grep DEVNAME | sed 's/.*=//; s|^|/dev/block/&|'
    
  • または boot.img の末尾 第 2 段階の後、または odm で パーティション (まれですが、一部の OEM ではそうです)。

また、デバイスが non-A/B の場合 、 dtb (boot.img より) および/または dtbo partition) も recovery.img に追加されます ヘッダー、カーネル、RAM ディスク、および第 2 段階の後の DTBO セクション。ただし、これは通常の起動には関係ありません。ただし、デバイスも system-as-root の場合 、Magisk を boot.img としてこのリカバリ パーティションにインストールする必要があります ramdisk を含まない .

DTB がカーネルに追加されていない場合、dtb(s) dtb.img に変換されます mkdtimg を使用 .同じツールで画像をダンプできます。

ソース: DTO の実装

DM-VERITY を無効にする方法

userdebug で ROM、dm-verity adb を使用して無効にすることができます .ブロックデバイス上の最後のファイルシステムブロックの後に書き込まれる verity メタデータブロックのマジックナンバー (system) を変更します。 または vendor )。ここから引用:

<ブロック引用>

このマジック ナンバーがないと、検証プロセスが停止します

AVBの場合、adb vbmeta header を変更します ハッシュツリー イメージの検証を無効にします。ここから引用:

<ブロック引用>

AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED の場合 最上位の vbmeta でフラグが設定されている場合、androidboot.veritymode 無効に設定されています

userro.debuggable をビルドします 0 です と adbd ルートとして実行されていません。 ALLOW_ADBD_DISABLE_VERITY のような他の違いもあります 、だから adb dm-verity を無効にしません .他のアプローチは verify を削除することです または avb fstab からのフラグ .ここから引用:

<ブロック引用>

パーティションを確認するには...
...
関連するエントリの fstab で、verify を追加します。 fs_mgr

同様に暗号化を解除するには forceencrypt=forcefdeorfbe= または fileencryption= encryptable= に置き換える必要があります .ただし、暗号化は出荷時設定にリセットしないと削除できないため (FBE も?)、Preserve force encryption のチェックを外します。 Magis アプリでは何もしません。

一部の OEM は support_scfs も使用しています fs_mgr フラグと ro.config.dmverity=true dm-verity を持つデバイスのプロパティ

dm-verity を無効にするために使用できる、一部の OEM のブートローダーおよび adb 実装で発見されたエクスプロイトもいくつかあります。 影響を受けるデバイスで。ただし、このようなセキュリティ上の欠陥は通常、OEM からの更新によって時間の経過とともに修正されます。

オプション 1
Magisk をインストールする前に、構成ファイルでオプションを設定します。

~# echo 'KEEPVERITY=false' >/cache/.magisk
~# echo 'KEEPFORCEENCRYPT=true' >>/cache/.magisk

インストールされている場合、Preserve AVB v2.0/dm-verity のチェックを外した後 アプリでは、Magisk を再インストールする必要があります。ここから引用:

<ブロック引用>

Magisk Manager で、「Uninstall> Restore Images」でイメージを復元し、Advanced Settings で「Preserve AVB 2.0/dm-verity」ボックスをオンにしてから、アプリ経由で Magisk を再インストールします。

オプション 2
いくつかの dm-verity を使用してください 無効化はこのように圧縮されます。

オプション 3
fstab の場所を特定します /system のエントリ と /vendor

ramdisk の場合 (プレトレブル):

  • ramdisk を抽出 、 fstab を変更します そして再梱包。
  • または ramdisk にパッチを当てる 直接:

    ~# magiskboot cpio ramdisk.cpio 'patch false true'
    

dtb の場合 :

  • カーネルに追加する場合:
    • boot.img を抽出
    • 追加された dtb(s) を分割
    • パッチ dtb(s) .
    • dtb(s) を追加 カーネルへ
    • リパック boot.img
  • dtbo の場合 パーティションまたは boot.img 第 2 段階の後、dtb.img にパッチを当てます パーティションまたは boot.img に書き戻します .

ブートまたはリカバリ イメージと RAM ディスクを解凍/再パックする方法
AIK または magiskboot を使用 .

dtb にパッチを当てる方法 ?
magiskboot を使用して直接パッチを当てる または手動で dtb を変換します dts へ 、編集 dts dm-verity を削除する任意のテキスト エディターで フラグ、および変換 dts dtb に戻る .

関連:

  • Magisk の仕組み
  • Android デバイスのパーティションとファイル システム

Linux
  1. LinuxでDM-CryptLUKSを使用してパーティションを暗号化する方法

  2. ISPConfig3.1でNextcloudをインストールする方法

  3. Sshアクセスで新しいユーザーを作成する方法は?

  1. Linuxでホームディレクトリのユーザーアカウントを削除する方法

  2. Linuxで通常のユーザーログインをブロックまたは無効にする方法

  3. Linux で特定のユーザーに対して特定のコマンドを無効にする方法

  1. Linuxでユーザーパスワードを変更、削除、または無効にする方法

  2. Linuxのグループにユーザーを追加する方法(例を含む)

  3. Linuxでuseraddを使用してユーザーを管理する方法