SELinux(エスイーリナックス)

SELinux(エスイーリナックス)

SELinux(エスイーリナックス)

英語表記: SELinux

概要

SELinux(Security-Enhanced Linux)は、Linuxカーネルに組み込まれた、非常に強力なセキュリティ機構である強制アクセス制御(MAC:Mandatory Access Control)システムです。これは、従来のユーザーやグループの権限に依存する任意アクセス制御(DAC:Discretionary Access Control)の限界を超え、システム上のすべてのファイルやプロセスに対して、あらかじめ厳格に定義されたルール(ポリシー)に基づいてアクセスを許可または拒否します。SELinuxの最大の役割は、OSの基本機能であるプロセス管理とメモリ管理のレベルで介入し、仮に悪意のあるプログラムや脆弱性を突いた攻撃が成功したとしても、そのプロセスが必要最低限の範囲でしか動作できないように隔離(サンドボックス化)することにあります。

詳細解説

SELinuxがOS セキュリティ機構の文脈、特にサンドボックス技術として重要視されるのは、その根本的な仕組みが「性悪説」に基づいているからです。従来のOSのアクセス制御では、ユーザーが一度権限を獲得すると、そのユーザーが所有するすべてのリソースにアクセスできてしまうという問題がありました。SELinuxはこれを根本から覆します。

1. 強制アクセス制御(MAC)の原則

SELinuxはMACを実装しており、アクセス制御の決定をユーザーではなく、システム管理者があらかじめ設定したポリシーに完全に委ねます。プロセス(OSの基本機能であるプロセス管理の対象)がファイルやポート(メモリ管理やリソース管理の対象)にアクセスしようとする際、カーネルは必ずSELinuxのポリシーエンジンに問い合わせを行います。このポリシーに明示的に「許可」されていない限り、アクセスは厳しく拒否されます。これが、SELinuxが従来のセキュリティ機構と一線を画す、最も大きな特徴です。

2. タイプエンフォースメント(TE)という核となる仕組み

SELinuxの運用において最も中心となるのが、タイプエンフォースメント(Type Enforcement: TE)です。システム上のすべてのオブジェクト(ファイル、ディレクトリ、デバイスなど)と主体(プロセス)には、それぞれ固有のセキュリティコンテキストというラベルが付けられます。

  • 主体(プロセス):どの「ドメイン」(役割)に属するか
  • オブジェクト(リソース):どの「タイプ」(種類)に属するか

例えば、Webサーバーの実行ファイルは「httpd_exec_t」タイプ、Webサイトのデータが置かれているディレクトリは「httpd_sys_content_t」タイプといった具合です。

TEは、「『httpd_t』ドメインに属するプロセスは、『httpd_sys_content_t』タイプのファイルに対しては読み取りと実行を許可するが、システム設定ファイル(例:shadow_t)に対しては一切アクセスを許可しない」といったルールを定義します。これにより、Webサーバーのプロセスが何らかの理由で暴走したり乗っ取られたりしても、OSのプロセス管理機能を通じて、その活動範囲は厳密にWebコンテンツの提供に必要な範囲内にサンドボックス化されるわけです。

3. サンドボックスとしての機能とプロセス管理への影響

SELinuxは、プロセスが開始される瞬間から終了する瞬間まで、その活動を監視し続けます。これはOSの基本機能であるプロセス管理に深く組み込まれています。もしプロセスがポリシーに違反する行動(例えば、Webサーバーがデータベースのパスワードファイルにアクセスしようとする)を試みると、SELinuxカーネルモジュールが直ちにその操作をブロックします。

これにより、たとえゼロデイ攻撃(まだ対策が知られていない脆弱性を突く攻撃)でプロセスが不正に乗っ取られたとしても、攻撃者はそのプロセスの「ドメイン」が許可されている範囲内でしか動くことができません。攻撃者はシステム全体を自由に動き回ることはできず、被害を特定の隔離された領域(サンドボックス)内に限定できるため、システムの防御力が飛躍的に向上するのです。この厳格な隔離機能こそ、SELinuxが「OS セキュリティ機構」の中でも、最も高度な「サンドボックス」機能として位置づけられる理由です。

