SELinuxの現在の動向
こんにちは。SIOS OSSエバンジェリストの面です。
前回のお話に引き続き、今回からLinux Security Modules(LSM)の中のモジュールを一つずつ取り上げて動向を説明していきます。
今回は、一番有名なLSMモジュールである「SELinux」の現在の動向について説明します。
SELinuxとは
SELinuxは広く知られている通り、NSAが開発したセキュリティモジュールです。Type Enforcemntモデルとリファレンスモニタのコンセプトを用いることにより、Linuxに強制アクセス制御を導入することが可能になります。
SELinuxは特にRedHat系の様々なディストリビューションで組み入れられているため、RedHatやCentOS、Oracle Linuxなどをインストールするとデフォルトで組み入れられています。これにより、SELinuxを有効にすることでroot特権を縛ることが出来たり、アプリケーションに与える権限を最小化することが出来るため、アプリケーションに脆弱性が発見されて悪用された場合にも被害を局所化することができます。
SELinuxは前述したとおりTypeEnforcementモデルでセキュリティを制御しています。このモデルでは、全てのサブジェクト(動作主体・主にプロセス)とオブジェクト(アクセスリソース・主にファイル・デバイス・ソケット・プロセスなど)に、通常のrwxやUID/GIDとは別に、SELinux独自の「コンテキスト(contexts)」を付与します。このコンテキストは
・ユーザ(user) ・ロール(role) ・タイプ(type) ・MLS(MLS)
によって”ユーザ:ロール:タイプ:MLSレベル”のように構成されています。
この中でも、ロールとユーザはオブジェクトを限定する際などに使われる物で、SELinuxでは>、大部分はタイプ/ドメインに関して記載されたポリシ(アクセス制御の設定ファイル)に基づいてアクセス制御が行われています。そのため、”Type Enforcement”モデルと呼ばれています。このアクセス制御は、システム上の全ての挙動に対して確実に行われており(リファレンスモニタ)、これによりrootを含む全てのユーザのアクセスを細かく制限することが可能になっています。
ここではSELinuxの動向についてお話したいため、SELinuxの詳しい説明は省略させていただきます。SELinuxに関しての詳しい説明は、数多のWebサイトや書籍などを参考にして下さい。 また、LPIからダウンロードできる「Linuxセキュリティ標準教科書(Ver1.0.0)」にも記載されています。
各ディストリビューションでのSELinuxの状況について
まず、現状のディストリビューションに含まれているSELinuxのバージョンを比較してみました。各ディストリビューションは、現時点(2015/09/15)で最新のパッケージにアップデートしたバージョンで比較しています。
ディストロ名 | ディストロバージョン | カーネルバージョン | ポリシバージョン | selinux-utilsバージョン | policycoreutilsバージョン |
---|---|---|---|---|---|
Fedora Linux | 23(Alpha) | linux-4.2.0 | 3.13.1(2.20130424) | 2.4-1 | 2.4-7 |
RedHat Enterprise Linux/CentOS | 7.1/7.1.1503 | linux-3.10 | 3.13.1(2.20130424) | 2.2.2 | 2.2.5 |
OracleLinux(RHCK/UEKr3) | 7.1 | linux-3.10/linux-3.8 | 3.13.1(2.20130424) | 2.2.2 | 2.2.5 |
Ubuntu Server | 15.04 | linux-3.19 | 2.20091117 | 2.3-2 | 2.3-1 |
注UbuntuはデフォルトでAppArmorを採用しているため、SELinuxをインストール・有効にする際にはAppArmorをアンインストールする必要が有ります。その辺りはaptitudeツールでケアしてくれます。
root@ubuntu:~# aptitude install selinux 以下の新規パッケージがインストールされます: checkpolicy{a} libapol4{a} libauparse0{a} libqpol1{a} policycoreutils{a} python-audit{a} python-ipy{a} python-selinux{a} python-semanage{a} python-sepolgen{a} python-sepolicy{a} python-setools{a} selinux{b} selinux-policy-default{a} selinux-policy-ubuntu{ab} selinux-utils{a} setools{a} 0 個のパッケージを更新、 17 個を新たにインストール、 0 個を削除予定、0 個が更新 されていない。 9,050 k バイトのアーカイブを取得する必要があります。 展開後に 58.4 M バイトのデ ィスク領域が新たに消費されます。 以下のパッケージには満たされていない依存関係があります: selinux : 競合: apparmor [2.9.1-0ubuntu9 が既にインストール済みです] selinux-policy-ubuntu : 競合: selinux-policy-default [2:2.20140421-9 がインストール予定となっています] 以下のアクションでこれらの依存関係の問題は解決されます: 以下のパッケージを削除する: 1) apparmor 以下のパッケージを現在のバージョンに一時固定する: 2) selinux-policy-default [インストールされていません] 以下の依存関係を未解決のままにする: 3) ubuntu-standard が apparmor を推奨 この解決方法を受け入れますか? [Y/n/q/?]
SELinux自体は、メインラインのKernelに組み込まれているため、各ディストリビューションでの対応状況は、そのまま各ディストリビューションで用意されているKernelのバージョンに紐付いています。
そのため、各ディストリビューションでのバージョンを単純に比較するのは難しいのですが、比較する目処としてSELinuxのポリシ(refpolicy)のバージョンがあります。
SELinuxのポリシ(Refpolicy)はTresysのGitHubからダウンロードできますが、最新バージョンは2.20141203になっています。この事から、相変わらずですがSELinuxのポリシなど最新バージョンを使う場合には、Fedoraが一番最新に近い環境を得ることが出来ると言うことが言えます。
SELinux自体の開発状況
SELinuxはTypeEnforcementのモデル自身も、実装も既に枯れたものになるため、根本部分を大きく変えるというものは中々ありません。そのため、上で記載したようなSELinuxの原理部分に関しては引き続き同じ状態です。
しかし、SELinuxポリシの記述方法やテスト環境、応用範囲など、SELinuxをうまく使おうとする部分に関しては精力的に開発が続けられています。
2015年にシアトルで開催されたLinux Security Summit 2015の中でSELinuxに関しての開発状況がRed HatのPaul Mooreにより発表されていますが、その資料「State of SELinuxによると、以下のプロジェクトが主だった動きになります。
SELinux TestSuiteは、Linux Test Project(Linuxの信頼性、堅牢性、安定性を検証するプロジェクト)の中の一部分として作成されています。このSELinux TestSuiteでもいくつかのテストが追加・更新されているようです。
SELinuxをAndroidに適用する試みです。SELinuxはOS上で動作するアプリケーションが増えるたびにポリシの追加が必要になるため、動作するアプリケーションが制限されているAndroid端末などの組み込み機器にベストなセキュリティソリューションです。このSE-Androidも精力的に開発がされています。
次回予告
次回から、更に踏み込んでSELinuxのCILを見ていきます。
Linux Security Summit 2015
—–