Docker --privileged
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
影響するもの
特権コンテナを実行すると、無効にする保護は次のとおりです。
/devのマウント
特権コンテナでは、すべてのデバイスが/dev/
でアクセス可能です。したがって、ホストのディスクをマウントすることでエスケープできます。
読み取り専用のカーネルファイルシステム
カーネルファイルシステムは、プロセスがカーネルの動作を変更するためのメカニズムを提供します。しかし、コンテナプロセスに関しては、カーネルに対する変更を防ぎたいと考えています。したがって、カーネルファイルシステムをコンテナ内で読み取り専用としてマウントし、コンテナプロセスがカーネルを変更できないようにします。
カーネルファイルシステムのマスキング
/proc ファイルシステムは選択的に書き込み可能ですが、セキュリティのために、特定の部分は tmpfs でオーバーレイされ、コンテナプロセスが機密領域にアクセスできないように保護されています。
tmpfs はすべてのファイルを仮想メモリに保存するファイルシステムです。tmpfs はハードドライブ上にファイルを作成しません。したがって、tmpfs ファイルシステムをアンマウントすると、その中に存在するすべてのファイルは永遠に失われます。
Linuxの能力
コンテナエンジンは、デフォルトでコンテナ内で何が行われるかを制御するために、限られた数の能力でコンテナを起動します。特権のあるものは、すべての 能力にアクセスできます。能力について学ぶには、次を読んでください:
Linux Capabilitiesコンテナに対して --privileged
モードで実行せずに、--cap-add
および --cap-drop
フラグを使用して利用可能な機能を操作できます。
Seccomp
Seccomp は、コンテナが呼び出すことができる syscalls を 制限 するのに役立ちます。デフォルトの seccomp プロファイルは、docker コンテナを実行する際にデフォルトで有効ですが、特権モードでは無効になります。Seccomp についての詳細はこちらをご覧ください:
Seccompまた、Kubernetes クラスターで Docker(または他の CRI)を使用する場合、seccomp フィルターはデフォルトで無効になっていることに注意してください。
AppArmor
AppArmor は、コンテナ を 制限された リソース の セット に制限するためのカーネル拡張で、プログラムごとのプロファイルを使用します。--privileged
フラグを使用して実行すると、この保護は無効になります。
SELinux
--privileged
フラグを使用してコンテナを実行すると、SELinux ラベルが無効になり、通常は unconfined
のコンテナエンジンのラベルを継承し、コンテナエンジンと同様のフルアクセスが付与されます。ルートレスモードでは container_runtime_t
が使用され、ルートモードでは spc_t
が適用されます。
影響を受けないもの
ネームスペース
ネームスペースは --privileged
フラグの影響を受けません。セキュリティ制約が有効になっていないにもかかわらず、システム上のすべてのプロセスやホストネットワークを見ることはできません。ユーザーは --pid=host
, --net=host
, --ipc=host
, --uts=host
コンテナエンジンフラグを使用して、個々のネームスペースを無効にすることができます。
ユーザー名前空間
デフォルトでは、コンテナエンジンはユーザー名前空間を利用しませんが、ルートレスコンテナはファイルシステムのマウントや複数のUIDを使用するためにそれを必要とします。 ルートレスコンテナに不可欠なユーザー名前空間は無効にできず、特権を制限することでセキュリティを大幅に向上させます。
参考文献
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated