AppArmor

提供: ArchWiki
2015年5月5日 (火) 22:57時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

関連記事

AppArmor強制アクセス制御 (MAC) のシステムです。Linux Security Modules (LSM) 上に実装されています。

インストール

カーネル

カーネルをコンパイルするときに、以下のオプションを使用する必要があります:

 CONFIG_SECURITY_APPARMOR=y
 CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
 CONFIG_DEFAULT_SECURITY_APPARMOR=y

CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUECONFIG_DEFAULT_SECURITY_APPARMOR を使うかわりに、カーネルブートパラメータを設定することもできます: apparmor=1 security=apparmor

AUR には AppArmor が有効になっているカーネルが存在します: linux-apparmorAUR。ただし、2015年5月現在、このカーネルはやや古くなっています。

ユーザースペースツール

AppArmor を制御するためのユーザースペースツールとライブラリは AURapparmorAUR パッケージに入っています。

このパッケージは以下のサブパッケージに分かれています:

  • apparmor (メタパッケージ)
  • apparmor-libapparmor
  • apparmor-utils
  • apparmor-parser
  • apparmor-profiles
  • apparmor-pam
  • apparmor-vim

起動時に AppArmor プロファイルをロードするための systemd ユニットが apparmorAUR パッケージに含まれています:

# systemctl enable apparmor

テスト

再起動後、次のコマンドを root で使うことで AppArmor が本当に有効になってるかテストできます:

 # cat /sys/module/apparmor/parameters/enabled 
 Y

(Y=有効, N=無効, no such file = カーネルに該当モジュールなし)

無効化

一時的に AppArmor を無効化するには、カーネルブートパラメータapparmor=0 security="" を追加します。

新しいプロファイルの作成

aa-genprof を使って新規プロファイルを作成するには、audit パッケージの auditd.service を動作させる必要があります。作成した後は無駄なのでサービスを停止 (そして auditd.service を消去) してください。

セキュリティについての考察

リンクによるパスベースの MAC の迂回

標準の POSIX セキュリティモデルでは、ハードリンクを使うことで AppArmor は迂回できるようになっています。ただし、現在カーネルにはこの脆弱性を塞ぐ機能が備わっており、Ubuntu など他のディストリビューションのようにカーネルにパッチを適用する必要はなくなっています。

詳しくはセキュリティ#リンクの TOCTOU 攻撃を防止するを見て下さい。

その他

AppArmor は他の LSM と同じように、デフォルトの任意アクセス制御を置き換えるというよりは補足するものです。そのため、任意アクセス制御の段階よりも強力な権限をプロセスに与えることは出来ません。

Ubuntu や SUSE など多数のディストリビューションは AppArmor をデフォルトで使用しています。RHEL (やその亜種) は SELinux を使っています。SELinux は正しく動作させるためにユーザースペースでの工夫が必要となります。また、SELinux は適切に設定するのが大変難しいというのも周知です。

例を上げると、新しい Flash の脆弱性が考えられます: 悪意のあるウェブサイトにアクセスしたとき、AppArmor は脆弱性があるプラグインから個人情報にアクセスされることを防ぐことができます。ほとんどのブラウザで、プラグインのプロセスは簡単に分離することができます。

AppArmor のプロファイルは (大抵) /etc/apparmor.d に簡単に読めるテキストファイルとして保存されます。

ポリシーが侵害された場合システムログにメッセージが残り、多くのディストリビューションでは DBUS と連携してデスクトップ上に警告メッセージとしてリアルタイムで表示します。

参照