
Laboratoire de détection Blue Team créé avec Terraform et Ansible dans Azure.
Ce projet contient un ensemble de scripts Terraform et Ansible pour créer un laboratoire BlueTeam orchestré. L'objectif de ce projet est de fournir aux équipes rouge et bleue la possibilité de déployer un laboratoire de détection ad hoc pour tester diverses attaques et artefacts forensiques sur le dernier environnement Windows, puis d'obtenir une vue « type SOC » des données générées.
REMARQUE : Ce laboratoire est délibérément conçu pour être non sécurisé. Veuillez ne pas connecter ce système à un réseau auquel vous tenez.

Un certain nombre de fonctionnalités doivent être installées sur votre système pour utiliser cette configuration.
# 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
Une fois tous les prérequis installés, effectuez les étapes suivantes :
# 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.
Les variables Terraform définissent le type de systèmes d'exploitation utilisés pour ce déploiement. Une simple modification des variables d'exécution permet de spécifier un autre système d'exploitation pour l'ensemble de l'Active Directory (AD). L'option par défaut est d'utiliser Windows 10 Entreprise pour les postes de travail et Windows Server 2019 Datacenter pour le contrôleur de domaine. Voici des exemples de quelques options de configuration courantes qui peuvent être utilisées pour modifier l'ensemble de l'environnement afin d'utiliser différentes versions de système d'exploitation :
# 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"
La commande az vm image list peut être utilisée pour identifier différentes versions de système d'exploitation pour le déploiement.
La section suivante décrit les différents composants de ce laboratoire ainsi que des détails sur la façon de modifier les fichiers de configuration pour modifier la configuration :
Une fois le laboratoire construit, Terraform affichera l'emplacement réel des systèmes et les identifiants associés. Un exemple de sortie se trouve ci-dessous.
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
Le tableau suivant résume un ensemble de règles de pare-feu appliquées dans l'environnement BlueTeamLab en configuration par défaut. Veuillez modifier le fichier main.tf pour ajouter de nouvelles règles de pare-feu si nécessaire dans la section Firewall Rule Setup.
En interne, les adresses IP statiques et noms d'hôtes suivants sont utilisés dans la plage 10.0.0.0/16 pour cet environnement dans la configuration par défaut :
Les identifiants par défaut suivants sont créés lors de l'installation. L'affichage des identifiants réellement configurés sera présenté une fois le processus de déploiement terminé.
Pour modifier les identifiants par défaut, changez les noms d'utilisateur et mots de passe dans le fichier domain_setup.yml.







