local privilege escalation stopped by targeted policy

https://www.redhat.com/archives/fedora-selinux-list/2006-July/msg00071.html
SELinuxを入れてると、
targeted policyでも権限昇格攻撃を防げるという話。

seeditだと、unconfinedドメインは完全にunconfinedにしてしまっているので、
RBACを使ってない場合は駄目。

「侵入されても被害は最小限」を目指すことで、色々やってきた。
「侵入の道具を減らす」視点を忘れていたことに気づく。
つまり、
「各種ファイルにフルアクセスのドメイン」だったら、侵入されたらどうせおしまいだから、
その他の権限全部与えてもいいじゃん、というので来ていた。
とはいえ、ファイルアクセス権限以外も、
侵入の道具を減らす意味はある(「侵入されたらおしまい」ではある)

が、unconfined_tドメイン(targetedポリシのユーザーのドメイン)を設定するのは凄く難しいと思う。
unconfined_tドメインを厳しく設定しちゃうと、SELinuxを無効にされる率が高まってしまう。


ローカルexploit(一般ユーザーでログイン→権限昇格)
耐性を上げるのは重要だとおもう。
なぜなら、ファイアウォールなどネットワークレベルの対策で対処できない領域なので、
SELinuxでやるしかないので。

seeditも、RBACがオフでも、
ユーザの振る舞いを制限すべきなんだろうか。
ログインユーザーのためのドメインは、
「通常ファイルのみアクセス可」ぐらいで行くべきか。
(unconfined_tという名前は紛らわしいので、名称を変更?)
しかし、やりすぎると、targetedポリシの意味がなくなる気もする。
迷うところ。

それか、簡易RBACみたいなのできないかな。
ロールは2つしかなくて、
sysadm_r: root用
user_r: 一般ユーザ用(大体の権限は許可されているが、普通使わない(って何だ?)権限は拒否)
newroleは使わない
が、RBACをサポートは、userhelper, suやらの扱いがめんどいんだよなぁ。

SELinuxでベストを尽くし、悔いのないようにするには、strictポリシを書くしかなくなる。
これは、一般人にはやっとれんので、
「どこまでやるか」の目標を明確にしなきゃな。

seedit(のデフォルト)の目標は、

  • ネットワークデーモンからの侵入被害を最小限
  • 今までSELinuxを無効にしてきた人にSELinuxをonにしてもらう

ということにして、local exploitはまずは対象外にするか。。
で、もう少し頑張りたい人は、
SELinuxのtargetedを使うか、
seeditのRBAC onを使う、
というようにするか。。

セキュリティレベルの順、何が強くなるかを並べると。。
AppArmor < seeditデフォルト(パーミッションが増える) < SELinux targeted(unconfinedドメインのexploit可能性を減らせる)  < seedit RBAC(RBACが加わる) < SELinux strict(SELinuxフル活用) < SELinux  LSPP (MLSが加わる)
となるのかな。
当然、利便性は逆の順番になる。