
Lord Of Active Directory - Active Directory vulnerável automático na AWS

Baseado em AWS-Redteam-Lab e OCD GOAD
O custo para executar o laboratório por 125 horas durante um mês é de aproximadamente 14$. Com o Free Tier você obtém 750h de EC2 por mês; como há 6 máquinas, são 125h. Mas você só obtém 30Gb de armazenamento. Então você precisa de armazenamento para as outras 5 VMs : 30Gb * 5 = 150Gb = 14$ / mês
Assim como o projeto GOAD, a instalação é dividida em duas partes :
Até agora, o laboratório só foi testado em uma máquina Linux, mas deve funcionar também no macOS. O Ansible tem alguns problemas com hosts Windows, então não sei quanto a isso.
Para que a configuração funcione corretamente, você precisa instalar:
Se você quiser fazer o provisionamento a partir de um container docker, pode executar o seguinte comando para preparar o container
sudo docker build -t loadansible .
Se você quiser executar o ansible a partir do seu host, deve executar os seguintes comandos :
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 e pywinrm no .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
Você precisa instalar o Terraform seguindo o guia no site deles hashicorp.com
Se quiser instalar o Terraform manualmente no 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
Você precisará do AWS CLI para configurar suas chaves de acesso à AWS. Você deve seguir o guia de instalação no site deles docs.aws.amazon.com
Para Linux :
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
O domínio padrão será middle-earth.local, na sub-rede 10.0.1.0/24, e cada máquina foi alocada com apenas 1 CPU e 1024MB de memória (t2.micro). Se quiser alterar algumas dessas configurações de desempenho, você pode modificar o arquivo : terraform/ami-instance.tf
Para deixar o laboratório funcionando, estes são os comandos que você deve executar:
pwd
/opt/LOAD # place yourself in the LOAD folder (where you cloned the project)
cd terraform # start with AWS configuration
As próximas etapas mostram como configurar suas VMs na AWS:
Copie o var.tf.example para var.tf e altere os valores :
No console da AWS, você deve criar um usuário terraform e obter suas chaves da AWS:
terraformAccess key - Programmatic accessAccess key ID e Secret access keyAdicione as chaves na sua máquina com o 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
Se quiser destruir seu laboratório :
terraform destroy
Sempre que suas instâncias EC2 iniciarem, você precisa alterar o IP público delas no arquivo ansible/hosts. Adicione a saída deste comando no final do arquivo :
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))"]"};'
Para configurar as VMs, use o comando ansible-playbook. Tempo normal de execução : 1h30
ansible-playbook main.yml # this will configure the vms in order to play ansible when the vms are ready
Para executar o provisionamento a partir do container docker, execute (você deve estar na mesma pasta do Dockerfile. Ainda não testado):
sudo docker run -ti --rm --network host -h loadansible -v $(pwd):/load -w /load/ansible loadansible ansible-playbook main.yml
Às vezes, um erro pode ocorrer durante a instalação. Na maioria das vezes, você pode simplesmente executar o playbook novamente e deve funcionar. Para executar os playbooks um por um :
# 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
Se quiser executar apenas uma parte específica de um playbook, você pode usar tags (sempre coloque data como tag):
ansible-playbook servers.yml
ansible-playbook servers.yml --tags data,iis
ansible-playbook linux.yml --tags data,glpi