
Blue Team-Erkennungslabor erstellt mit Terraform und Ansible in Azure.
Dieses Projekt enthält eine Reihe von Terraform- und Ansible-Skripten, um ein orchestriertes BlueTeam-Labor zu erstellen. Das Ziel dieses Projekts ist es, den roten und blauen Teams die Möglichkeit zu geben, ein Ad-hoc-Erkennungslabor bereitzustellen, um verschiedene Angriffe und forensische Artefakte in der neuesten Windows-Umgebung zu testen und dann eine „SOC-ähnliche“ Ansicht der generierten Daten zu erhalten.
HINWEIS: Dieses Labor ist bewusst unsicher gestaltet. Bitte verbinden Sie dieses System nicht mit einem Netzwerk, das Ihnen wichtig ist.

Auf Ihrem System müssen eine Reihe von Funktionen installiert sein, um dieses Setup verwenden zu können.
# Step 1 - Install Azure CLI. More details on https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
# Step 2 - Install Terraform. More details on 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 - Install Ansible. More details on 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 - Finally install python and various packages needed for remote connections and other activities
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
Sobald alle Voraussetzungen installiert sind, führen Sie die folgenden Schritte aus:
# Log in to Azure from command line to ensure that the access token is valid
az login
# Clone Repository and move to BlueTeam.Lab folder
git clone https://github.com/op7ic/BlueTeam.Lab.git && cd BlueTeam.Lab
# Initialize Terraform and begin planning
terraform init && terraform plan
# Create your lab using the following command.
terraform apply -auto-approve
# Verify the layout of your environment using Ansible
cd ansible && ANSIBLE_CONFIG=./ansible.cfg ansible-inventory --graph -i inventory.azure_rm.yml -vvv && cd ../
# To see IPs of individual hosts and other setup details use the following command:
cd ansible && ANSIBLE_CONFIG=./ansible.cfg ansible-inventory -i inventory.azure_rm.yml -vvv --list && cd ../
# Once done, destroy your lab using the following command:
terraform destroy -auto-approve
# If you would like to time the execution us following command:
start_time=`date +%s` && terraform apply -auto-approve && end_time=`date +%s` && echo execution time was `expr $end_time - $start_time` s
#NOTE: It will take about two hours to configure it all, depending on your selected hardware.
Terraform Variablen legen den Typ der für diese Bereitstellung verwendeten Betriebssysteme fest. Eine einfache Änderung der Laufzeitvariablen ermöglicht es, verschiedene Betriebssysteme für die gesamte Active Directory (AD) auszuführen. Die Standardoption ist die Verwendung von Windows 10 Enterprise für Workstations und Windows Server 2019 Datacenter für Domain Controller. Hier sind Beispiele für einige gängige Konfigurationsoptionen, die verwendet werden können, um die gesamte Umgebung auf verschiedene Betriebssystemversionen zu ändern:
# Use Windows 10 Enterprise for Workstations and Server 2019 Datacenter for DC (default option)
terraform apply -auto-approve
# Use Windows 11 Enterprise for Workstations and Server 2019 Datacenter for DC
terraform apply -auto-approve -var="workstation_os=Windows-11" -var="workstation_SKU=win11-21h2-ent" -var="workstations_vm_size=Standard_DC2s_v2"
# Use Windows 11 Enterprise for Workstations and Server 2012 Datacenter for DC
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"
# Use Windows 11 Enterprise for Workstations and Server 2016 Datacenter for DC
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"
# Use Windows 10 Pro N for Workstations and Server 2012 Datacenter for DC
terraform apply -auto-approve -var="workstation_os=Windows-10" -var="workstation_SKU=21h1-pron" -var="dc_os=WindowsServer" -var="dc_SKU=2012-Datacenter"
Der Befehl az vm image list kann verwendet werden, um verschiedene Betriebssystemversionen für die Bereitstellung zu identifizieren.
Im folgenden Abschnitt werden die verschiedenen Komponenten dieses Labors sowie Details zur Änderung der Konfigurationsdateien beschrieben, um das Setup anzupassen:
Sobald das Labor erstellt ist, gibt Terraform den tatsächlichen Standort der Systeme und die zugehörigen Anmeldeinformationen aus. Ein Beispiel für die Ausgabe finden Sie unten.
Netzwerk-Setup:
Domänencontroller = xx.xx.xx.xx
Workstation DETECTION1: xx.xx.xx.xx
Workstation DETECTION2: xx.xx.xx.xx
Wazuh-Server-IP = xx.xx.xx.xx
Wazuh-Weboberfläche = https://xx.xx.xx.xx:443/
Velociraptor-Weboberfläche: = https://xx.xx.xx.xx:10000/
FleetDM-Weboberfläche: = https://xx.xx.xx.xx:9999/
Anmeldeinformationen:
Domänenadministrator:
blueteam.lab\blueteam BlueTeamDetection0%%%
Lokaler Administrator auf Workstations:
blueteam BlueTeamDetection0%%%
Wazuh-Server-SSH-Anmeldung:
blueteam BlueTeamDetection0%%%
Wazuh-Anmeldungen:
wazuh BlueTeamDetection0%%%
admin BlueTeamDetection0%%%
kibanaserver BlueTeamDetection0%%%
kibanaro BlueTeamDetection0%%%
logstash BlueTeamDetection0%%%
readall BlueTeamDetection0%%%
snapshotrestore BlueTeamDetection0%%%
wazuh_admin BlueTeamDetection0%%%
wazuh_user BlueTeamDetection0%%%
Velociraptor-Weboberflächen-Anmeldung:
blueteam BlueTeamDetection0%%%
FleetDM-Weboberflächen-Anmeldung:
[email protected] BlueTeamDetection0%%%
RDP zum Domänencontroller:
xfreerdp /v:xx.xx.xx.xx /u:blueteam.lab\\blueteam '/p:BlueTeamDetection0%%%' +clipboard /cert-ignore
RDP zur Workstation DETECTION1: xx.xx.xx.xx
xfreerdp /v:xx.xx.xx.xx /u:blueteam '/p:BlueTeamDetection0%%%' +clipboard /cert-ignore
RDP zur Workstation DETECTION2: xx.xx.xx.xx
xfreerdp /v:xx.xx.xx.xx /u:blueteam '/p:BlueTeamDetection0%%%' +clipboard /cert-ignore
Die folgende Tabelle fasst eine Reihe von Firewall-Regeln zusammen, die in der Standardkonfiguration in der gesamten BlueTeamLab-Umgebung angewendet werden. Bitte ändern Sie die Datei main.tf, um bei Bedarf neue Firewall-Regeln im Abschnitt Firewall-Regel-Setup hinzuzufügen.
Intern werden in dieser Umgebung in der Standardkonfiguration die folgenden statischen IPs und Hostnamen im Bereich 10.0.0.0/16 verwendet:
Die folgenden Standard-Anmeldeinformationen werden während der Installation erstellt. Die tatsächlichen konfigurierten Anmeldeinformationen werden nach Abschluss des gesamten Bereitstellungsprozesses angezeigt.
Um die Standard-Anmeldeinformationen zu ändern, ändern Sie Benutzernamen und Passwörter in der Datei domain_setup.yml.