Les contributions, correctifs et améliorations peuvent être soumis directement pour ce projet via un ticket GitHub ou une pull request.
| - 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
J'obtiens Disk wks-1-os-disk already exists in resource group BLUETEAM-LAB. Only CreateOption.Attach is supported. ou quelque chose de similaire à cette erreur.
terraform destroy -auto-approve && terraform apply -auto-approve pour détruire et recréer le laboratoire. Cette erreur semble apparaître lorsqu'Azure ne nettoie pas correctement tous les disques, laissant ainsi des ressources résiduelles avec le même nom.J'obtiens 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). ou quelque chose de similaire à cette erreur.
terraform destroy -auto-approve && terraform apply -auto-approve pour détruire et recréer le laboratoire. Cette erreur semble apparaître lorsqu'Azure ne nettoie pas correctement toutes les ressources, laissant des résidus qui doivent être détruits avant la création du laboratoire en raison de conflits de noms et/ou d'emplacements.J'obtiens Network security group windows-nsg cannot be deleted because old references for the following Nics ou quelque chose de similaire à cette erreur.
terraform destroy -auto-approve && terraform apply -auto-approve pour détruire et recréer le laboratoire. Cette erreur semble apparaître lorsqu'Azure ne nettoie pas correctement toutes les ressources, laissant des résidus qui doivent être détruits avant la création du laboratoire en raison de conflits de noms et/ou d'emplacements.Une bonne partie de ce code a été empruntée et adaptée d'Adaz de Christophe Tafani-Dereeper. Un grand merci d'avoir construit la base qui m'a permis de concevoir cet environnement de laboratoire.
| Nom de la règle | Groupe de sécurité réseau | Hôte source | Port source | Hôte de destination | Port de destination |
|---|
| Allow-RDP | windows-nsg | Votre IP publique | * | PDC-1, DETECTION1, DETECTION2 | 3389 |
| Allow-WinRM | windows-nsg | Votre IP publique | * | PDC-1, DETECTION1, DETECTION2 | 5985 |
| Allow-WinRM-secure | windows-nsg | Votre IP publique | * | PDC-1, DETECTION1, DETECTION2 | 5986 |
| Allow-SMB | windows-nsg | Votre IP publique | * | PDC-1, DETECTION1, DETECTION2 | 445 |
| Allow-SSH | wazuh-nsg | Votre IP publique | * | Wazuh | 22 |
| Allow-Wazuh-Manager | wazuh-nsg | Votre IP publique | * | Wazuh | 1514-1516 |
| Allow-Wazuh-Elasticsearch | wazuh-nsg | Votre IP publique | * | Wazuh | 9200 |
| Allow-Wazuh-API | wazuh-nsg | Votre IP publique | * | Wazuh | 55000 |
| Allow-Elasticsearch-Cluster | wazuh-nsg | Votre IP publique | * | Wazuh | 9300-9400 |
| Allow-Wazuh-GUI | wazuh-nsg | Votre IP publique | * | Wazuh | 443 |
| Allow-Velociraptor-Client-Connections | wazuh-nsg | Votre IP publique | * | Wazuh | 8000 |
| Allow-Velociraptor-GUI | wazuh-nsg | Votre IP publique | * | Wazuh | 10000 |
| Allow-Fleet-GUI | wazuh-nsg | Votre IP publique | * | Wazuh | 9999 |
| Hôte | Rôle | IP interne |
|---|
| PDC-1 | Contrôleur de domaine principal | 10.0.10.10 |
| Wazuh | Serveur Wazuh, héberge également Velocidex Velociraptor et FleetDM | 10.0.10.100 |
| DETECTION1 | Poste de travail Windows 10 | 10.0.11.11 |
| DETECTION2 | Poste de travail Windows 10 | 10.0.11.12 |
| Hôte | Identifiant | Mot de passe | Rôle |
|---|
| PDC-1 | blueteam.lab\blueteam | BlueTeamDetection0%%% | Administrateur de domaine pour le domaine blueteam.lab |
| DETECTION1 | localadministrator | BlueTeamDetection0%%% | Administrateur local du poste de travail DETECTION1 |
| DETECTION2 | localadministrator | BlueTeamDetection0%%% | Administrateur local du poste de travail DETECTION2 |
| Wazuh | blueteam | BlueTeamDetection0%%% | Identifiant SSH pour le serveur Wazuh |
| Wazuh | wazuh | BlueTeamDetection0%%% | Administrateur Wazuh |
| Wazuh | admin | BlueTeamDetection0%%% | Administrateur Wazuh |
| Wazuh | kibanaserver | BlueTeamDetection0%%% | Compte de service Wazuh |
| Wazuh | kibanaro | BlueTeamDetection0%%% | Compte de service Wazuh |
| Wazuh | logstash | BlueTeamDetection0%%% | Compte de service Wazuh |
| Wazuh | readall | BlueTeamDetection0%%% | Compte de service Wazuh |
| Wazuh | snapshotrestore | BlueTeamDetection0%%% | Compte de service Wazuh |
| Wazuh | wazuh_admin | BlueTeamDetection0%%% | Compte de service Wazuh |
| Wazuh | wazuh_user | BlueTeamDetection0%%% | Compte de service Wazuh |
| Wazuh | blueteam | BlueTeamDetection0%%% | Identifiant portail web Velociraptor |
| Wazuh | [email protected] | BlueTeamDetection0%%% | Identifiant portail web FleetDM |
Pourquoi Azure ?
Comment modifier les segments réseau, la taille de déploiement ou d'autres variables ?
-var à terraform apply. Par exemple, terraform apply --auto-approve -var="region=East US 2" modifierait une région pour qu'elle soit différente de celle définie par défaut dans le fichier variables. L'ensemble de la configuration, y compris les plages réseau, les systèmes d'exploitation et la taille des machines virtuelles, peut être modifié en utilisant une chaîne de paramètres -var.Comment trouver les SKU pour un déploiement spécifique ?
az vm list-skus --location westeurope --all --output table pour trouver les SKU disponibles pour votre déploiement.J'obtiens Max retries exceeded with url: /wsman puis la connexion est refusée lors de la construction d'un système.
terraform apply -auto-approve pour réparer l'hôte endommagé.