具体例・活用シーン

SELinuxの機能は非常に抽象的で分かりにくいと感じるかもしれませんが、その動作は私たちの日常のセキュリティ対策に例えることができます。

  • 比喩:厳格な公文書館のセキュリティ
    標準的なアクセス制御(DAC)は、社員証(ユーザーID)を持っている人なら、その部署の部屋(ディレクトリ)に入って、中にある資料(ファイル)を自由に閲覧できるイメージです。しかし、SELinuxが適用された公文書館は全く違います。
    職員は全員、特定の役割(ドメイン)を持っています。あなたが「経理担当」という役割(ドメイン)を持っている場合、たとえ館内のどこにいても、あなたがアクセスできるのは「経理関連の資料(タイプ)」と「経理室(タイプ)」だけです。もしあなたが不正に「人事資料」が入っている部屋に入ろうとしたり、資料を改ざんしようとしたりしても、あなたの「役割」と資料の「種類」が一致しないため、システムが自動的にシャットアウトします。職員証(ユーザー権限)を持っていても、役割(ドメイン)が許可しない操作は絶対にできないのです。これが、プロセスを隔離するサンドボックスの強力な働きです。

  • Webサーバーの隔離
    最も一般的な活用例です。Webサーバー(httpd)が動作するドメインを厳しく制限することで、仮にサーバーソフトウェアに脆弱性が見つかり、外部から侵入されたとしても、攻撃者ができることはWebコンテンツの表示領域内にとどまります。攻撃者は、他のユーザーのホームディレクトリや、OSの重要なシステムファイルにアクセスすることはできません。これは、WebサーバーというプロセスをOSレベルで完全にサンドボックス化している状態です。

  • 新しいアプリケーションのテスト
    開発中の怪しいアプリケーションや、信頼性の低い外部のソフトウェアを試す際、それらを専用のSELinuxポリシーで隔離されたドメインで実行することで、システム全体への影響を最小限に抑えながらテストを行うことができます。もしそのアプリケーションがマルウェアだったとしても、SELinuxの壁を越えてシステムを破壊することは非常に困難です。

資格試験向けチェックポイント

SELinuxは、特に高度なセキュリティやシステム管理の知識が問われる応用情報技術者試験や、基本情報技術者試験のセキュリティ分野で頻出します。

  • MACとDACの対比(基本情報・応用情報)
    SELinuxは強制アクセス制御(MAC)の代表例であり、従来のLinuxのパーミッション設定は任意アクセス制御(DAC)です。この二つの制御方式の違いと、MACの優位性(システム側が強制的にルールを適用する点)を理解しておく必要があります。
  • サンドボックス機能としての理解(基本情報・応用情報)
    SELinuxの目的は、プロセスを隔離し、被害を最小限に抑える「サンドボックス」機能として働くことです。この文脈で、OSのプロセス管理機能と連携してセキュリティを強化している点を押さえましょう。
  • 重要用語の把握(応用情報)
    「セキュリティコンテキスト」「タイプエンフォースメント(TE)」「ポリシー」「ドメイン」「タイプ」といった、SELinux固有の専門用語が何を指しているかを理解することが求められます。
  • モードの違い(応用情報)
    SELinuxには主に「Enforcing(適用モード)」と「Permissive(許可モード:ログのみ記録)」があり、運用中にポリシーのデバッグや移行を行う際にモードを切り替える知識が問われることがあります。
  • OSの基本機能との関連
    SELinuxは、OSのカーネルに深く組み込まれており、プロセス管理やメモリ管理(リソースアクセス)といった基本機能の実行時に、常にアクセス許可をチェックしている点を理解しておくと、OSセキュリティ機構としての位置づけが明確になります。

関連用語

  • 情報不足

(関連用語としては、AppArmor、DAC(任意アクセス制御)、MAC(強制アクセス制御)、セキュリティコンテキストなどが挙げられますが、本記事のインプット情報には含まれていないため、情報不足とさせていただきます。)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

両親の影響を受け、幼少期からロボットやエンジニアリングに親しみ、国公立大学で電気系の修士号を取得。現在はITエンジニアとして、開発から設計まで幅広く活躍している。

目次