
Dockerエクスプロイト
このリポジトリは、「Dirty Pipe」権限昇格脆弱性を安全に実演・分析するための、自己完結型の対話型Docker環境を提供します。セキュリティ専門家が、制御された環境で重要なカーネルレベルのエクスプロイトの仕組みを理解するための教育ツールとして設計されています。
Dirty Pipeは、Linuxカーネル(バージョン5.8以降に影響)で発見された重大な脆弱性です。これにより、ローカルの非特権ユーザーが任意の読み取り専用ファイルのデータを上書きできるようになりました。
影響は深刻です。/etc/passwdやSUIDバイナリなどの機密ファイルを上書きすることで、攻撃者は簡単に権限をrootに昇格させ、システムの完全な制御を獲得できます。この脆弱性は、Linuxの基本的なセキュリティ制御である標準的なファイルパーミッションチェックをバイパスするため、特に危険でした。
このプロジェクトでは、Dockerを使用して安全で隔離された、意図的に脆弱性を持たせた環境を作成します。これにより、ホストマシンを危険にさらすことなく誰でもエクスプロイトを学習できます。
主要コンポーネントは以下の通りです。
Dockerfile: 脆弱なコンテナの設計図を定義します。Dirty Pipeの影響を受けることが知られている古いベースイメージ(debian:bullseye-20210927-slim)を使用し、セットアッププロセスを自動化します。exploit.c: Max Kellermannによる元の概念実証に基づいて、エクスプロイトロジックを実装したCコードです。Makefile: コンテナ内でCコードを実行可能バイナリにコンパイルするためのシンプルなmakefileです。このウォークスルーでは、環境の構築からエクスプロイトの実行までをガイドします。
前提条件: システムにDockerがインストールされ、実行中である必要があります。
ターミナルを開き、このプロジェクトをクローンします。
git clone https://github.com/mrchucu1/CVE-2022-0847-Docker.git
cd CVE-2022-0847-Docker
docker buildコマンドを使用してコンテナイメージを作成します。Dockerfileがすべての依存関係を処理し、エクスプロイトコードをコンパイルします。
docker build -t dirty-pipe-demo .
次に、インタラクティブモードでコンテナを実行します。--rmフラグは終了時にコンテナを削除し、-itは対話型シェルを提供します。
docker run --rm -it dirty-pipe-demo
コンテナ内で、非特権ユーザー(hacker@...:/$)としてシェルが起動します。
次に、プリコンパイルされたエクスプロイトを実行します。
# You are currently an unprivileged user.
# Your prompt looks like this: hacker@<container_id>:/$
#
# Now run the exploit...
./exploit
成功! エクスプロイトがSUIDバイナリを上書きし、rootシェルを付与します。ターミナルのプロンプトが$から#に変わり、root権限を取得したことを示します。
# The exploit has succeeded.
# Your prompt is now a root shell: # whoami
root
#
このプロジェクトは単なるスクリプトの実行ではありません。クラウドセキュリティエンジニアとしての私の業務に関連する、重要なセキュリティ原則の実践的なデモンストレーションです。
このプロジェクトとそのコードは、教育および研究目的のみを意図しています。明示的な許可なく、いかなるシステムでもこのエクスプロイトを使用しないでください。