
AzureでTerraformとAnsibleを用いたBlue Team検出ラボ
このプロジェクトは、オーケストレーションされたブルーチームラボを作成するための一連の Terraform および Ansible スクリプトを含んでいます。このプロジェクトの目標は、レッドチームとブルーチームに、最新のWindows環境でさまざまな攻撃やフォレンジックアーティファクトをテストし、生成されたデータに対する「SOC的な」ビューを得るためのアドホックな検出ラボを展開する能力を提供することです。
注意: このラボは意図的に安全ではないように設計されています。このシステムをあなたが気にかけているネットワークに接続しないでください。

このセットアップを使用するには、システムにいくつかの機能をインストールする必要があります。
# Step 1 - Azure CLI のインストール。詳細は https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
# Step 2 - Terraform のインストール。詳細は https://learn.hashicorp.com/tutorials/terraform/install-cli
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform
# Step 3 - Ansible のインストール。詳細は https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt update
sudo apt install ansible
# Step 4 - 最後に、リモート接続やその他のアクティビティに必要な python とさまざまなパッケージをインストールします
sudo apt install python3 python3-pip
pip3 install pywinrm requests msrest msrestazure azure-cli
pip3 install -r https://raw.githubusercontent.com/ansible-collections/azure/refs/heads/dev/requirements.txt
すべての前提条件がインストールされたら、次の一連の手順を実行します:
# Azure にコマンドラインからログインし、アクセストークンが有効であることを確認します
az login
# リポジトリをクローンし、BlueTeam.Lab フォルダに移動します
git clone https://github.com/op7ic/BlueTeam.Lab.git && cd BlueTeam.Lab
# Terraform を初期化し、計画を開始します
terraform init && terraform plan
# 以下のコマンドを使用してラボを作成します
terraform apply -auto-approve
# Ansible を使用して環境のレイアウトを確認します
cd ansible && ANSIBLE_CONFIG=./ansible.cfg ansible-inventory --graph -i inventory.azure_rm.yml -vvv && cd ../
# 個々のホストの IP やその他のセットアップ詳細を確認するには、次のコマンドを使用します:
cd ansible && ANSIBLE_CONFIG=./ansible.cfg ansible-inventory -i inventory.azure_rm.yml -vvv --list && cd ../
# 完了したら、次のコマンドを使用してラボを破棄します:
terraform destroy -auto-approve
# 実行時間を計測したい場合は、次のコマンドを使用します:
start_time=`date +%s` && terraform apply -auto-approve && end_time=`date +%s` && echo execution time was `expr $end_time - $start_time` s
#注意: 選択したハードウェアによっては、すべての構成に約2時間かかります。
Terraform 変数は、このデプロイメントで使用されるオペレーティングシステムの種類を設定します。ランタイム変数を簡単に変更することで、Active Directory (AD) 全体を実行するために異なる OS を指定できます。デフォルトのオプションは、ワークステーションに Windows 10 Enterprise、ドメインコントローラーに Windows Server 2019 Datacenter を使用することです。以下は、環境全体を異なる OS バージョンに変更するために使用できるいくつかの一般的な構成オプションの例です:
# ワークステーションに Windows 10 Enterprise、DC に Server 2019 Datacenter を使用 (デフォルト オプション)
terraform apply -auto-approve
# ワークステーションに Windows 11 Enterprise、DC に Server 2019 Datacenter を使用
terraform apply -auto-approve -var="workstation_os=Windows-11" -var="workstation_SKU=win11-21h2-ent" -var="workstations_vm_size=Standard_DC2s_v2"
# ワークステーションに Windows 11 Enterprise、DC に Server 2012 Datacenter を使用
terraform apply -auto-approve -var="workstation_os=Windows-11" -var="workstation_SKU=win11-21h2-ent" -var="workstations_vm_size=Standard_DC2s_v2" -var="dc_os=WindowsServer" -var="dc_SKU=2012-Datacenter"
# ワークステーションに Windows 11 Enterprise、DC に Server 2016 Datacenter を使用
terraform apply -auto-approve -var="workstation_os=Windows-11" -var="workstation_SKU=win11-21h2-ent" -var="workstations_vm_size=Standard_DC2s_v2" -var="dc_os=WindowsServer" -var="dc_SKU=2016-Datacenter"
# ワークステーションに Windows 10 Pro N、DC に Server 2012 Datacenter を使用
terraform apply -auto-approve -var="workstation_os=Windows-10" -var="workstation_SKU=21h1-pron" -var="dc_os=WindowsServer" -var="dc_SKU=2012-Datacenter"
コマンド az vm image list を使用して、デプロイメントのさまざまな OS バージョンを特定できます。
次のセクションでは、このラボを構成するさまざまなコンポーネントと、構成ファイルを変更してセットアップを変更する方法について説明します:
ラボが構築されると、Terraform はシステムの実際の場所と関連する資格情報を出力します。出力例を以下に示します。
Network Setup:
Domain Controller = xx.xx.xx.xx
Workstation DETECTION1: xx.xx.xx.xx
Workstation DETECTION2: xx.xx.xx.xx
Wazuh Server IP = xx.xx.xx.xx
Wazuh Web Interface = https://xx.xx.xx.xx:443/
Velociraptor Web Inteface: = https://xx.xx.xx.xx:10000/
FleetDM Web Interface: = https://xx.xx.xx.xx:9999/
Credentials:
Domain Admin:
blueteam.lab\blueteam BlueTeamDetection0%%%
Local Admin on Workstations:
blueteam BlueTeamDetection0%%%
Wazuh Server SSH Login:
blueteam BlueTeamDetection0%%%
Wazuh Logins:
wazuh BlueTeamDetection0%%%
admin BlueTeamDetection0%%%
kibanaserver BlueTeamDetection0%%%
kibanaro BlueTeamDetection0%%%
logstash BlueTeamDetection0%%%
readall BlueTeamDetection0%%%
snapshotrestore BlueTeamDetection0%%%
wazuh_admin BlueTeamDetection0%%%
wazuh_user BlueTeamDetection0%%%
Velociraptor Web Inteface Login:
blueteam BlueTeamDetection0%%%
FleetDM Web Inteface Login:
[email protected] BlueTeamDetection0%%%
RDP to Domain Controller:
xfreerdp /v:xx.xx.xx.xx /u:blueteam.lab\\blueteam '/p:BlueTeamDetection0%%%' +clipboard /cert-ignore
RDP to Workstation DETECTION1: xx.xx.xx.xx
xfreerdp /v:xx.xx.xx.xx /u:blueteam '/p:BlueTeamDetection0%%%' +clipboard /cert-ignore
RDP to Workstation DETECTION2: xx.xx.xx.xx
xfreerdp /v:xx.xx.xx.xx /u:blueteam '/p:BlueTeamDetection0%%%' +clipboard /cert-ignore
次の表は、デフォルト構成で BlueTeamLab 環境全体に適用される一連のファイアウォール規則をまとめたものです。必要に応じて、main.tf ファイルの Firewall Rule Setup セクションで新しいファイアウォール規則を追加するように変更してください。
内部では、デフォルト構成でこの環境に対して10.0.0.0/16 範囲の以下の静的 IP とホスト名が使用されています:
インストール中に、以下のデフォルトの資格情報が作成されます。実際に構成された資格情報の出力は、完全なデプロイプロセスが完了した後に表示されます。
デフォルトの資格情報を変更するには、domain_setup.yml ファイルのユーザー名とパスワードを変更します。







