4.2. BIOS とブートローダのセキュリティ

BIOS(または、BIOSに相当するもの)及びブートローダのパスワード保護で、 システムに物理的にアクセスできる許可のないユーザーが、 リムーバブルメディアを使用してブートしたり、 シングルユーザーモードからrootを取得してブートするのを防ぐことができます。 ただし、セキュリティは、ワークステーションが保持する情報の機密度や マシンの設置場所の両方によって、 このような攻撃に対して防護するためのものを採用します。

例えば、マシンがトレードショーで使用されるため機密情報が保存されていない場合は、 このような攻撃を防止することは極めて重要なことにはならないかもしれません。 しかし、会社のネットワークに対してプライベートで 暗号化されていないSSHキーを 持っている雇用者のノートブック型PCを、そのトレードショーで置きっぱなしにした場合、 会社全体のあらゆる部署に大きなセキュリティ侵害を招く可能性があります。

一方、許可のある人や信頼できる人しかアクセスできない場所にワークステーションが 配置されている場合、BIOSやボートローダにセキュリティを施行する必要はまったく ないかもしれません。

4.2.1. BIOS パスワード

以下に、コンピュータのBIOSを保護するパスワードに関する2つの主な理由を示します [1]

  1. BIOS設定への変更を防止する — 侵入者がBIOSにアクセスした場合、ディスケットやCD-ROMをブートオフに設定することが できます。これにより、侵入者はレスキューモードないしはシングルユーザーモードで 入り込むことが可能になり、そしてシステムに不正なプログラムを埋めこんだり、 機密データをコピーすることができるようになってしまいます。

  2. システムのブートを防止する — BIOSのなかには、ブートプロセスのパスワード保護ができるものがあります。 起動すると、攻撃者はBIOSがブートローダを起動する前にパスワードの入力を強制されます。

BIOSパスワードの設定方法についてはコンピュータのメーカーにより異なるため、 特定の説明についてはコンピュータのマニュアルを参照してください。

BIOSパスワードを忘れてしまった場合、マザーボード上のジャンパでリセットするか、 CMOSバッテリを取り外すことができます。このため、できればコンピュータケースを ロックするようにした方がよいでしょう。ただし、この手順を試す前に、 コンピュータまたはマザーボードのマニュアルを参照してください。

4.2.1.1. x86 以外のプラットフォームにセキュリティを施行する

他のアーキテクチャは異なるプログラムを使って、 x86システムのBIOSにほぼ値する低レベルのタスクを実行します。 例えば、Intel® Itanium™のコンピュータはEFI (Extensible Firmware Interface)シェルを使用します。

他のアーキテクチャのBIOSに相当するプログラムのパスワード保護については、 メーカーの説明書を参照してください。

4.2.2. ブートローダのパスワード

以下に、Linuxブートローダを保護するパスワードの主な理由を示します。

  1. シングルユーザーモードヘのアクセスを防止する— 攻撃者がシングルユーザーモードでブートできる場合、 ルートユーザーになります。

  2. GRUBコンソールヘのアクセスを防止する — マシンがGRUBをそのブートローダとして使用する場合、攻撃者はGRUBエディタ インターフェースを使用してその設定を変更したり、catコマンド を使って情報を収集することができます。

  3. セキュアでないオペレーティングシステムへのアクセスを防止する — デュアルブートシステムである場合、 攻撃者はブート時にアクセス制御やファイルパーミッションを無視するDOSなどの オペレーティングシステムを選択することができます。

x86プラットフォーム用にRed Hat Enterprise Linuxで配付されるブートローダは、 GRUBとLILOの2つがあります。これらブートローダの詳細比較については、 Red Hat Enterprise Linux リファレンスガイドにあるブートローダの章を 参照してください。

4.2.2.1. GRUBを保護するパスワード

GRUBは、その設定ファイルにパスワードディレクティブを追加すると、 項4.2.2に記載されている最初の2点に対処します。 これを行なうには、まずパスワードを決め、シェルプロンプトを開きます。 rootとしてログインして次のように入力します。

/sbin/grub-md5-crypt

パスワードを要求されたら、GRUBパスワードを入力して[エンター] を押します。パスワードのMD5ハッシュを返してきます。

