Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

ブートローダーのロックとロック解除

ほとんどの Android デバイスはデフォルトで、ブートローダーがロックされた状態で出荷されるため、ユーザーはブートローダーまたはデバイス パーティションをフラッシュできません。必要に応じて、(開発者向けオプションを有効にしているデバイス ユーザーは)ブートローダーをロック解除して、新しいイメージをフラッシュできます。

ブートローダーのロック解除

ブートローダーをロック解除してパーティションの再フラッシュを有効にするには、デバイスで fastboot flashing unlock コマンドを実行します。設定すると、再起動を行ってもロック解除モードが維持されます。

get_unlock_ability1 に設定されている場合を除き、デバイスは fastboot flashing unlock コマンドを拒否する必要があります。0 に設定されている場合、ユーザーはホーム画面に移動し、[設定] > [システム] > [開発者向けオプション] メニューを開き、[OEM ロック解除] オプションを有効にする必要があります(これにより unlock_ability1 に設定されます)。設定すると、再起動やデータの初期化を行ってもモードが維持されます。

fastboot flashing unlock コマンドが送信されると、デバイスではユーザーに対して、非公式のイメージによる問題が発生する可能性があるという警告が表示されます。ユーザーが警告を確認した後、デバイスはデータの初期化を行って不正なデータアクセスを防ぐ必要があります。ブートローダーは、デバイスを正しく再フォーマットできない場合でも、デバイスをリセットする必要があります。永続フラグを設定できるのはリセット後のみであるため、デバイスの再フラッシュが可能になります。

まだ上書きされていない RAM はすべて fastboot flashing unlock プロセスでリセットする必要があります。これにより、以前の起動から残りの RAM の内容を読み取る攻撃を防止できます。同様に、ロック解除されたデバイスでは、許容できない遅延が生じる場合を除き、毎回起動時に RAM を消去する必要があります。ただし、カーネルの ramoops に使用する領域は残す必要があります。

ブートローダーのロック

ブートローダーをロックしてデバイスをリセットするには、デバイスで fastboot flashing lock コマンドを実行します。販売用のデバイスは、攻撃者が新しいシステムやブートイメージをインストールすることでデバイスを侵害できないようにするために、ロック状態(get_unlock_ability0 を返す)で出荷する必要があります。

ロックとロック解除のプロパティの設定

ro.oem_unlock_supported プロパティは、デバイスがロック解除のフラッシュに対応するかどうかに基づいてビルド時に設定する必要があります。

  • デバイスがロック解除のフラッシュに対応する場合は、ro.oem_unlock_supported1 に設定します。
  • デバイスがロック解除のフラッシュに対応しない場合は、ro.oem_unlock_supported0 に設定します。

デバイスがロック解除のフラッシュに対応している場合、ブートローダーはロック状態を表す必要があります。そのため、カーネル コマンドライン変数 androidboot.flash.locked が、ロックされている場合は 1、ロック解除されている場合は 0 に設定されます。

dm-verity に対応しているデバイスの場合、ro.boot.verifiedbootstate を使用して ro.boot.flash.locked の値を 0 に設定します。これにより、確認付きブートの状態がオレンジであれば、ブートローダーがロック解除されます。

クリティカル セクションの保護

デバイスは、クリティカル セクション(デバイスをブートローダーにブートするために必要なものとして定義)のロックとロック解除に対応している必要があります。このようなセクションとしては、ヒューズ、センサーハブの仮想パーティション、第 1 ステージのブートローダーなどが挙げられます。クリティカル セクションをロックするには、デバイスで実行されているコード(カーネル、リカバリ イメージ、OTA コードなど)がクリティカル セクションを意図的に変更できないようにするメカニズムを使用する必要があります。デバイスがロック クリティカル状態の場合、OTA はクリティカル セクションのアップデートに失敗します。

ロック状態からロック解除状態に移行するには、デバイスを物理的に操作する必要があります。この操作は、fastboot flashing unlock コマンドを実行した場合と似ていますが、ユーザーがデバイスの物理ボタンを押す必要があります。デバイスは、物理的な操作なしでプログラムによって lock critical から unlock critical に移行できないようにする必要があります。また、デバイスは出荷時に unlock critical 状態である必要があります。