AppArmor
関連記事
AppArmor は強制アクセス制御 (MAC) のシステムです。Linux Security Modules (LSM) 上に実装されています。
目次
インストール
カーネル
カーネルをコンパイルするときに、以下のオプションを使用する必要があります:
CONFIG_SECURITY_APPARMOR=y CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1 CONFIG_DEFAULT_SECURITY_APPARMOR=y CONFIG_AUDIT=y
CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE
と CONFIG_DEFAULT_SECURITY_APPARMOR
を使うかわりに、カーネルブートパラメータを設定することもできます: apparmor=1 security=apparmor
。
AUR には AppArmor が有効になっているカーネルが存在します: linux-apparmorAUR[リンク切れ: アーカイブ: aur-mirror]。ただし、2015年5月現在、このカーネルはやや古くなっています。
ユーザースペースツール
AppArmor を制御するためのユーザースペースツールとライブラリは AUR の apparmorAUR パッケージに入っています。
このパッケージは以下のサブパッケージに分かれています:
- 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=""
を追加します。
もしくは次のコマンドを実行することで現在のセッションにおいてのみ無効化できます:
# systemctl stop apparmor.service
新しいプロファイルの作成
aa-genprof
を使って新規プロファイルを作成するには、audit パッケージの auditd.service
を動作させる必要があります。作成した後は無駄なのでサービスを停止 (そして auditd.service
を消去) してください。
セキュリティについての考察
リンクによるパスベースの MAC の迂回
標準の POSIX セキュリティモデルでは、ハードリンクを使うことで AppArmor は迂回できるようになっています。ただし、現在カーネルにはこの脆弱性を塞ぐ機能が備わっており、Ubuntu など他のディストリビューションのようにカーネルにパッチを適用する必要はなくなっています。
詳しくはセキュリティ#リンクの TOCTOU 攻撃を防止するを見て下さい。
Tips and tricks
DENIED アクション時にデスクトップ通知を表示
AppArmor が "DENIED" ログエントリを残したときにデスクトップに通知を表示したい場合、以下のようにして通知デーモンを起動してください:
# aa-notify -p --display $DISPLAY
上記のデーモンはマシンを起動するたびに実行する必要があります。
その他
AppArmor は他の LSM と同じように、デフォルトの任意アクセス制御を置き換えるというよりは補足するものです。そのため、任意アクセス制御の段階よりも強力な権限をプロセスに与えることは出来ません。
Ubuntu や SUSE など多数のディストリビューションは AppArmor をデフォルトで使用しています。RHEL (やその亜種) は SELinux を使っています。SELinux は正しく動作させるためにユーザースペースでの工夫が必要となります。また、SELinux は適切に設定するのが大変難しいというのも周知です。
例を上げると、新しい Flash の脆弱性が考えられます: 悪意のあるウェブサイトにアクセスしたとき、AppArmor は脆弱性があるプラグインから個人情報にアクセスされることを防ぐことができます。ほとんどのブラウザで、プラグインのプロセスは簡単に分離することができます。
AppArmor のプロファイルは (大抵) /etc/apparmor.d
に簡単に読めるテキストファイルとして保存されます。
ポリシーが侵害された場合システムログにメッセージが残り、多くのディストリビューションでは DBUS と連携してデスクトップ上に警告メッセージとしてリアルタイムで表示します。
参照
- 公式ページ
- http://www.kernel.org/pub/linux/security/apparmor/AppArmor-2.6/
- http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference
- http://ubuntuforums.org/showthread.php?t=1008906 (チュートリアル)
- https://help.ubuntu.com/community/AppArmor
- FS#21406
- http://stuff.mit.edu/afs/sipb/contrib/linux/Documentation/apparmor.txt
- http://wiki.apparmor.net/index.php/Kernel_interfaces
- http://wiki.apparmor.net/index.php/AppArmor_versions
- http://manpages.ubuntu.com/manpages/oneiric/man5/apparmor.d.5.html
- http://manpages.ubuntu.com/manpages/oneiric/man8/apparmor_parser.8.html
- http://wiki.apparmor.net/index.php/Distro_CentOS
- http://bodhizazen.net/aa-profiles/
- https://wiki.ubuntu.com/ApparmorProfileMigration
- wikipedia:ja:Linux_Security_Modules
- http://wiki.apparmor.net/index.php/Gittutorial