WindowsホストでGOAD環境を作ってみた

ペンテスターの遊び場

Game of Active Directory (GOAD)

logo_GOAD.png

GOAD のロゴ (https://github.com/Orange-Cyberdefense/GOAD/blob/main/docs/img/logo_GOAD.png)

GOAD はペンテスト用の Active Directory ラボプロジェクトです。このラボの目的は、ペンテスターに一般的な攻撃手法を練習するための脆弱な Active Directory 環境を提供することです。

GOAD に含まれている脆弱性は 2024/05/30 現在で45個あり、例として PTH, Zerologon, Kerberoasting, Ntlm relay, Constrained delegation などがあります。

GOAD プロジェクトには4種類のラボ環境があり、それぞれの構成は以下の通りです。

  • GOAD:5つのVM(2フォレスト、3ドメイン)から成る完全な GOAD ラボ

GOAD_schema.png

GOAD の構成図 (https://github.com/Orange-Cyberdefense/GOAD/blob/main/docs/img/GOAD_schema.png)

  • GOAD-Light:3つのVM(1フォレスト、2ドメイン)かる成る小規模 PC 向けのライト GOAD ラボ

GOAD-Light_schema.png

GOAD-Light の構成図 (https://github.com/Orange-Cyberdefense/GOAD/blob/main/docs/img/GOAD-Light_schema.png)

  • SCCM:4つのVM(1フォレスト、1ドメイン)から成る Microsoft Configuration Manager がインストール済みのラボ

SCCMLAB_overview.png

SCCM の構成図 (https://github.com/Orange-Cyberdefense/GOAD/blob/main/docs/img/SCCMLAB_overview.png)

  • NHA:5つのVM(2ドメイン)から成るスキーマが提供されていないチャレンジラボ

私は複数フォレスト環境で遊んでみたかったので、今回は GOAD ラボを選択しました。

Windows ホストで GOAD ラボを構築

GOAD の Requirements を確認すると、Linux ホスト環境でしかテストされていない旨が書かれています。

The lab intend to be installed from a Linux host and was tested only on this.

しかし、Windows ホスト環境でも GOAD ラボの構築に成功している人がおり、公式リポジトリにも Windows ホストで GOAD ラボを構築する方法がまとめられています。

公式リポジトリはテキストのみの簡素な手順であるため、この記事にスクリーンショットやエラー対処を含む詳細な手順をまとめます。GOAD ラボ構築の参考になれば幸いです。

検証環境

  • Host OS: Windows 11 Home (23H2)
    • CPU: AMD Ryzen 9 3900XT
    • RAM: 64GB
    • VMware Workstation 16 Pro
    • Vagrant: 2.4.1
      • Vagrant VMware Utility: 1.0.22
    • Vagrant Plugin
      • vagrant-vmware-desktop: 3.0.3
      • vagrant-reload: 0.0.1
  • Ubuntu VM: 22.04.4 LTS
    • Python: 3.10.12
    • pip: 24.0
      • ansible-core: 2.12.6
      • pywinrm: 0.4.3
  • GOAD: 606d9cd

RAM は GOAD ラボのみを動かすのであれば 32GB で足りると思いますが、他のアプリも同時に起動したい場合は 64GB あると良さそうです。

ディスクスペースは Vagrant boxes が 47.3GB、Ubuntu VM が 27.5GB、GOAD VM が 47.0GB で合計 121.8GB 消費していました。スナップショットを撮るとさらに消費するため、200GB 程度用意しておくと安心です。

Vagrant で GOAD VM を作成

まず初めに Vagrant, Vagrant VMware Utility をダウンロードし、インストールします。

Vagrant のインストールが完了したら、Vagrant Plugin をインストールします。

vagrant plugin install vagrant-vmware-desktop
vagrant plugin install vagrant-reload

プラグインがインストールされていることを確認します。

vagrant plugin list

image-20240530022110868

次に GOAD リポジトリをクローンまたは zip でダウンロードします。

zip の場合は展開し、Vagrantfile が置いてあるディレクトリまで移動します。(GOAD 以外のラボを構築する場合はパスを適宜読み替えてください。)

cd .\GOAD-main\ad\GOAD\providers\vmware\

vagrant のバージョンが 2.2.19 より大きい場合、vagrant up でエラーが発生してしまうため Vagrantfile に次の2行を追記します。

config.winrm.transport = "plaintext"
config.winrm.basic_auth_only = true

image-20240530040007172

vagrant up コマンドで VM を作成する。

vagrant up

image-20240530024304717

Note: ラボ構築でエラーが発生する場合は Troubleshooting を確認すると解決法が見つかるかもしれません。

全ての VM が作成されたら VMware から 編集 > 仮想ネットワーク エディタ… を開き、サブネットアドレスが 192.168.56.0 になっている仮想ネットワークの名前をメモしておきます。

image-20240530033402726

Ubuntu VM を作成

ここで作成する Ubuntu VM は1つ前の手順で作成した GOAD VM に Ansible でプロビジョニングを行うための環境です。

Ubuntu 22.04.4 TLS の iso ファイルをダウンロードします。

VMware から ホーム > 新規仮想マシンの作成 を開き、構成のタイプで カスタム を選択します。

image-20240530040945622

インストーラディスクイメージファイルにダウンロードした iso ファイルを選択します。Linux のユーザー名やパスワード、仮想マシン名、メモリ、CPUはPCのスペックと相談しながら適当に決めます。私の環境ではメモリ 16GB、CPU 8プロセッサを割り当てました。

image-20240530041444830

Ubuntu のインストーラーが起動したら指示に従って Ubuntu をインストールします。Ansible が動けば良いので Minimal Ubuntu のインストールを選択しました。

Ubuntu のインストールが完了したら、VMware からUbuntu 22.04.4 LTS を右クリックし、設定… > ハードウェア > 追加… > ネットワークアダプタ > 完了 でネットワークアダプタを追加します。追加したネットワークアダプタは カスタム を選択し、メモした GOAD ラボの仮想ネットワークを指定します。

image-20240530042942706

ネットワークアダプタが追加されたら Ubuntu の設定アプリを開き、Network > 歯車アイコン > IPv4 からIPアドレスを割り当てます。この際に GOAD VM とIPアドレスが被っていないことを確認してください。

image-20240530043719917

ネットワークに繋がったら Ubuntu VM と GOAD VM の間で疎通確認をします。

Ubuntu VM 側で ICMP パケットをキャプチャします。

sudo tcpdump -i ens36 icmp

GOAD-DC01 の Vagrant ユーザーにパスワード vagrant でログインし、PowerShell で Ubuntu VM に ping を実行します。

ping 192.168.56.129

image-20240530044759336

Ubuntu VM で ICMP パケットを受信していれば成功です。

image-20240530044941882

Ansible を使ったプロビジョニング

Ubuntu VM にプロビジョニングに必要なパッケージをインストールします。

sudo apt update
sudo apt install python3-pip sshpass lftp rsync openssh-client

pip install --upgrade pip
pip install ansible-core==2.12.6
pip install pywinrm

git clone https://github.com/Orange-Cyberdefense/GOAD
cd GOAD/ansible
ansible-galaxy install -y requirements.yml

Warning: Python は 3.8 以上、ansible-core は 2.12.6 である必要があります。

goad.sh を使ってプロビジョニングを実行します。私の環境ではビルドが完了するまでに79分55秒掛かりました。気長に待ちましょう☕

cd ../
./goad.sh -t install -l GOAD -p vmware -m local -a

image-20240529105435969

エラーが発生する場合は Troubleshooting などでエラーを解決し、エラーが発生しなくなるまで goad.sh を実行します。下記のコマンドのように、特定のプロビジョニングのみを行うことも可能です。

ansible-playbook -i ../ad/GOAD/data/inventory -i ../ad/GOAD/providers/vmware/inventory ad-child_domain.yml

プロビジョニングが完了したら NetExec を使って GOAD ラボ環境のIPアドレス、マシン名、ドメイン名を取得してみます。

nxc smb 192.168.56.0/24

image-20240529211656238

これで GOAD ラボの構築は完了です!ラボを楽しみましょう!

ちなみに GOAD で使用している Windows Server は180日間の無料期間が過ぎると使えなくなってしまいます。各サーバーにライセンスを入力するか、ラボを再構築することで対処する必要があるのでご注意ください。