SELinuxは複雑か?−セキュアOSに関する考察

SELinuxは複雑だ,分かりにくくて使い物にならんぞ、という話をよく聞く。
しかし,SELinuxを責めるのは酷であると思う。
私の考えは,

  • SELinuxは複雑ではない,複雑なのはOSの用途である
  • 全ての用途に柔軟に対応するにはSELinuxのようなモデルを採用せざるを得ない
  • 全ての用途に柔軟に対応するためには,結局どんなセキュアOSを使っても複雑になる。複雑に見えないセキュアOSがあったならば,絶対に何かを犠牲にしている。一番犠牲になるのはセキュリティレベル。
  • SELinuxも,上に抽象化レイヤー(simplified policyみたいなもの)を設ければ,単純になりうる(ただし,他の簡単なセキュアOSと同様のセキュリティレベルになる)*1

セキュアOSに必要なもの

結局,汎用のセキュアOSに必要なものについて、とりあえずの私の考え。多分以下のような4階層必要だと思う。

  • (1) 低レベルでは,SELinuxのような粒度の高いアクセス制御ができるアクセス制御エンジン
    • 場合によっては,アプリケーションの拡張も必要かもしれない
  • (2) simplified policyのように,粒度を落とした設定を記述できるポリシ記述言語
    • 用途に合わせて,必要な機能を切り出すようにするといいのだろう。ポリシ記述言語も用途によって異なるだろう
    • この言語も多階層に渡るかもしれない
  • (3)その上に,インターフェース
    • 自動生成,GUI,コマンド,ポリシ配布の仕組みなど
  • (4) 一番上のレイヤーに,「セキュリティ設計」をセキュアOSのポリシーに落とし込む仕組み*2

ただ,これらはアクセス制御機能に限定した議論である。アクセス制御を正しく行う前提には,認証や暗号化技術も必要だろう。ユーザやラベルの真正性を保証しなきゃいけないので。

私の言いたいことが,上の言葉ではうまくまとまってないかもしれない。そのうち,もう少しちゃんと考えをまとめたいものである。
ちなみに,このように考えるようになった背景は,半分は,Stephen Smalley氏の受け売り(「低レベルではポリシーは複雑であるべき」「OSの用途が複雑である」という発言)である。あとの半分は,Simplified Policyを作っている過程の考察である。

*1:これを証明するためにLIDSをSELinuxでエミュレートするというテーマがあるのですが,誰かやりませんか? エミュレートできない場所を本当は見つけたいです。

*2:本当の一番上のレイヤーには,ユーザに効果を実感させる仕組みも必要そう