このプロジェクトへのコントリビューション、修正、改善は、GitHub の Issue またはプルリクエストとして直接送信できます。
| - ansible
| | - ansible.cfg
| | - domain-controller.yml
| | - domain-member.yml
| | - domain_setup.yml
| | - group_vars
| | | - all
| | | - wazuh
| | - inventory.azure_rm.yml
| | - roles
| | | - domain-controller
| | | | - tasks
| | | | | - main.yml
| | | - domain-member
| | | | - tasks
| | | | | - main.yml
| | | - fleetserver
| | | | - tasks
| | | | | - main.yml
| | | | - templates
| | | | | - config.yml.j2
| | | | | - ssl.crt
| | | | | - ssl.key
| | | | | - systemd-fleetm.service.j2
| | | - monitor
| | | | - tasks
| | | | | - main.yml
| | | - osqueryagent
| | | | - tasks
| | | | | - main.yml
| | | | - templates
| | | | | - osquery.conf
| | | | | - osquery.flags.j2
| | | | | - osquery.key.j2
| | | | | - ssl.crt
| | | | | - ssl.key
| | | | - vars
| | | | | - main.yml
| | | - sysmon
| | | | - handlers
| | | | | - main.yml
| | | | - tasks
| | | | | - main.yml
| | | | - vars
| | | | | - main.yml
| | | - velociraptorclient
| | | | - tasks
| | | | | - main.yaml
| | | | - templates
| | | | | - clientconfig.yml.j2
| | | | - vars
| | | | | - main.yml
| | | - velociraptorserver
| | | | - tasks
| | | | | - main.yaml
| | | | - templates
| | | | | - serverconfig.yml.j2
| | | | | - systemd-velociraptor.service.j2
| | | | - vars
| | | | | - main.yml
| | | - wazuhagent
| | | | - tasks
| | | | | - main.yml
| | | | - templates
| | | | | - ossec.conf.j2
| | | | - vars
| | | | | - main.yml
| | | - wazuhserver
| | | | - tasks
| | | | | - main.yaml
| | | | - templates
| | | | | - sysmon_rules.xml
| | | | | - unattended-installation.sh
| | | | | - wazuh-passwords-tool.sh.j2
| | | - winlogbeat
| | | | - tasks
| | | | | - main.yml
| | | | - templates
| | | | | - config.yml.j2
| | | | - vars
| | | | | - main.yml
| | - wazuh-server.yml
| - documentation
| | - osquery.md
| | - pic
| | | - map.png
| | | - wazuh-logs.PNG
| | | - wazuh-pdc.PNG
| | | - winlogbeat.PNG
| | - sysmon.md
| | - velociraptor.md
| | - wazuh.md
| | - winlogbeat.md
| | - winmember.md
| - main.tf
| - README.md
| - terraform.tfstate
| - terraform.tfstate.backup
| - variables.tf
Disk wks-1-os-disk already exists in resource group BLUETEAM-LAB. Only CreateOption.Attach is supported. またはこれに似たエラーが発生します。
terraform destroy -auto-approve && terraform apply -auto-approve を再実行して、ラボを破棄して再作成してください。このエラーは、Azure がすべてのディスクを適切にクリーンアップせず、同じ名前のリソースが残っている場合に発生するようです。Operation 'startTenantUpdate' is not allowed on VM 'domain-controller' since the VM is marked for deletion. You can only retry the Delete operation (or wait for an ongoing one to complete). またはこれに似たエラーが発生します。
terraform destroy -auto-approve && terraform apply -auto-approve を再実行して、ラボを破棄して再作成してください。このエラーは、Azure がすべてのリソースを適切にクリーンアップせず、名前や場所の競合のためにラボを作成する前に破棄する必要のある残骸が残っている場合に発生するようです。Network security group windows-nsg cannot be deleted because old references for the following Nics またはこれに似たエラーが発生します。
terraform destroy -auto-approve && terraform apply -auto-approve を再実行して、ラボを破棄して再作成してください。このエラーは、Azure がすべてのリソースを適切にクリーンアップせず、名前や場所の競合のためにラボを作成する前に破棄する必要のある残骸が残っている場合に発生するようです。なぜ Azure なのか?
このコードのかなりの割合は、Christophe Tafani-Dereeper 氏の Adaz から借用され、適応されました。このラボ環境を設計するための基盤を構築してくださったことに、多大なる感謝を申し上げます。
| ルール名 | ネットワークセキュリティグループ | 送信元ホスト | 送信元ポート | 宛先ホスト | 宛先ポート |
|---|
| Allow-RDP | windows-nsg | あなたのパブリックIP | * | PDC-1, DETECTION1, DETECTION2 | 3389 |
| Allow-WinRM | windows-nsg | あなたのパブリックIP | * | PDC-1, DETECTION1, DETECTION2 | 5985 |
| Allow-WinRM-secure | windows-nsg | あなたのパブリックIP | * | PDC-1, DETECTION1, DETECTION2 | 5986 |
| Allow-SMB | windows-nsg | あなたのパブリックIP | * | PDC-1, DETECTION1, DETECTION2 | 445 |
| Allow-SSH | wazuh-nsg | あなたのパブリックIP | * | Wazuh | 22 |
| Allow-Wazuh-Manager | wazuh-nsg | あなたのパブリックIP | * | Wazuh | 1514-1516 |
| Allow-Wazuh-Elasticsearch | wazuh-nsg | あなたのパブリックIP | * | Wazuh | 9200 |
| Allow-Wazuh-API | wazuh-nsg | あなたのパブリックIP | * | Wazuh | 55000 |
| Allow-Elasticsearch-Cluster | wazuh-nsg | あなたのパブリックIP | * | Wazuh | 9300-9400 |
| Allow-Wazuh-GUI | wazuh-nsg | あなたのパブリックIP | * | Wazuh | 443 |
| Allow-Velociraptor-Client-Connections | wazuh-nsg | あなたのパブリックIP | * | Wazuh | 8000 |
| Allow-Velociraptor-GUI | wazuh-nsg | あなたのパブリックIP | * | Wazuh | 10000 |
| Allow-Fleet-GUI | wazuh-nsg | あなたのパブリックIP | * | Wazuh | 9999 |
| ホスト | 役割 | 内部IP |
|---|
| PDC-1 | プライマリドメインコントローラー | 10.0.10.10 |
| Wazuh | Wazuh Server、Velocidex Velociraptor インストールと FleetDM もホスト | 10.0.10.100 |
| DETECTION1 | Windows 10 ワークステーション 1 | 10.0.11.11 |
| DETECTION2 | Windows 10 ワークステーション 2 | 10.0.11.12 |
| ホスト | ログイン | パスワード | 役割 |
|---|
| PDC-1 | blueteam.lab\blueteam | BlueTeamDetection0%%% | blueteam.lab ドメインのドメイン管理者 |
| DETECTION1 | localadministrator | BlueTeamDetection0%%% | DETECTION1 ワークステーションのローカル管理者 |
| DETECTION2 | localadministrator | BlueTeamDetection0%%% | DETECTION2 ワークステーションのローカル管理者 |
| Wazuh | blueteam | BlueTeamDetection0%%% | Wazuh サーバーの SSH 資格情報 |
| Wazuh | wazuh | BlueTeamDetection0%%% | Wazuh 管理者 |
| Wazuh | admin | BlueTeamDetection0%%% | Wazuh 管理者 |
| Wazuh | kibanaserver | BlueTeamDetection0%%% | Wazuh サービスアカウント |
| Wazuh | kibanaro | BlueTeamDetection0%%% | Wazuh サービスアカウント |
| Wazuh | logstash | BlueTeamDetection0%%% | Wazuh サービスアカウント |
| Wazuh | readall | BlueTeamDetection0%%% | Wazuh サービスアカウント |
| Wazuh | snapshotrestore | BlueTeamDetection0%%% | Wazuh サービスアカウント |
| Wazuh | wazuh_admin | BlueTeamDetection0%%% | Wazuh サービスアカウント |
| Wazuh | wazuh_user | BlueTeamDetection0%%% | Wazuh サービスアカウント |
| Wazuh | blueteam | BlueTeamDetection0%%% | Velociraptor Web ポータルログイン |
| Wazuh | [email protected] | BlueTeamDetection0%%% | FleetDM Web ポータルログイン |
ネットワークセグメント、デプロイメントサイズ、その他の変数を変更するにはどうすればよいですか?
特定のデプロイメントの SKU を見つけるにはどうすればよいですか?
az vm list-skus --location westeurope --all --output table を使用して、デプロイメントに使用可能な SKU を見つけます。システム構築中に Max retries exceeded with url: /wsman が発生し、接続が拒否されます。
terraform apply -auto-approve を再実行して、損傷したホストを修復してください。