今回は,ITProオープンソース・サイト(当サイト)で紹介している2種類のセキュアOS「SELinux」と「LIDS」の機能・性能の違いを解説する。「Linuxシステムのアクセス制御機能を強化する」という目的は同じだが,アクセス制御のきめ細かさや設定の簡単さなどでは大きな違いがある。システムに適したセキュアOSを導入するために,両セキュアOSの違いを的確に把握しておこう。

両セキュアOSともに強制アクセス制御をサポート

 SELinuxとLIDSはともに,「OSのアクセス制御機能を強化することで,たとえ侵入された場合でも攻撃者に大きな権限を与えずに,事実上攻撃を無力化する」ことを狙って開発されている。

 これを実現するためにSELinuxは,「TE,RBAC,ドメイン遷移」という機能を持つ(SELinux入門第2回参照)。一方LIDSは,「アクセス制御リスト(以下,ACL),ケーパビリティ,カーネルの封印」という機能を持つ(主にLIDS入門第2回参照)。両セキュアOSともに,これらの機能により,「すべてのユーザーとプロセスがアクセス制御を強制される」強制アクセス制御(MAC)を実現しているわけだ。

 細かな機能比較に先立ち,両セキュアOSの機能の対比を示す。LIDSのACLは,「プロセスがアクセスできるファイルを制限する機能」なので,SELinuxのTEに相当する。また,ケーパビリティとカーネルの封印機能は,TEでも同様のことができる。TEにはケーパビリティが含まれるし,カーネルの封印機能はTEのカーネル・モジュールへのアクセス制御機能に相当するからである。

相容れない,アクセス制御のきめ細かさと設定の簡単さ

図1●アクセス制御のきめ細かさと使いやすさが異なる
 それでは,両セキュアOSの差異はいったい何なのか。結論から述べると,違いは,アクセス制御のきめ細かさと設定の簡単さである(図1[拡大表示])。

 一般に,アクセス制御が細かく行えるほどセキュリティは高くなる反面,設定の簡単さに代表される利便性は低くなる。逆に,アクセス制御が粗くしか設定できないほどセキュリティは低くなるものの,簡単に設定できるなど利便性は高くなる。簡潔にまとめると,「細かく設定できるものの,設定に手間がかかる(SELinux)」のか,「設定項目が比較的少ないのでより簡単に設定できる(LIDS)」ということになる。もちろん,両方とも通常のLinuxよりは,はるかにセキュリティ・レベルを高くできる。

アクセス制御のきめ細かさではSELinuxが優れる

 それでは,両セキュアOSを比較してみよう。まずはアクセス制御のきめ細かさを比較する。

(1) 設定対象の豊富さ

 SELinuxの方が,アクセス制御可能なリソース種別やパーミッションの数が豊富であり,よりきめ細かなアクセス制御が可能である。ファイルのパーミッションを例に説明する。LIDSのACLでは,「READ,WRITE,APPEND」という3種類の操作しか制限できない。一方,SELinux(のTE)では,「read(読み込み),write(書き込み),append(追記),create(生成),execute(実行)など17種類に及ぶ操作を制限できる。

(2) ユーザーごとのアクセス制御

 SELinuxのRBACにより,システムを細分化してそのそれぞれに専任の管理者(例えば,Webページ専門の管理者)を設定できる。一方LIDSには,ログイン・ユーザーごとに管理権限を分割して与える仕組みはない。

(3) 権限昇格制御

 SELinuxは,ドメイン遷移の機能により,権限の昇格を制御できる。LIDSにはこのような機能はないため,権限の昇格を利用した攻撃に対する耐性は,SELinuxの方が高い。

 具体例を挙げる。/sbin/passwdプログラムはパスワード・ファイルの読み書き権限を持つ。LIDSでこのプログラムの実行権限を限定しておけば,権限の昇格は行われない。ただし,設定ミスなどにより,ひとたび/sbin/passwdの実行を許してしまうと,パスワード・ファイルの読み書き権限を侵入者に与えてしまう。

 一方SELinuxの場合は,設定ミスなどで/sbin/passwdの実行を許しても,権限の昇格は起こらない。なぜなら権限を昇格するには,/sbin/passwdの実行許可に加えて,ドメイン遷移で明示的に権限昇格を許可しておく必要があるためだ。言わば,2重の防御になっており,SELinuxのほうが権限昇格を利用した攻撃に強いと言える。

(4) 監査ログ

 アクセス制御の結果がきちんと監査ログとして残ることは,侵入の証拠を得るために非常に重要である。SELinuxでは,アクセスが拒否された場合にログが残るほか,アクセスが許可された場合にもログを残せる。一方LIDSでは,アクセスが拒否された場合だけにしかログを残せない。

 このように,機能面では全般的にSELinuxの方がLIDSより優れる。特にユーザーごとのアクセス管理の有無は大きな違いである。