SELinuxで組み込み機器のセキュリティを高める(前編) ―― SELinuxの概要
● SELinuxの限界
SELinuxはすべてのセキュリティ問題に完ぺきに対処できるわけではありません.限界があることも念頭に入れておく必要があります.
SELinuxの効果は「不正侵入の被害をプロセスの持つ権限内に封じ込める」ことです.これを裏返すと,「権限の範囲内の攻撃は防げない」ことになります.例えば,プロセスにファイルAの書き込み権限を与えている場合,不正侵入でファイルAを破壊される恐れがあります.しかしSELinuxの設定を見れば,「アプリケーションに対して不正侵入されたら,どこまで被害が出るか」を事前に予測することができます.予測の結果,アプリケーションXに不正侵入された場合に被害が大きくなると分かれば,Xの品質検査にかける工数を増やしたり,Xの設計を見直すなどして,不具合を出しにくくするという対策が考えられます.
3 セキュリティ・ポリシ
SELinuxをシステムに導入する際,システムに合わせて,「どんなアプリケーションにどんなアクセスを許可するのか」というセキュリティ・ポリシを設定する必要があります.アクセス許可を与えすぎるとセキュリティ上問題ですし,逆にアクセス許可が不足するとシステムが動作しなくなります.セキュリティ・ポリシの設定がSELinuxシステム構築の要となります.ここでは,セキュリティ・ポリシの設定に必要な最低限の知識を紹介します.
● アクセス制御モデル:TE
SELinuxはプロセスごとに権限を割り当ててアクセス制御を行います.このアクセス制御のモデルとしては,TE(Type Enforcement)が使われています.セキュリティ・ポリシを設定するためには,このモデルを理解しておく必要があります.
TEでは,プロセスに「ドメイン」,ファイルなどのリソースに「タイプ」と呼ばれる識別子(ラベル)を付与し,「ドメインがどんなタイプにアクセスできるか?」というアクセス制御を行います.図4はTEの例です.httpサーバがアクセス可能なリソースを制限しています.httpサーバのプロセスには,「httpd_t」というドメインが付与されています./var/www/htmlファイルにはhttpd_contents_tというタイプが付与され,80番ポートにはhttp_port_tというタイプが付与されています.そして,httpd_contents_tには,file read(ファイル読み込み)という操作が許可され,http_port_tにはtcp_socket name_bind(TCP通信の接続待ち)という操作が許可されています.これらにより,httpサーバが/var/www/htmlを読み込み,TCP 80番ポートで接続待ちすることが許可されます.
図4 SELinuxのアクセス制御モデルTE(Type Enforcement)
● セキュリティ・ポリシ記述書式
セキュリティ・ポリシの設定項目のほとんどがTEの設定です.TEの設定書式を図5に示します.
図5 TEの設定書式
1)が「ドメインが,タイプにどんな操作を許可するか?」を列挙する書式です.allowに続けて,ドメイン,タイプ,許可する操作を記述します.例では,httpd_tドメインのhttp_contents_tタイプへのファイル読み込み(file read)を許可しています.
2)が,ファイルにタイプを付与するための書式です.ファイル名とsystem_u:object_rに続いて,タイプを記述します.ファイル名として正規表現が利用可能です.この例では,「/var/www以下のすべてのファイル名に対してhttpd_contents_tというタイプを付与する」と設定しています.
3)がポート番号へのタイプ付与設定です.ポート番号とタイプを記述します.例では,tcp 80番ポートにhttp_port_tを付与しています.