BIOS(または、BIOSに相当するもの)及びブートローダのパスワード保護で、 システムに物理的にアクセスできる許可のないユーザーが、 リムーバブルメディアを使用してブートしたり、 シングルユーザーモードからrootを取得してブートするのを防ぐことができます。 ただし、セキュリティは、ワークステーションが保持する情報の機密度や マシンの設置場所の両方によって、 このような攻撃に対して防護するためのものを採用します。
例えば、マシンがトレードショーで使用されるため機密情報が保存されていない場合は、 このような攻撃を防止することは極めて重要なことにはならないかもしれません。 しかし、会社のネットワークに対してプライベートで 暗号化されていないSSHキーを 持っている雇用者のノートブック型PCを、そのトレードショーで置きっぱなしにした場合、 会社全体のあらゆる部署に大きなセキュリティ侵害を招く可能性があります。
一方、許可のある人や信頼できる人しかアクセスできない場所にワークステーションが 配置されている場合、BIOSやボートローダにセキュリティを施行する必要はまったく ないかもしれません。
以下に、コンピュータのBIOSを保護するパスワードに関する2つの主な理由を示します [1]。
BIOS設定への変更を防止する — 侵入者がBIOSにアクセスした場合、ディスケットやCD-ROMをブートオフに設定することが できます。これにより、侵入者はレスキューモードないしはシングルユーザーモードで 入り込むことが可能になり、そしてシステムに不正なプログラムを埋めこんだり、 機密データをコピーすることができるようになってしまいます。
システムのブートを防止する — BIOSのなかには、ブートプロセスのパスワード保護ができるものがあります。 起動すると、攻撃者はBIOSがブートローダを起動する前にパスワードの入力を強制されます。
BIOSパスワードの設定方法についてはコンピュータのメーカーにより異なるため、 特定の説明についてはコンピュータのマニュアルを参照してください。
BIOSパスワードを忘れてしまった場合、マザーボード上のジャンパでリセットするか、 CMOSバッテリを取り外すことができます。このため、できればコンピュータケースを ロックするようにした方がよいでしょう。ただし、この手順を試す前に、 コンピュータまたはマザーボードのマニュアルを参照してください。
以下に、Linuxブートローダを保護するパスワードの主な理由を示します。
シングルユーザーモードヘのアクセスを防止する— 攻撃者がシングルユーザーモードでブートできる場合、 ルートユーザーになります。
GRUBコンソールヘのアクセスを防止する — マシンがGRUBをそのブートローダとして使用する場合、攻撃者はGRUBエディタ インターフェースを使用してその設定を変更したり、catコマンド を使って情報を収集することができます。
セキュアでないオペレーティングシステムへのアクセスを防止する — デュアルブートシステムである場合、 攻撃者はブート時にアクセス制御やファイルパーミッションを無視するDOSなどの オペレーティングシステムを選択することができます。
x86プラットフォーム用にRed Hat Enterprise Linuxで配付されるブートローダは、 GRUBとLILOの2つがあります。これらブートローダの詳細比較については、 Red Hat Enterprise Linux リファレンスガイドにあるブートローダの章を 参照してください。
GRUBは、その設定ファイルにパスワードディレクティブを追加すると、 項4.2.2に記載されている最初の2点に対処します。 これを行なうには、まずパスワードを決め、シェルプロンプトを開きます。 rootとしてログインして次のように入力します。
/sbin/grub-md5-crypt |
パスワードを要求されたら、GRUBパスワードを入力して
次に、GRUBの設定ファイル/boot/grub/grub.confを 編集します。ファイルを開き、ドキュメントのメインセクションにある timeout行の下に次の行を追加します。
password --md5 <password-hash> |
<password-hash>には、 /sbin/grub-md5-cryptで返された値を入れます。 [2]
次回システムが起動すると、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> |
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になり、次のコマンドを入力します。
|
[1] | システムのBIOSはメーカーによって異なるため、 どのタイプのパスワード保護もサポートしないものもあれば、 特定タイプはサポートするが他タイプはサポートしないものもあります |
[2] | GRUBは暗号化されていないパスワードも受け付けますが、 セキュリティを強化するためにmd5ハッシュを使用することをおすすめします。 |