Beiträge, Fehlerbehebungen und Verbesserungen können direkt als GitHub-Issue oder Pull-Request für dieses Projekt eingereicht werden.
| - 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
Ich erhalte Disk wks-1-os-disk already exists in resource group BLUETEAM-LAB. Only CreateOption.Attach is supported. oder eine ähnliche Fehlermeldung.
terraform destroy -auto-approve && terraform apply -auto-approve erneut aus, um das Labor zu zerstören und neu zu erstellen. Dieser Fehler tritt scheinbar auf, wenn Azure nicht alle Datenträger ordnungsgemäß bereinigt und Restressourcen mit demselben Namen zurückbleiben.Ich erhalte 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). oder eine ähnliche Fehlermeldung.
terraform destroy -auto-approve && terraform apply -auto-approve erneut aus, um das Labor zu zerstören und neu zu erstellen. Dieser Fehler tritt scheinbar auf, wenn Azure nicht alle Ressourcen ordnungsgemäß bereinigt und Reste übrig bleiben, die zerstört werden müssen, bevor das Labor aufgrund von Namens- und/oder Standortkonflikten erstellt wird.Ich erhalte Network security group windows-nsg cannot be deleted because old references for the following Nics oder eine ähnliche Fehlermeldung.
terraform destroy -auto-approve && terraform apply -auto-approve erneut aus, um das Labor zu zerstören und neu zu erstellen. Dieser Fehler tritt scheinbar auf, wenn Azure nicht alle Ressourcen ordnungsgemäß bereinigt und Reste übrig bleiben, die zerstört werden müssen, bevor das Labor aufgrund von Namens- und/oder Standortkonflikten erstellt wird.Ein guter Teil dieses Codes wurde von Christophe Tafani-Dereepers Adaz entliehen und angepasst. Vielen Dank für den Aufbau der Grundlage, die es mir ermöglichte, diese Laborumgebung zu entwerfen.
| Regelname | Netzwerksicherheitsgruppe | Quellhost | Quellport | Zielhost | Zielport |
|---|
| Allow-RDP | windows-nsg | Ihre öffentliche IP | * | PDC-1, DETECTION1, DETECTION2 | 3389 |
| Allow-WinRM | windows-nsg | Ihre öffentliche IP | * | PDC-1, DETECTION1, DETECTION2 | 5985 |
| Allow-WinRM-secure | windows-nsg | Ihre öffentliche IP | * | PDC-1, DETECTION1, DETECTION2 | 5986 |
| Allow-SMB | windows-nsg | Ihre öffentliche IP | * | PDC-1, DETECTION1, DETECTION2 | 445 |
| Allow-SSH | wazuh-nsg | Ihre öffentliche IP | * | Wazuh | 22 |
| Allow-Wazuh-Manager | wazuh-nsg | Ihre öffentliche IP | * | Wazuh | 1514-1516 |
| Allow-Wazuh-Elasticsearch | wazuh-nsg | Ihre öffentliche IP | * | Wazuh | 9200 |
| Allow-Wazuh-API | wazuh-nsg | Ihre öffentliche IP | * | Wazuh | 55000 |
| Allow-Elasticsearch-Cluster | wazuh-nsg | Ihre öffentliche IP | * | Wazuh | 9300-9400 |
| Allow-Wazuh-GUI | wazuh-nsg | Ihre öffentliche IP | * | Wazuh | 443 |
| Allow-Velociraptor-Client-Connections | wazuh-nsg | Ihre öffentliche IP | * | Wazuh | 8000 |
| Allow-Velociraptor-GUI | wazuh-nsg | Ihre öffentliche IP | * | Wazuh | 10000 |
| Allow-Fleet-GUI | wazuh-nsg | Ihre öffentliche IP | * | Wazuh | 9999 |
| Host | Rolle | Interne IP |
|---|
| PDC-1 | Primärer Domänencontroller | 10.0.10.10 |
| Wazuh | Wazuh-Server, hostet auch Velocidex Velociraptor-Installation und FleetDM | 10.0.10.100 |
| DETECTION1 | Windows 10 Workstation 1 | 10.0.11.11 |
| DETECTION2 | Windows 10 Workstation 2 | 10.0.11.12 |
| Host | Anmeldename | Passwort | Rolle |
|---|
| PDC-1 | blueteam.lab\blueteam | BlueTeamDetection0%%% | Domänenadministrator für die Domäne blueteam.lab |
| DETECTION1 | localadministrator | BlueTeamDetection0%%% | Lokaler Administrator der Workstation DETECTION1 |
| DETECTION2 | localadministrator | BlueTeamDetection0%%% | Lokaler Administrator der Workstation DETECTION2 |
| Wazuh | blueteam | BlueTeamDetection0%%% | SSH-Anmeldeinformationen für den Wazuh-Server |
| Wazuh | wazuh | BlueTeamDetection0%%% | Wazuh-Administrator |
| Wazuh | admin | BlueTeamDetection0%%% | Wazuh-Administrator |
| Wazuh | kibanaserver | BlueTeamDetection0%%% | Wazuh-Dienstkonto |
| Wazuh | kibanaro | BlueTeamDetection0%%% | Wazuh-Dienstkonto |
| Wazuh | logstash | BlueTeamDetection0%%% | Wazuh-Dienstkonto |
| Wazuh | readall | BlueTeamDetection0%%% | Wazuh-Dienstkonto |
| Wazuh | snapshotrestore | BlueTeamDetection0%%% | Wazuh-Dienstkonto |
| Wazuh | wazuh_admin | BlueTeamDetection0%%% | Wazuh-Dienstkonto |
| Wazuh | wazuh_user | BlueTeamDetection0%%% | Wazuh-Dienstkonto |
| Wazuh | blueteam | BlueTeamDetection0%%% | Anmeldung für das Velociraptor-Webportal |
| Wazuh | [email protected] | BlueTeamDetection0%%% | Anmeldung für das FleetDM-Webportal |
Wie kann ich Netzwerksegmente, die Bereitstellungsgröße oder andere Variablen ändern?
-var an terraform apply anhängen. Zum Beispiel würde terraform apply --auto-approve -var="region=East US 2" eine Region ändern, die sich von der in der Variablen-Datei festgelegten Standardeinstellung unterscheidet. Das gesamte Setup, einschließlich Netzwerkbereiche, Betriebssysteme und VM-Größe, kann mithilfe einer Kette von -var-Parametern geändert werden.Wie finde ich SKUs für eine bestimmte Bereitstellung?
az vm list-skus --location westeurope --all --output table, um SKUs zu finden, die für Ihre Bereitstellung verfügbar sind.Ich erhalte Max retries exceeded with url: /wsman und dann wird die Verbindung beim Erstellen eines Systems verweigert.
terraform apply -auto-approve erneut aus, um den beschädigten Host zu reparieren.