第1章 はじめに

Security-Enhanced Linux (SELinux) とは、 Linux カーネル内の「強制アクセス制御 (MAC)」の実装であり、 標準の「任意アクセス制御 (DAC)」がチェックされた後、 許可される動作をチェックします。 SELinux は米国国家安全保障局 (National Security Agency) により開発され、 Linux システム内のファイルやプロセス、またその動作についても定義されたポリシーに応じてルールを強制することができます。
Security-Enhanced Linux (SELinux) では、 ディレクトリやデバイスなどのファイルをオブジェクト (客体) として参照します。 ユーザーによって実行されたコマンドや Mozilla Firefox アプリケーションなどのプロセスはサブジェクト (主体) として参照されます。 ほとんどのオペレーティングシステムでは、 サブジェクトとオブジェクトの交信手段、 サブジェクト同士の交信手段などを制御する任意アクセス制御システム (DAC) が使用されています。 DAC を使用するオペレーティングシステムでは、 ユーザーが所有するファイル (オブジェクト) の権限はそのユーザーが制御するようになっています。 たとえば、 Linux オペレーティングシステムの場合、 ユーザーは自分のホームディレクトリを誰でも読み取れるようにすることができるため、 気付かずに機密の可能性がある情報へのアクセスを他のユーザーやプロセス (サブジェクト) に渡してしまう恐れがあります。
DAC によるアクセス決定はユーザー ID と所有権だけを基準とし、 ユーザーのロール、 プログラムの機能及び信頼性、データの機密性及び整合性など他のセキュリティ関連の情報は無視されます。 通常、 各ユーザーが所有ファイルの完全決定権を持っているため、 システム全体にセキュリティポリシーを試行するのが困難になります。 さらに、 ユーザーによって実行されるプログラムはそのユーザーに与えられる権限を継承し、 そのユーザーのファイルへのアクセス権を自由に変更することができます。 このため、 悪意あるソフトウェアに対する保護は最低限のものしか与えられません。 多くのシステムサービスや特権を有するプログラムは、 特権付与の制御がおおまかで、その必要性をはるかに越える特権を持ったまま実行されます。 したがって、 こうしたプログラムのうちいずれかにでも不備があればそこを攻撃され、さらなるシステムアクセス権が奪われる恐れがあります。[1]
以下は、 SELinux を実行していない Linux オペレーティングシステムで使われているパーミッションの例です。 システムによっては、 パーミッションがこの例と多少異なる場合があります。 ls -l コマンドを使って、 ファイルのパーミッションを表示させます。
$ ls -l file1
-rwxrw-r-- 1 user1 group1 0 2010-01-29 09:17 file1
最初の 3 つのパーミッション rwx では、 Linux の user1 ユーザー (この例では所有者) が file1 に対して持っているアクセス権を制御しています。 次の 3 つのパーミッション rw- では、 Linux の group1 グループが file1 に対して持っているアクセス権を制御しています。 最後の 3 つのパーミッション r-- では、 その他のユーザーが file1 に対して持っているアクセス権を制御しています。 その他のユーザーには、 すべてのユーザーおよびプロセスが含まれます。
SELinux を使用すると、Linux カーネルに MAC (強制アクセス制御) が追加され、Red Hat Enterprise Linux ではデフォルトで有効になります。汎用の MAC アーキテクチャーには、各種のセキュリティ関連情報を含むラベルを決定基準とした管理用セキュリティポリシーを、 システム内の全プロセスおよびファイルに対して実施する能力が必要とされます。適切に実装することで、システム自体が的確に自己防御され、アプリケーションの改ざんを保護、回避することによりアプリケーションの安全性に必須のサポートを提供します。MAC ではアプリケーションどうしがしっかりと確実に分離されるため、信頼性の低いアプリケーションでも安全に実行することができます。プロセス実行に関する特権を制限する能力により、アプリケーションやシステムサービス内の脆弱性が悪用され発生する可能性のある被害範囲を限定することができます。限られた権限しか持たない正規ユーザーだけでなく、権限を与えられたユーザーが不正なアプリケーションを知らずに実行してしまった場合でも情報を保護することができます。[2]
以下は、 SELinux を実行する Linux オペレーティングシステム上でプロセス、 Linux ユーザー、 ファイルなどに適用されるセキュリティ関連の情報を含むラベルの例です。 SELinux コンテキストと呼ばれ、 ls -Z コマンドで表示させます。
$ ls -Z file1
-rwxrw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0      file1
この例では、 SELinux によりユーザー (unconfined_u)、 ロール (object_r)、 タイプ (user_home_t)、 レベル (s0) が file1 ファイルに与えられています。 この情報がアクセス制御の決定に使用されます。 ls -Z コマンドでは SELinux コンテキストと共に DAC ルールも表示されます。SELinux ポリシールールは、 DAC ルールの後にチェックされます。 このため、 DAC ルールで最初にアクセスが拒否されると、 SELinux ポリシールールは適用されません。


[1] 「Integrating Flexible Support for Security Policies into the Linux Operating System」、 Peter Loscocco および Stephen Smalley 著。 この論文は当初、 国家安全保障局向けに作成されましたが、 現在は公開されています。 詳細については オリジナル論文 を参照してください。
[2] 「Meeting Critical Security Objectives with Security-Enhanced Linux」、 Peter Loscocco および Stephen Smalley 著。 この論文は当初、 国家安全保障局向けに作成されましたが、その後公開されています。 詳細については、 オリジナル論文 を参照してください。