
Lord Of Active Directory - création automatique d'un Active Directory vulnérable sur AWS

Basé sur AWS-Redteam-Lab et OCD GOAD
Le prix pour faire fonctionner le lab pendant 125 heures sur un mois est d'environ 14 $. Avec le Free Tier, vous obtenez 750h d'EC2 par mois ; il y a 6 machines, soit 125h. Mais vous ne disposez que de 30 Go de stockage. Vous avez donc besoin de stockage pour les 5 autres VMs : 30 Go * 5 = 150 Go = 14 $ / mois
Comme pour le projet GOAD, l'installation se fait en deux parties :
Jusqu'à présent, le lab n'a été testé que sur une machine Linux, mais il devrait également fonctionner sur macOS. Ansible a quelques problèmes avec les hôtes Windows, donc je ne peux pas me prononcer.
Pour que l'installation fonctionne correctement, vous devez installer :
Si vous souhaitez effectuer le provisionnement depuis un conteneur Docker, vous pouvez lancer la commande suivante pour préparer le conteneur :
sudo docker build -t loadansible .
Si vous souhaitez utiliser Ansible depuis votre hôte, vous devriez lancer les commandes suivantes :
sudo apt install git
git clone [email protected]:0xBallpoint/LOAD.git
cd LOAD/ansible
sudo apt install python3.8-venv
python3.8 -m virtualenv .venv
source .venv/bin/activate
ansible et pywinrm dans le .venv
python3 -m pip install --upgrade pip
python3 -m pip install ansible-core==2.12.6
python3 -m pip install pywinrm
ansible-galaxy install -r requirements.yml
Vous devez installer Terraform en suivant leur guide sur leur site hashicorp.com
Si vous souhaitez installer manuellement Terraform sur Linux :
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
# Install the HasiCorp GPG key
wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
# Verify the key's fingerprint
gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint
# It must match E8A0 32E0 94D8 EB4E A189 D270 DA41 8C88 A321 9F7B (from https://www.hashicorp.com/security)
# Add the official HashiCorp repository to your system
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list
# Update, install, verify
sudo apt update
sudo apt install terraform
terraform -help
Vous aurez besoin de l'AWS CLI pour configurer vos clés d'accès AWS. Vous devriez suivre le guide d'installation sur leur site docs.aws.amazon.com
Pour Linux :
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Le domaine par défaut sera middle-earth.local, sur le sous-réseau 10.0.1.0/24, et chaque machine ne dispose que d'1CPU et de 1024MB de mémoire (t2.micro). Si vous souhaitez modifier certains de ces paramètres de performance, vous pouvez modifier le fichier : terraform/ami-instance.tf
Pour faire fonctionner le lab, voici les commandes que vous devez exécuter :
pwd
/opt/LOAD # place yourself in the LOAD folder (where you cloned the project)
cd terraform # start with AWS configuration
Les étapes suivantes montrent comment configurer vos VMs sur AWS :
Copiez le fichier var.tf.example vers var.tf et modifiez les valeurs :
Sur votre console AWS, vous devez créer un utilisateur Terraform et récupérer vos clés AWS :
terraformAccess key - Programmatic accessAccess key ID et Secret access keyAjoutez les clés sur votre machine avec l'AWS CLI :
aws configure --profile terraform
AWS Access Key ID [None]: <access_key_id>
AWS Secret Access Key [None]: <secret_access_key>
cd LOAD
ssh-keygen -t rsa -N "" -b 2048 -C "TerraformKey" -f ./terraform/keys/TerraformKey.pem
terraform init
terraform apply
Si vous souhaitez détruire votre lab :
terraform destroy
Chaque fois que vos instances EC2 démarrent, vous devez modifier leur IP publique dans le fichier ansible/hosts. Ajoutez la sortie de cette commande à la fin du fichier :
aws ec2 describe-instances --profile terraform --region eu-central-1 --query "Reservations[*].Instances[*].{Name:Tags[?Key=='Name'].Value|[],PublicIP:PublicIpAddress}" --filters "Name=instance-state-name,Values=running" --output text |tac |awk 'NR%2 ==0 {print $0}; NR%2 != 0 {print "["tolower(substr($2,5))"]"};'
Pour configurer les VMs, utilisez la commande ansible-playbook. La durée habituelle d'exécution est de 1h30.
ansible-playbook main.yml # this will configure the vms in order to play ansible when the vms are ready
Pour exécuter le provisionnement depuis le conteneur Docker, lancez (vous devez être dans le même dossier que le Dockerfile. Pas encore testé) :
sudo docker run -ti --rm --network host -h loadansible -v $(pwd):/load -w /load/ansible loadansible ansible-playbook main.yml
Il arrive parfois qu'une erreur se produise pendant l'installation. La plupart du temps, il suffit de relancer le playbook pour que cela fonctionne. Pour exécuter les playbooks un par un :
# The main.yml playbook is build in multiples parts. each parts can be re-run independently but the play order must be keep in cas you want to play one by one :
ansible-playbook prepare.yml # updates, passwords, dns settings...
ansible-playbook ad-servers.yml # create servers configuration
ansible-playbook ad-trusts.yml # create the trust relationships
ansible-playbook ad-data.yml # import the ad datas : users/groups...
ansible-playbook ad-groups.yml # set the rights and the group domains relations
ansible-playbook servers.yml # create IIS and MSSQL
ansible-playbook adcs.yml # add adcs and adcs templates
ansible-playbook ad-acl.yml # set ACL
ansible-playbook linux.yml # configure linux entrypoint with GLPI
ansible-playbook security.yml # enable or disable windows defender here
ansible-playbook vulnerabilities.yml # specifics vulns linked to the scenario are here
# You can also install wireguard VPN on the linux host, for that check the VPN paragraph