
Lord Of Active Directory - automatisch verwundbares Active Directory auf AWS

Basiert auf AWS-Redteam-Lab und OCD GOAD
Die Kosten für den Betrieb des Labs für 125 Stunden in einem Monat betragen ungefähr 14 $. Mit dem Free Tier erhältst du 750 Stunden EC2 pro Monat; bei 6 Maschinen sind das 125 Stunden. Du bekommst jedoch nur 30 GB Speicher. Du brauchst also Speicher für die anderen 5 VMs: 30 GB * 5 = 150 GB = 14 $ / Monat
Wie beim GOAD-Projekt besteht die Installation aus zwei Teilen:
Bisher wurde das Lab nur auf einer Linux-Maschine getestet, es sollte aber auch unter macOS funktionieren. Ansible hat einige Probleme mit Windows-Hosts, daher weiß ich es nicht.
Damit das Setup ordnungsgemäß funktioniert, musst du Folgendes installieren:
Wenn du die Provisionierung aus einem Docker-Container heraus durchführen möchtest, kannst du den folgenden Befehl ausführen, um den Container vorzubereiten:
sudo docker build -t loadansible .
Wenn du Ansible von deinem Host aus ausführen möchtest, solltest du die folgenden Befehle ausführen:
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 und pywinrm in der .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
Du musst Terraform gemäß der Anleitung auf deren Website hashicorp.com installieren.
Wenn du Terraform unter Linux manuell installieren möchtest:
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
Du benötigst die AWS CLI, um deine Zugriffsschlüssel für AWS zu konfigurieren. Folge der Installationsanleitung auf deren Website docs.aws.amazon.com
Für Linux:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Die Standarddomäne ist middle-earth.local, im Subnetz 10.0.1.0/24, und jede Maschine hat nur 1 CPU und 1024 MB Arbeitsspeicher (t2.micro) zugewiesen bekommen. Wenn du einige dieser Leistungseinstellungen ändern möchtest, kannst du die Datei terraform/ami-instance.tf bearbeiten.
Um das Lab zum Laufen zu bringen, solltest du die folgenden Befehle ausführen:
pwd
/opt/LOAD # place yourself in the LOAD folder (where you cloned the project)
cd terraform # start with AWS configuration
Die nächsten Schritte zeigen, wie du deine VMs auf AWS konfigurierst:
Kopiere var.tf.example nach var.tf und ändere die Werte:
In deiner AWS-Konsole solltest du einen Terraform-Benutzer erstellen und deine AWS-Schlüssel erhalten:
terraformAccess key - Programmatic accessAccess key ID und Secret access keyFüge die Schlüssel auf deinem Rechner mit der AWS CLI hinzu:
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
Wenn du dein Lab zerstören möchtest:
terraform destroy
Jedes Mal, wenn deine EC2-Instanzen starten, musst du ihre öffentliche IP in der Datei ansible/hosts ändern. Füge die Ausgabe dieses Befehls am Ende der Datei hinzu:
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))"]"};'
Um die VMs zu konfigurieren, verwende den Befehl ansible-playbook. Übliche Laufzeit: 1h30
ansible-playbook main.yml # this will configure the vms in order to play ansible when the vms are ready
Um die Provisionierung aus dem Docker-Container auszuführen (du solltest dich im selben Ordner wie die Dockerfile befinden; noch nicht getestet):
sudo docker run -ti --rm --network host -h loadansible -v $(pwd):/load -w /load/ansible loadansible ansible-playbook main.yml
Während der Installation kann manchmal ein Fehler auftreten. In den meisten Fällen kannst du das Playbook einfach erneut ausführen, dann sollte es funktionieren. Um Playbooks einzeln auszuführen:
# 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