マウントオプションを適切に設定して攻撃による被害拡大を防ぐ
ファイルシステムは、Unixシステムを利用するための基本的な要素です。したがって、
もしも攻撃者によってコンピュータに侵入されてしまった際に、重要なファイルにアク
セスされることを防ぐために、ファイルのパーミッションは適切に制限されていることが
望ましいといえます。そのためにはファイルアクセスを制限できるマウントオプションを
用いるとよいでしょう。
「マウントオプション」はファイルシステムへのアクセス方法を制御するためのオプ
ションです。マウントオプションはファイルシステムがマウントされる際に、OSカーネ
ルに引き渡されます。例えば、nodevオプションを指定すると、デバイスノード(デバ
イスファイル)を無効にできます。また、noexecオプションでプログラムの実行を禁止
でき、nosuidオプションでSUIDビットを無効にすることができます。roオプション
を指定すると、ファイルシステムを読み出し専用でマウントすることもできます。
これらのマウントオプションは、mountコマンドの-oオプションに指定します。例
えば、プライマリIDEハードディスクの3番目のパーティションをnodev、noexec、
nosuidの各マウントオプションを指定して、/tmpにマウントするには、次のコマンド
を実行します。
# mount -o nodev,noexec,nosuid /dev/hda3 /tmp
これを/etc/fstabで設定するには、次のように記述します。
/dev/hda3 /tmp ext3 defaults,nodev,noexec,nosuid 1 2
使用目的を慎重に考慮して目的別にパーティションを分割し、それぞれのパーティ
ションに適切なマウントオプションを設定します。これにより攻撃者がコンピュータに侵
入した後の活動を困難にすることができます。機能別にパーティションを分割するには、
システムがディレクトリへの書き込みが必要なのか、読み込みしか必要ないのかを分類
することです。通常の運用中に変更する必要のないディレクトリは、読み出し専用オプ
ション(ro)でマウントすることを推奨します。このように読み出し専用オプションを適
用できるディレクトリとして/usrが考えられます。
言うまでもなく/homeのようなディレクトリは読み出し専用としてマウントするべきで
はありません。しかしながら通常のUnixシステムにおいて、ユーザーがホームディレ
クトリ上でSUIDされたプログラムを実行したり、デバイスファイルを作成したりするこ
とを許可する必要はありません。そこで、/homeに独立したパーティションを割り当て、
nodevオプションとnosuidオプションを設定してマウントするとよいでしょう。
またユーザーのホームディレクトリに実行ファイルを置かせないのであれば、noexecマウ
ントオプションを追加するのもよいでしょう。また、/tmpや/varディレクトリについて
も、これらのディレクトリ上にデバイスファイルを作成したり、実行ファイル(SUIDビッ
トの有無を問わず)を置いたりする必要はありません。/tmpやホームディレクトリのよう
な共有のファイルシステムをマウントオプションで制限しておけば、攻撃者によるトロイ
の木馬などの悪意あるプログラムの実行を防ぐことができます。
nodevオプションがchroot環境で動作しているファイルシステムに適用されていた場
合、chroot()を呼び出して動作しているサービスが機能しないかもしれないことに注意
してください。これはchroot環境下では、/dev/logや/dev/nullなどのデバイスファイ
ルが必要なためです。
攻撃者が前述のようなマウントオプションによる制限を回避可能な方法も数多く存在
します。例えばLinuxにおいて、noexecオプションを指定したファイルシステム上で
あっても、/lib/ld-linux.soを使用してファイルを実行することが可能です。ld-linux.so
を実行不可能とすることで、この問題を解決できると考えるかもしれませんが、そのよ
うにするとすべての動的リンクライブラリを用いるプログラムが実行できなくなってしま
います。現実的ではありませんが、システム上のすべてのプログラムを静的リンクする
ことでこの問題を解決できます。
このようにLinuxにおいてnoexecオプションはほとんど役に立たない可能性があり
ます。結局のところroot権限を奪った攻撃者に対しては、これらのマウントオプション
を与えたファイルシステムでさえも無意味で、-o remountオプションで再マウントさ
れてしまいます。
しかしながらマウントオプションを設定しておけば、root権限を奪う前の攻撃者や悪
意あるユーザーの行動を制限することが可能なのです。