Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
AppArmorのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
AppArmor
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:セキュリティ]] [[Category:カーネル]] [[en:AppArmor]] {{Related articles start}} {{Related|セキュリティ}} {{Related|TOMOYO Linux}} {{Related|SELinux}} {{Related articles end}} [[Wikipedia:AppArmor|AppArmor]] は[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (MAC) のシステムです。[[Wikipedia:ja:Linux_Security_Modules|Linux Security Modules]] (LSM) 上に実装されています。 他の LSM と同じように、AppArmor はデフォルトの任意アクセス制御 (DAC) を置き換えるというよりも補完するものです。そのため、プロセスに最初から持っている権限よりも高い権限を与えることはできません。 Ubuntu や SUSE などのディストリビューションはデフォルトで AppArmor を使用しています。RHEL (とその派生) は正しく機能させるのにユーザー空間における設定が必要になる SELinux を使っています。SELinux は全てのファイル・プロセス・オブジェクトにラベルを貼るため非常に柔軟性があります。しかしながら SELinux の設定は非常に複雑で、ファイルシステムが SELinux に対応していなければなりません。それに比べて AppArmor はファイルパスを使用するため簡単に設定することができます。 AppArmor は外部・内部からの脅威に対してオペレーティングシステムやアプリケーションを防護します。アプリケーションごとにルールセットを決めることでゼロデイ攻撃からも身を守ることができます。セキュリティポリシーによって個々のアプリケーションがアクセスできるシステムリソースは厳格に定められます。何もプロファイルが設定されていない場合、デフォルトでアクセスは拒否されます。AppArmor に付属しているデフォルトポリシーは少ない数しかありません。高度な静的解析・学習ツールを使用することで、非常に複雑なアプリケーションでも問題なく動作するような AppArmor ポリシーを数時間で作成できます。 ポリシー違反が発生するとシステムログにメッセージが残ります。また、AppArmor ではデスクトップにポップアップを表示することで、リアルタイムにユーザーに通知するように設定することもできます。 == インストール == === カーネル === {{Note|論争になっているユーザー名前空間 ({{ic|1=CONFIG_USER_NS=Y}}) は[[カーネル]]コンフィグでは設定できませんが、AppArmor に機能を追加することができます。ユーザー名前空間については {{bug|36969}} を参照してください。}} [[カーネル#コンパイル|カーネルをコンパイル]]するとき、以下のオプションを設定する必要があります: CONFIG_SECURITY_APPARMOR=y CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1 CONFIG_DEFAULT_SECURITY_APPARMOR=y CONFIG_AUDIT=y 上記の変数が上書きされないように、コンフィグファイルの一番下に変数を記述するようにしてください。 {{ic|CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE}} や {{ic|CONFIG_DEFAULT_SECURITY_APPARMOR}} を設定する代わりに、次の[[カーネルパラメータ|カーネルブートパラメータ]]を設定しても効果があります: {{ic|1=apparmor=1 security=apparmor}}。 === ユーザースペースツール === {{Note|AppArmor はカーネルモジュールをビルド・インストールするため、カーネルがアップデートされるたびに再ビルドする必要があります。}} AppArmor を制御するためのユーザースペースツールとライブラリは [[AUR]] の {{AUR|apparmor}} パッケージに入っています。 このパッケージは以下のサブパッケージに分かれています: * apparmor (メタパッケージ) * apparmor-libapparmor * apparmor-utils * apparmor-parser * apparmor-profiles * apparmor-pam * apparmor-vim 起動時に AppArmor プロファイルをロードするには {{ic|apparmor.service}} を[[有効化]]してください。 === テスト === 再起動後、次のコマンドを root で使うことで AppArmor が本当に有効になってるかテストできます: {{hc|# cat /sys/module/apparmor/parameters/enabled|Y}} (Y=有効, N=無効, no such file = カーネルに該当モジュールなし) == 無効化 == 現在のセッションにおいてのみ AppArmor を無効化するには、{{ic|apparmor.service}} を[[systemd#ユニットを使う|停止]]してください。[[systemd#ユニットを使う|無効化]]すると次の起動時に実行されなくなります。 また、[[カーネルパラメータ|カーネルブートパラメータ]]に {{ic|1=apparmor=0 security=""}} を追加することで AppArmor が必要とするカーネルモジュールを無効化することもできます。 == 設定 == === 監査とプロファイルの作成 === {{ic|aa-genprof}} を使って新規プロファイルを作成するには、{{Pkg|audit}} パッケージの {{ic|auditd.service}} を動作させる必要があります。Arch Linux は systemd を使用しておりデフォルトではファイルにカーネルログを出力しないためです。Apparmor はユーザー空間の auditd デーモンからカーネルの監査ログを取得してプロファイルを作成することができます。カーネルの監査ログを取得するには、ルールを作成して動作させたいアプリケーションを監視する必要があります。大抵のルールは {{man|8|auditctl|url=https://linux.die.net/man/8/auditctl}} で設定することができます: # auditctl -a exit,always -F arch=b64 -S all -F path=/usr/bin/chromium -F key=MonitorChromium 詳しくは [[Audit フレームワーク#ルールの追加]]を読んでください。 {{Note|プロファイルを作成した後は無駄なのでサービスを停止 (そして {{ic|/var/log/audit/audit.log}}) を消去) してください。}} === プロファイルの構文 === プロファイルは人間が読める形式のテキストファイルとなっており {{ic|/etc/apparmor.d/}} に保存されます。バイナリを実行時にどう扱うかを記述します。基本的なプロファイルは以下のようになります: {{hc|/etc/apparmor.d/usr.bin.test| #include <tunables/global> profile test /usr/lib/test/test_binary { #include <abstractions/base> # Main libraries and plugins /usr/share/TEST/** r, /usr/lib/TEST/** rm, # Configuration files and logs @{HOME}/.config/ r, @{HOME}/.config/TEST/** rw, } }} {{ic|@}} 記号が前に付くテキストは abstraction ({{ic|/etc/apparmor.d/abstractions/}}) や tunable ({{ic|/etc/apparmor.d/tunables/}}) あるいはプロファイルによって定義される変数を表します。{{ic|#include}} は他のプロファイルふを直接読み込みます。後ろに文字がいくつか付いているパスは [http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#File_access_rules アクセス権限] です。[http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#AppArmor_globbing_syntax AppArmor の globbing 構文] を使用したパターンマッチングが行われます。 ほとんどのユースケースは以下のステートメントで表すことができます: * {{ic|r}} — read: データの読み込み。 * {{ic|w}} — write: ファイルの作成・削除・編集と拡張。 * {{ic|m}} — memory map executable: ファイルを実行可能とメモリマップ。 * {{ic|x}} — execute: ファイルを実行。[http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#Execute_rules 修飾子] を付ける必要があります。 上記の権限は任意アクセス制御 (DAC) によって与えられる権限を上回ることはできません。 詳しいガイドは [http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference ドキュメント] を見てください。 === プロファイルの解析 === プロファイルをロード・アンロード・リロード・確認するには {{ic|apparmor_parser}} を使います。デフォルトでは新しいプロファイルをロードするようになっており ({{ic|-a}})、既存のプロファイルを上書きするには {{ic|-r}} オプションを、プロファイルを削除するには {{ic|-R}} を使います。各操作では複数のプロファイルを指定できます。詳しくは {{man|8|apparmor_parser|url=http://man.cx/apparmor_parser(8)}} の man ページを参照してください。 == セキュリティについての考察 == === リンクによるパスベースの MAC の迂回 === 標準の POSIX セキュリティモデルでは、ハードリンクを使うことで AppArmor は迂回できるようになっています。ただし、カーネルには以下の設定で脆弱性を防ぐ機能が備わっています [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=800179c9b8a1e796e441674776d11cd4c05d61d7]: {{hc|/usr/lib/sysctl.d/50-default.conf|2= ... fs.protected_hardlinks = 1 fs.protected_symlinks = 1}} Ubuntu などのようにカーネルにパッチをあてる方法は必ずしも必要とされません。 == ヒントとテクニック == === DENIED アクション時にデスクトップ通知を表示 === 通知デーモンは AppArmor によってプログラムのアクセスが拒否されたときにデスクトップ通知を表示します。ブートされるたびにパラメータを指定してスクリプトを起動する必要があります: # aa-notify -p -f /var/log/audit/audit.log --display $DISPLAY デーモンは監査イベントに依存しており、{{ic|-f}} を使うことでログ出力されるテキストファイルを指定できます。[[systemd]] がファイルにログ出力しないように {{ic|auditd.service}} を[[有効化]]してログファイルを {{ic|aa-notify}} に渡してください。動作させるのに特殊な監査イベントは必要ありません。したがってオーバーヘッドは[[#監査とプロファイルの作成|プロファイルを作成]]することに比べれば少なくなっています。 === プロファイルのキャッシュ === AppArmor は設定されたプロファイルをバイナリ形式に翻訳する必要があるため、プロファイルのロードにはしばらく時間がかかります。煩わしいことに起動時間がかなり伸びてしまいます。 そのような問題を解決するため AppArmor では {{ic|/etc/apparmor.d/cache/}} にプロファイルをキャッシュすることができます。ただしキャッシュはデフォルトで無効になっているため {{ic|apparmor_parser}} で手動でキャッシュする必要があります。キャッシュに書き込むには {{ic|-W}} を使用し ({{ic|-T}} で既存のプロファイルを上書き)、{{ic|-r}} でプロファイルをリロードします。他の引数については[[#プロファイルの解析|プロファイルの解析]]を見てください。 == 参照 == * [http://wiki.apparmor.net/ AppArmor wiki] * [http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference AppArmor Core Policy Reference] — プロファイルで利用できるオプションの詳しい解説 * [https://ubuntuforums.org/showthread.php?t=1008906 Ubuntu Tutorial] — 利用可能なユーティリティとプロファイルの作成に関する概要 * [https://help.ubuntu.com/community/AppArmor Ubuntu Wiki] — 基本的なコマンドの一覧 * [http://wiki.apparmor.net/index.php/AppArmor_versions AppArmor Versions] — バージョンの概要とリリースノートのリンク * {{man|5|apparmor.d|url=http://manpages.ubuntu.com/manpages/oneiric/man5/apparmor.d.5.html}} — AppArmor の設定ディレクトリの構造 * {{man|8|apparmor_parse|url=http://manpages.ubuntu.com/manpages/oneiric/man8/apparmor_parser.8.html}} — プロファイルをロード・アンロード・キャッシュ・出力する AppArmor のユーティリティ * [http://wiki.apparmor.net/index.php/Kernel_interfaces Kernel Interfaces] — AppArmor カーネルモジュールの低レベルインターフェイス * [https://wiki.ubuntu.com/ApparmorProfileMigration Apparmor Profile Migration] — Emergence of profiles * [[wikipedia:Linux Security Modules]] — AppArmor が使用している Linux カーネルモジュール * [https://launchpad.net/apparmor Launchpad プロジェクトページ] * {{Bug|21406}} — AppArmor の導入に関する議論
このページで使用されているテンプレート:
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:META Related articles start
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Related
(
ソースを閲覧
)
テンプレート:Related articles end
(
ソースを閲覧
)
テンプレート:Related articles start
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
AppArmor
に戻る。
検索
検索
AppArmorのソースを表示
話題を追加