Laboratorio de Pruebas de Penetración AWS
Laboratorio de pruebas de penetración desplegado como IaC con Terraform en AWS.
Despliega una instancia de Kali Linux accesible mediante SSH y VPN WireGuard.
Instancias vulnerables en una subred privada.
NOTA:
- IDs solo definidos para la región "eu-west-1"
- Para otras regiones, se debe especificar el ID de AMI de Kali y el ID de metasploitable3 (después de construirlo)
Registro de cambios
- [2022-01-30]
- configurado sudoers para permitir sudo nmap al grupo de usuarios
- el grupo de seguridad permite conexiones entrantes a los puertos 8800-8899 (para reverse-shells)
- [2021-12-26]
- configurada automáticamente la primera zona de disponibilidad
- nuevas AMIs de metasploitable creadas con Packer
- integración inicial de la vulnerabilidad log4jshell en la máquina metasploitable3 (pero no es utilizable)
- [2021-12-22]
- Packer para construir imágenes metasploitable (ver ./metasploitable3/)
- correcciones en el script user_data de Kali
- Despliegue en us-east-1 validado
- [2021-12-09]
- Búsqueda del último ID de AMI de Kali Linux en lugar de proporcionar IDs
- template_file de Terraform reemplazado por estar obsoleto
- AMI de Windows Server (por hacer: instalar un software vulnerable)
- [2021-09-15]
- Correcciones en la creación de múltiples pares de WireGuard
- Aplicación Infection Monkey integrada en Kali Linux
- Actualización a la nueva versión de Kali 2021.3
- [2021-06-02] Los IDs de AMI cambiaron para usar Kali 2021.2
- [2021-03-10] Usar la nueva versión de Kali 2021.1
Diagrama

Componentes
- Instancia Kali (la clave privada se guarda en kali.pem)
- Servicio VPN WireGuard: archivo de cliente client_vpn.wg
- Accesible mediante ssh/scp
- Subred Pública 10.0.0.5/24
- Infection Monkey ejecutándose en el puerto 5000 (solo accesible mediante VPN o SSH)
- Máquina vulnerable "Metasploitable" (la AMI construida es pública)
- Subred Privada 10.0.1.5/24
- Más laboratorios/máquinas/docker vulnerables (pendiente)
Características añadidas
- Gestión de usuarios
- Crear automáticamente usuarios no privilegiados en la instancia Kali con RSA
- Archivo de cliente VPN WireGuard por usuario
- Registro de auditoría de línea de comandos en syslog
- auditd habilitado con claves sudo_log y users_log para auditar acciones de usuario (ver también el comando ausearch)
- Por hacer: Reenviar auditoría de terminal a CloudWatch o un bucket de S3 con política de escritura única
Cómo usar
- Requisitos:
- Terraform CLI guía de instalación
- AWS CLI guía de instalación
- $PATH configurado para AWS CLI y Terraform
- Cuenta de AWS y configurar credenciales mediante AWS CLI:
aws configure
- Suscripción a Kali Linux en AWS Marketplace
- Imagen AMI de Metasploitable3 previamente construida (AMI pública disponible para la región eu-west-1) ver
Desplegar
- Habilitar/deshabilitar instancias vulnerables a desplegar configurando
0 o 1 en variables.tf:
variable "deploment-control" {
type = map
default = {
#"instance" = 0 or 1, to disable or enable
"metasploitable3" = 1
"dvca" = 0
}
description = "Control which EC2 instances are deployed, 0 for none or 1"
}
- Usar Terraform para desplegar la infraestructura
terraform init
terraform plan
terraform apply -auto-approve
Salidas
Las salidas de Terraform mostrarán las siguientes entradas:
- comando de conexión SSH para el usuario kali (root mediante sudo)
- el archivo de cliente WireGuard para el usuario kali se recuperará automáticamente del servidor kali
- comando scp para recuperar el archivo de cliente WireGuard (por si acaso falla el comando local-exec definido en Terraform)
- Para cada uno de los usuarios normales creados en la instancia Kali
- Archivo de clave privada para conexión SSH
- Archivo de cliente WireGuard para conectividad VPN
Uso
Conéctese a Kali mediante SSH o WireGuard:
- SSH: (Solo línea de comandos) Use la clave privada generada automáticamente (ver salida de Terraform)
KALI_IP=<KALI_IP> # configure kali public ip
ssh -i kali.pem -o StrictHostKeyChecking=no -o IdentitiesOnly=yes kali@${KALI_IP}
- WireGuard: Conecte su instancia local de Kali mediante WireGuard (ver archivo generado client_vpn.wg)
KALI_IP=<KALI_IP> # configure kali public ip
scp -i kali.pem -o StrictHostKeyChecking=no IdentitiesOnly=yes kali@${KALI_IP}:/home/kali/client_vpn.wg .
####
(local_kali)$ sudo apt-get install –y wireguard
(local_kali)$ sudo gedit /etc/wireguard/wg0.conf # copy contents of client_vpn.wg
(local_kali)$ sudo chmod 700 /etc/wireguard/wg0.conf
(local_kali)$ sudo wg-quick up wg0
(local_kali)$ ping 10.0.0.5 # test connectivity with kali instance in AWS
Destruir
terraform destroy -auto-approve
Referencias