「セキュアブート」とは、ROM上のソフトウェアが端末ベンダー(もしくは利用者)の意図したソフトウェアと同一であるかを確認するために、ソフトウェアを実行する前に、暗号技術を使ってソフトウェアの改ざんを検出する技術のことである。
より具体的に説明すると、セキュアブートでは、改ざんすることが物理的に難しいハードウェアなどの「信頼の基点(Root of Trust)」を開始点として、次に起動するソフトウェアを“正しさが検証されたソフトウェア”に限定することにより、「信頼の連鎖(Chain of Trust)」を形成していく。そして、システム全体を端末ベンダー(もしくは利用者)が意図した状態で起動させる。Android端末が搭載するプロセッサを設計しているARMは、セキュアブートの構成や運用の指針を開発者向けガイドに示しており、次のような準備と起動の手順を推奨している(図3、関連リンク)。
セキュアブートは、端末ベンダーの意図したシステムを起動するためのものであるが、ハードウェアのサポートが必要であるため、実質的にはQualcommやSamsungなどのプロセッサベンダーがそれぞれのセキュアブート仕様を設計している。詳細な仕様は公開されていないが、各ベンダーのカタログスペックにはチップのセキュリティ機能としてセキュアブートの記載がある。
このセキュアブートを、Android起動時にuserdata.imgを除く3つのイメージ(bootloader.img、boot.img、system.img)に適用することで、システム領域が改ざんされていないことを検出できる(図4)。userdata.imgは先に説明した通りユーザーによって追加されたデータなどが格納される場所であり、頻繁に更新されることや、システムに比べて重要性の低いデータが格納されることなどの理由から、セキュアブートの対象外とするのが一般的である。
ところが、前述のセキュアブート対象とすべき3つのイメージのうち、system.imgについてはほとんどの端末でセキュアブートされていないのが実情である。これには2つの理由がある。1つ目は、イメージサイズが大きい(boot.imgの約100倍、数ギガバイトになる場合もある)ために、セキュアブート方式で検証しようとすると、メモリリソースが大きく消費され、起動が著しく遅くなってしまうこと。そして2つ目が、小規模更新パッチであるOTA(Over The Air)アップデートがファイルレベルで行われるために、更新後のsystem.imgがビットレベルでの同一性を保持できず(ファイルの内容は同じでもメタデータなどが異なってしまう場合がある)、完全な同一性が求められるセキュアブートが実施できなくなってしまうことである。
Copyright © ITmedia, Inc. All Rights Reserved.