AppArmor人柱

やっとOpenSuse10.1 b8が入ったのでAppArmorを実際に触れた。
ネットワークインストールだと途中でフリーズしたため、結局CD5枚焼くはめに。

デフォルトAppArmor有効

AppArmorは以下のスクリプトで有効にされる。
/etc/init.d/boot.apparmor

どんなサービスにたいして有効になっているのかは
ps -eZまたはunconfinedコマンドで分かる。

ポリシー(profile)は?

さあ、一番気になるのがポリシーだ。
AppArmorの用語だと「Profile(プロファイル)」。

/etc/apparmor.d 以下に入っていた。
あまり多くのprofileは用意されてない。
(ProfileがないものについてはAppArmorの保護対象外)
apacheのprofileもまだ用意されてないらしい。

試しに、namedのprofileをのぞいてみよう

# less usr.sbin.named
#include <tunables/global>

/usr/sbin/named {
  #include <abstractions/base>
  #include <abstractions/nameservice>

  capability net_bind_service,
  capability setgid,
  capability setuid,
  capability sys_chroot,

  /** r,
  /usr/bin/dnskeygen ix,
  /usr/bin/dnsquery ix,
  /usr/sbin/named rix,
  /usr/sbin/named-xfer ix,
  /var/lib/named/** rwl,
  /var/named/** rwl,
  /var/run/named.pid wl,
  /var/run/named/named.pid wl,
  /var/run/ndc wl,
}

たったこれだけ。#includeってので、他のファイルから設定も持ってきている。
たとえば、
#include は、./abstraction/baseというファイルを持ってきている。
#includeされている中身ものぞいてみたが、ファイルへのアクセス許可がされているだけ。
これから分かったことは、
Suse10.1b8時点では

  • AppArmorのアクセス制御はファイルとcapabilityだけ

なことが分かる。ネットワークアクセス制御はやってないらしい。LIDS以上に少ない。

あと、ラベル管理の悪夢がないのはなんとも羨ましい。

他の役立ちそうなコマンド

enforce,complain : SELinuxでいうsetenforce,getenforce
genprof: SELinuxでいうaudit2allow

Webアプリの保護について

これは特殊らしい。
AppArmorでは,PHPなどexecを介さないものも最小限の権限を割り当てられるようにできている。
mod_apparmorなるもので実現してるらしい。
mod_apparmorは、change_hatシステムコールを使っている。
どうやら、subprofileなる設定をするためだとか。
たぶんSELinuxでいうdyntransitionみたいなもの。
詳細は調査中。

Yast

Yastに「Novell AppArmor」という項目が。
「プロファイルを編集する」で、Profileの編集がGUIからできるものの、
テキスト編集と変わらないレベル。
「プロファイルの更新ウィザード」は,audit2allowのGUIみたいなもの。

その他

  • ファイル名の指定方法

/foo/* -> /foo直下のファイル全て
/foo/** -> /foo以下のツリーのファイル全て

  • /sys/kernel/security/apparmor

AppArmorの状態が保存されてる

  • /etc/apparmor,/etc/apparmor.d

ここに色々設定ファイルがある。

  • xattrを使ってないので全てのファイルシステム上のファイルが同じように取り扱われる。
  • とにかく man。man apparmorから色々辿ろう。

seeditへの教訓

  • GUI

seeditのGUIも、低機能にしようかなぁ。今目指しているのは高機能すぎるかも。

  • ファイル名の指定

seeditだと allowonly /fooで、/foo直下のファイル全て, allow /fooだと/foo以下全て。これはわかりにくい気がしてきた。AppArmorをパクったほうがいいかも。

  • デフォルトのポリシー

限定されたデーモンだけ保護、ぐらいにしたほうが使ってもらえるかも、と思った。

  • 共通設定の記述しにくさ

#includeのようなものをSPDLのレベルでサポートする必要がある。

SELinux vs AppArmorな感想

ちょっと使ってみた後の感想。
「AppArmorがSELinuxより簡単」と主張しているけど、
ここまでアクセス制御が粗ければ簡単なのは当然。
そもそもSELinuxと比べること自体が間違ってる気がしてくる。
誰かがLIDS vs SELinuxで言ってたけど、
「cm と kgを比べるようなもの」かも。
目指すものが全く違う。
何度も書いたが、以下の方向性か?

  • SELinux: とにかく最強セキュリティ
    • 情報フロー制御の設計を完全にポリシーに落とせるほど十分細かいアクセス制御
    • 情報フローの形式的検証可能
    • 一般人は教育して理解させる。または、人海戦術でポリシーを十分用意する。
    • LSPP
  • AppArmor: 一般人が分かるセキュリティ
    • 難しすぎて無効にされるセキュリティ機能はいらない
    • 最小特権はファイル(とりあえずファイルが守れればいい)
    • 堅いことは気にしない

どちらが残るかは、
民主主義的orビジネス的なプロセスによって解決されるんだろう。

個人的には、「最強セキュリティ以外」を目指す人が世界的なdistroにいるのは心強い。

各セキュアOS,seeditを、セキュリティ、利便性の軸で並べると。。。
# アクセス制御機能のみを考慮
セキュリティ重視 <----------------------------> 利便性重視
SELinux >>越えられない壁(ラベル/パス名の壁)>> seedit , TOMOYO > LIDS > AppArmor
という印象(いまのところ)。
総合的には,他にも比較項目がいっぱいあるので,上のように簡単に並ばないけど。