見出し画像

androidは起動時どこまでcheckしてる?

題目を見てなんの話か分からないと思いますが今回は完全な自分の備忘録です。
androidは起動時avb2.0のcheckを行っています。
ChatGPTに聞いてみました。

Android AVB 2.0 (Android Verified Boot 2.0) は、Android 8.0 (Oreo) から導入された セキュアブートフレームワーク です。目的は、OS 起動時にブートローダーがシステムパーティションを含む全パーティションの 改ざん検証 を行い、信頼できる状態(Verified Boot)でのみ端末を起動させることです。

AVB 2.0 の仕組み

1.ブートローダー段階での署名検証

  • ブートローダーは vbmeta パーティションを読み込みます。

  • vbmeta には各パーティションの署名とハッシュが格納されています。

  • 公開鍵で検証し、改ざんがあれば警告または起動拒否。

2.vbmeta パーティション

  • AVB の中核。パーティションごとの 認証情報 (hash/tree/descriptor) を保持。

  • 例: vbmeta.img、vbmeta_system.img、vbmeta_vendor.img など複数存在する場合もある。

3.dm-verity と連携

  • 大きなパーティション(system/vendor など)はハッシュツリーを使って ランタイム改ざん検出 を行う。

4.Rollback Protection(ロールバック保護)

  • 古いバージョンの OS に戻して脆弱性を突かれるのを防ぐために、ブートローダーと eFuse/Replay Protected Memory Block (RPMB) で バージョンカウンタ を保持。

5.主な要素

  • vbmeta.img
    → AVB のルートメタデータ。署名付き。

  • avbtool
    → Google が提供する AVB 2.0 用ツール。vbmeta.img の生成や署名に使用。

  • AVB Keys
    → 署名用の鍵ペア(通常は OEM が管理)。

6.よくある操作

署名なしで vbmeta を生成(検証無効化)

avbtool make_vbmeta_image \
  --output vbmeta.img \
  --disable_verification \
  --disable_verity

署名付き vbmeta を生成

avbtool make_vbmeta_image \
  --output vbmeta.img \
  --key testkey.pem \
  --algorithm SHA256_RSA2048 \
  --include_descriptors_from_image system.img \
  --include_descriptors_from_image vendor.img

7.注意点

  • AVB 2.0 が有効な端末で 不正な vbmeta.img を焼くと 起動不可 (bootloop / Red state) になる。

  • Unlock Bootloader 状態では警告表示 (Orange state) が出る。

  • 完全無効化はできず、「鍵を変える」か「署名なし vbmeta」を使うことで検証回避する。

8.AVB 2.0 のモード(State)

8-1.Green State ✅

  • 説明: 公式署名付きイメージが焼かれていて、検証が成功した状態。

  • 特徴:

    • 正常に起動

    • ブートローダーに警告なし

    • dm-verity 有効

8-2.Yellow State ⚠️

  • 説明: ブートローダーはアンロック済みだが、署名は正しい状態。

  • 特徴:

    • 起動可能

    • ブートローダーに「カスタムOSブート可能」警告

    • dm-verity 有効(通常)

8-3.Orange State 🟠

  • 説明: ブートローダーがアンロックされており、署名も確認できるが、ユーザーによる改造が可能な状態。

  • 特徴:

    • カスタムROMや root 可

    • dm-verity は警告表示

    • 多くの Lenovo / Pixel 端末で「この端末は保護されていません」表示

8-4.Red State ❌

  • 説明: AVB 署名検証に失敗した状態(改ざん、署名なし vbmeta など)。

  • 特徴:

    • 起動不可(bootloop)になることが多い

    • 強制的に修復イメージを焼く必要あり

    • eFuse / RPMB でロールバック防止が働く場合も

ChatGPTはなんでも答えてくれる。

Legion Y700(Gen 2)のvbmetaを確認

git clone https://android.googlesource.com/platform/external/avb
wsl ~/avb/avbtool.py info_image --image vbmeta_system.img > vbmeta_system.txt
wsl ~/avb/avbtool.py info_image --image vbmeta.img > vbmeta.txt
pause


vbmeta.imgが管理しているpartition

recovery
vbmeta_system
boot
dtbo
vendor_boot
odm(dm-verity)
vendor(dm-verity)
vendor_dlkm(dm-verity)

vbmeta_system.imgが管理しているpartition

product(dm-verity)
system(dm-verity)
system_ext(dm-verity)

要するにこのpartitionはグループ化されている。
※vbmeta自身も含む。

ではそれ以外では別のversionでも起動するかtestしました。
bootloaderはlocked

上記のgroupは
TB320FC_ZUX_OS_1.1.402
それ以外は
TB320FC_ZUX_OS_1.1.350

※差し替え時はrawprogram_unsparse0.xml、super_1.imgも差し替えます。

test結果は無事起動しました。
ただ勘違いしてはいけないのは起動=正常ではありません。
システム的にavb2.0のcheckをクリアしただけです。

こういうネタは今は使わなくてももしかしたら今後役立つ可能性は0ではないので。



いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
androidは起動時どこまでcheckしてる?|limzei89
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1