AppArmor
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
AppArmorは、プログラムごとのプロファイルを通じてプログラムに利用可能なリソースを制限するために設計されたカーネル拡張機能であり、ユーザーではなくプログラムに直接アクセス制御属性を結びつけることによって、必須アクセス制御(MAC)を効果的に実装します。このシステムは、プロファイルをカーネルにロードすることによって動作し、通常はブート時に行われ、これらのプロファイルはプログラムがアクセスできるリソース(ネットワーク接続、生ソケットアクセス、ファイル権限など)を決定します。
AppArmorプロファイルには2つの運用モードがあります:
強制モード:このモードは、プロファイル内で定義されたポリシーを積極的に強制し、これらのポリシーに違反する行動をブロックし、syslogやauditdなどのシステムを通じて違反の試みをログに記録します。
コンプライアンスモード:強制モードとは異なり、コンプライアンスモードはプロファイルのポリシーに反する行動をブロックしません。代わりに、制限を強制せずにこれらの試みをポリシー違反としてログに記録します。
カーネルモジュール:ポリシーの強制を担当します。
ポリシー:プログラムの動作とリソースアクセスのルールと制限を指定します。
パーサー:強制または報告のためにポリシーをカーネルにロードします。
ユーティリティ:AppArmorとのインターフェースを提供し、管理するためのユーザーモードプログラムです。
AppArmorプロファイルは通常、_/etc/apparmor.d/_に保存されます。
sudo aa-status
を使用すると、いくつかのプロファイルによって制限されているバイナリをリストできます。リストされた各バイナリのパスの「/」をドットに変更すると、指定されたフォルダー内のAppArmorプロファイルの名前が得られます。
例えば、/usr/bin/man_のためのapparmorプロファイルは、/etc/apparmor.d/usr.bin.man_にあります。
影響を受ける実行可能ファイルを示すために、絶対パスとワイルドカードがファイルを指定するために許可されています。
バイナリがファイルに対して持つアクセスを示すために、以下のアクセス制御を使用できます:
r (読み取り)
w (書き込み)
m (実行可能なメモリマップ)
k (ファイルロック)
l (ハードリンクの作成)
ix (新しいプログラムがポリシーを継承して別のプログラムを実行する)
Px (環境をクリーンアップした後、別のプロファイルの下で実行)
Cx (環境をクリーンアップした後、子プロファイルの下で実行)
Ux (環境をクリーンアップした後、制限なしで実行)
変数はプロファイル内で定義でき、プロファイルの外から操作できます。例えば: @{PROC} と @{HOME} (プロファイルファイルに #include <tunables/global> を追加)
許可ルールを上書きするための拒否ルールがサポートされています。
プロファイルの作成を簡単に始めるために、apparmorが役立ちます。apparmorがバイナリによって実行されるアクションを検査し、許可または拒否したいアクションを決定できるようにすることが可能です。 実行する必要があるのは次のコマンドです:
次に、別のコンソールでバイナリが通常実行するすべてのアクションを実行します:
次に、最初のコンソールで "s" を押し、記録されたアクションで無視、許可、またはその他の選択を示します。終了したら "f" を押すと、新しいプロファイルが /etc/apparmor.d/path.to.binary に作成されます。
矢印キーを使用して、許可/拒否/その他の選択を行うことができます
バイナリの apparmor プロファイルのテンプレートを作成することもできます:
デフォルトでは、作成されたプロファイルでは何も許可されていないため、すべてが拒否されます。例えば、バイナリが/etc/passwd
を読み取ることを許可するには、/etc/passwd r,
のような行を追加する必要があります。
その後、新しいプロファイルを強制することができます。
次のツールはログを読み取り、ユーザーに検出された禁止されたアクションのいくつかを許可するかどうかを尋ねます:
矢印キーを使用して、許可/拒否/その他の選択を行うことができます
実行可能ファイル service_bin
の /var/log/audit/audit.log からの AUDIT および DENIED ログの例:
この情報は次のコマンドを使用して取得することもできます:
dockerのdocker-profileプロファイルがデフォルトで読み込まれることに注意してください:
デフォルトでは、Apparmor docker-default プロファイルは https://github.com/moby/moby/tree/master/profiles/apparmor から生成されます。
docker-default プロファイルの概要:
ネットワークへのすべてのアクセス
能力は定義されていません(ただし、基本的なベースルールを含むことでいくつかの能力が追加されます。つまり、#include <abstractions/base>)
/procファイルへの書き込みは許可されていません
/procおよび**/sysの他のサブディレクトリ**/ファイルへの読み取り/書き込み/ロック/リンク/実行アクセスは拒否されます
マウントは許可されていません
Ptraceは、同じ apparmor プロファイルによって制限されたプロセスでのみ実行できます
docker コンテナを実行すると、次の出力が表示されるはずです:
注意してほしいのは、apparmorはデフォルトでコンテナに付与されたcapabilities privilegesさえもブロックするということです。例えば、SYS_ADMIN capabilityが付与されていても、/proc内に書き込む権限をブロックすることができます。なぜなら、デフォルトのdocker apparmorプロファイルがこのアクセスを拒否するからです:
あなたはその制限を回避するためにapparmorを無効にする必要があります:
注意していただきたいのは、デフォルトでは AppArmor は コンテナが内部から フォルダをマウントすることを 禁止する ということです。SYS_ADMIN 権限があってもです。
また、docker コンテナに capabilities を 追加/削除 することができます(これは AppArmor や Seccomp のような保護方法によって制限されます):
--cap-add=SYS_ADMIN
で SYS_ADMIN
権限を付与
--cap-add=ALL
ですべての権限を付与
--cap-drop=ALL --cap-add=SYS_PTRACE
ですべての権限を削除し、SYS_PTRACE
のみを付与
通常、docker コンテナ内で 特権のある権限 が利用可能であることを 発見 したが、エクスプロイトの一部が機能していない 場合、これは docker apparmor がそれを防いでいる からです。
(例は こちら から)
AppArmor の機能を示すために、次の行を追加した新しい Docker プロファイル “mydocker” を作成しました:
プロファイルを有効にするには、次の手順を実行する必要があります:
プロファイルをリストするには、次のコマンドを実行できます。以下のコマンドは、私の新しいAppArmorプロファイルをリストしています。
以下に示すように、AppArmorプロファイルが「/etc」への書き込みアクセスを防止しているため、「/etc」を変更しようとするとエラーが発生します。
コンテナが実行しているapparmorプロファイルを見つけるには、次のコマンドを使用します:
次に、以下の行を実行して使用されている正確なプロファイルを見つけることができます:
In the weird case you can modify the apparmor docker profile and reload it. あなたは制限を削除し、「バイパス」することができます。
AppArmorはパスベースです。これは、たとえそれが**/proc
のようなディレクトリ内のファイルを保護しているとしても、コンテナの実行方法を構成できる場合、ホストのprocディレクトリを/host/proc
にマウント**することができ、AppArmorによって保護されなくなることを意味します。
このバグでは、特定のリソースでperlの実行を防いでいる場合でも、最初の行に**#!/usr/bin/perl
**を指定したシェルスクリプトを作成し、ファイルを直接実行することで、あなたが望むものを実行できる例を見ることができます。例えば:
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)