次に、GRUBの設定ファイル/boot/grub/grub.confを 編集します。ファイルを開き、ドキュメントのメインセクションにある timeout行の下に次の行を追加します。

password --md5 <password-hash>

<password-hash>には、 /sbin/grub-md5-cryptで返された値を入れます。 [2]

次回システムが起動すると、GRUBメニューは、最初に[p]と その後にGRUBパスワードを押さないと、エディタやコマンドインターフェース へのアクセスを許可しなくなります。

残念ながら、このソリューションでは、デュアルブート環境でのセキュアではない オペレーティングシステムへ攻撃者がブートするのは防止しません。 このため、/boot/grub/grub.confファイルの別の部分を 編集する必要があります。

セキュアではないオペレーティングシステムのtitle 行を探して、その下に直接lockという行を追加します。

DOSシステムなら、節は次のように始まります。

title DOS
lock

警告警告
 

この方法が正常に機能するためには、password行が /boot/grub/grub.confファイルのメインセクションに 表示されていなければなりません。これがないと、攻撃者はGRUBエディタインターフェース にアクセスして lock 行を削除できることになります。

特定のカーネルまたはオペレーティングシステム用に別のパスワードを作成するには、 その節にlock行とパスワード行を後に付けて追加します。

固有のパスワードで保護された各節は、以下の例のような始まりになります。

title DOS
lock
password --md5 <password-hash>

4.2.2.2. LILOを保護するパスワード

LILOはGRUBよりずっとシンプルで、コマンドインターフェースがありません。 このため、攻撃者はカーネルがロードされる前に、システムへインテラクティブに アクセスすることができません。 しかしながら、攻撃者にとってシングルユーザーモードでのブートや セキュアではないオペレーティングシステムへのブートはまだ可能です。

LILOを保護するパスワードは、その設定ファイルのグローバルセクションに パスワードディレクティブを追加して行なうことができます。 これを行なう手順は、シェルプロンプトを開き、rootとしてログインします。 /etc/lilo.confを編集します。 最初のimage節の前に、 以下の例のようなパスワードディレクティブを追加します。

password=<password>

上記のディレクティブで、<password>には LILOのパスワードを入れます。

誓要項目重要
 

/etc/lilo.confを編集する際、変更を反映するために /sbin/lilo -v -vコマンドを実行する必要があります。 パスワードが設定されroot以外の人がこのファイルを読み取ることができる場合、 LILOは正常にインストールしますが設定ファイルのパーミッションが正しくないことを ユーザーに通知します。

グローバルパスワードを採用したくない場合、パスワードディレクティブは 任意のカーネルやオペレーティングシステムに該当する節に追加することができます。 これを行なうには、パスワードディレクティブをimage行の直下に追加します。完了したら、 パスワードで保護されている節の先頭は以下に似たようなものになります。

image=/boot/vmlinuz-<version>
        password=<password>

前の例で、 <version>にはカーネルのバージョンを入れ、 <password>には そのカーネルのLILOパスワードを入れます。

また、ユーザーがパスワードなしで引数を指定するのを防止しながら、 パスワードの検証はなしでカーネルまたはオペレーティングシステムのブートを 許可することもできます。これを行なうには、節の中にあるパスワード行の下の行に restrictedディレクティブを追加します。 このような節は以下の例のような始まりになります。

image=/boot/vmlinuz-<version>
        password=<password>
        restricted

<version>にはカーネルのバージョンを入れ、 <password>には そのカーネルのLILOパスワードを入れます。

restrictedディレクティブを使用する場合にも、 節内にパスワード行がなければなりません。

警告警告
 

/etc/lilo.confファイルは world-readable なファイルです。 LILOを保護するパスワードを使用している場合、 すべてのパスワードはプレーンテキストであるため、rootユーザーだけにファイルの 読み取り/編集を許可することが極めて重要です。これを行なうには、 rootになり、次のコマンドを入力します。

chmod 600  /etc/lilo.conf

注意

[1]

システムのBIOSはメーカーによって異なるため、 どのタイプのパスワード保護もサポートしないものもあれば、 特定タイプはサポートするが他タイプはサポートしないものもあります

[2]

GRUBは暗号化されていないパスワードも受け付けますが、 セキュリティを強化するためにmd5ハッシュを使用することをおすすめします。