Linuxディストリビューションの「Fedora Core 5」からは,大幅に機能刷新されたSELinuxが組み込まれた。本講座では,Fedora Core 5でのSELinuxの機能や使い方を,これまでSELinuxを使ったことがない人に向けて,分かりやすく解説していく。第一回は,SELinuxの基本的な仕組みを紹介する。

 「Security-Enhanced Linux(通称SELinux)」は,Linuxカーネル用のセキュリティ拡張機能である。米NSA(National Security Agency=米国国家安全保障局, http://www.nsa.gov/selinux)が中心となって,不正侵入の被害を極力少なくすることを目的に開発し,オープンソース・ソフトとして提供している。SELinuxは既に,Fedora Coreなどの主要なLinuxディストリビューションに組み込まれており,その機能をすぐに利用できる。

 不正アクセスや不正侵入による情報漏えいが社会問題化するにつれ,OSレベルのセキュリティ対策としてセキュアOSが注目されている。SELiuxはLinux用の代表的なセキュアOS*1であり,今後特にサーバー分野で広く使われる見込みだ。

 2006年上旬に公開されたLinuxディストリビューション「Fedora Core 5」には,大幅に機能刷新されたSELinuxが組み込まれた。本講座では,このFedora Core 5でのSELinuxの機能や使い方を,これまでSELinuxを使ったことがない人に向けて,分かりやすく解説していく。第一回は,SELinuxの基本的な仕組みを紹介する。

なぜSELinuxが必要なのか

 コンピュータをインターネットに接続するとすぐさま,さまざまな攻撃にさらされる。攻撃の代表格は,ウイルスや悪意を持った第三者による不正侵入だ。

 不正侵入は,図1のように行われる。(1)攻撃者の多くはネットワーク経由で侵入してくる。攻撃者は,無差別にターゲットを選ぶが,狙いを定めるのはセキュリティ・ホールなどの不具合を抱えたホストである場合が多い。(2)攻撃者は,アプリケーションやOSのセキュリティ・ホールなどを利用して,ターゲットにしたマシン(以下,ターゲット・マシン)に侵入する。侵入と同時に,あるいは侵入した後にroot権限を奪取する。(3)root権限を得た攻撃者は,好き勝手にシステムを操作できる。システム内の機密情報を入手したり,ほかのホストに攻撃を仕掛けるための踏み台として利用したりする。

図1●ウイルスや悪意を持った第三者による不正侵入の概要
図1●ウイルスや悪意を持った第三者による不正侵入の概要
(1)攻撃者の多くはネットワーク経由で侵入を試みる。無差別に,アプリケーションやOSにセキュリティ・ホールを抱えたシステムをターゲットとして選び出す。(2)攻撃者は,セキュリティ・ホールを利用して,ターゲット・マシンに侵入する。(3)root権限を得た攻撃者は,好き勝手にシステムを操作できる。

 このように,システム内に不正侵入を許してroot権限を奪取されてしまうと,ホストを自由に操作されてしまい,大きな被害を受けることになる。あるいは,自分のホスト(自ホスト)に機密情報などがなかった場合でも,自ホスト経由でそのほかのホストに被害を与えることもある。

これまでは「侵入されない」ことを重視

 こうした侵入攻撃に対する,代表的な対策を図2に示す。これらの対策は,「侵入を未然に防ぐ」ことを目的にしている。

図2●主な侵入対策の概要
図2●主な侵入対策の概要
(1)は,ネットワーク・レベルの対策。ファイアウオールやIPSなどにより,通信を監視し,不正な通信をシャットアウトする。(2)は,パッチを適用してセキュリティ・ホールをふさぐ対策方法だ。(3)が,セキュアOSを利用したOSレベルの対策である。

 例えば図2の(1)は,ネットワーク・レベルの対策だ。ファイアウオールやIPS(Intrusion Prevention System=侵入防止システム)などにより,通信を監視し,不正な通信をシャットアウトする。(2)は,セキュリティ・ホールが見つかるたびに,パッチを適用してセキュリティ・ホールをふさぐ対策方法である。

侵入を完全に防ぐことは不可能

 ただし,これらの対策を施したとしても,侵入を完全に防ぐことは不可能だ。

 例えば,図2(1)の「不正な通信をシャットアウトする」対策では,「不正な通信パターン」をすべて網羅することは事実上不可能であり,どうしても漏れが生じる。ファイアウオールやIPSを通過させる正常な通信と,シャットアウトする不正な通信を完全に見分けるのは困難だからだ。

 また,(2)の「パッチの適用」対策は,パッチを適用し忘れる可能性がある上,そもそもパッチが公開されていなければ対策すら行えない。

侵入されても大丈夫なようにする

 侵入を未然に防げない以上,侵入されたときの対策が不可欠になる。そうしたアプローチの代表格が,SELinuxのようなセキュアOSの採用だ。

 SELinuxは,「万一侵入されたときでも,その被害を最小限にする」ためのものだ。例えば,前述の図2(3)では,たとえLinuxホストに侵入されてしまった場合でも,個人情報やシステム・ファイルにはアクセスできない。いわば,システム防衛上の最後の砦(とりで)の役割を担うわけだ。

侵入者の動作を封じ込める

 SELinuxが実際にどういう働きをするものなのかを図3に示す。SELinuxは,各プロセスがアクセスできるリソース(この場合のリソースとは,個々のファイルやディレクトリ全体など)を制限し,本当に必要なリソースにだけアクセスできるようにする。例えば,Webサーバーの場合は,Webページにだけアクセスできるようにする。Sambaサーバーなら,Sambaの共有ファイルにだけアクセスできるようにするわけだ。そして,関係ないファイルへのアクセスは一切拒否するようにしておく。

図3●SELinuxが有効になったシステムの概要
図3●SELinuxが有効になったシステムの概要
図のように,プロセスの動作が限定される。この例では,Webサーバーのプロセスは,Webページへのアクセスだけしか許可されない。そのため,万が一Webサーバーが乗っ取られたとしても被害を最小限にできる。

 例えば,Webサーバーが攻撃者やウイルスによって侵入され,乗っ取られたとしよう。その場合でも,Webサーバーの動作はWebページへのアクセスだけに限定されている。そのため攻撃者は,Webページの読み込みは可能だが,それ以外のファイル,例えばシステム・ファイルや共有ファイルへのアクセスは不可能だ。

 プロセスのリソースへのアクセス制限は,OSレベルで強制されており,抜け道は無い。たとえroot権限で動作するプロセスであっても強制されるので,攻撃者にroot権限を奪取されても操作可能な範囲は限定される。

 ただし,被害をゼロにできるわけではないことに注意する。攻撃者が,可能な範囲内で,何らかの被害を及ぼす可能性があるからだ。ただし,操作可能な範囲をあらかじめ限定させておけば,被害範囲を予測できるという強みがある。