
Solución serverless de AWS para distribuir cargas de trabajo de reconocimiento y escaneo de vulnerabilidades. Envía tareas a través de la interfaz web; los workers de EC2 ejecutan scripts de Python personalizados con herramientas como Nmap.
CowCloud se creó originalmente para ejecutar herramientas de reconocimiento y escaneos de vulnerabilidades de forma distribuida; por ejemplo, un caso de uso podría ser el de los cazadores de recompensas por vulnerabilidades (bug bounty). Esta solución pretende abstraer a los usuarios finales del trabajo subyacente necesario para distribuir cargas de trabajo en AWS. CowCloud proporciona a los usuarios una interfaz web amigable para ver y crear nuevas tareas que posteriormente son consumidas por código Python que se ejecuta en los nodos trabajadores (instancias EC2). Se pretende que tanto el código Python como las AMIs de EC2 sean personalizados.
Como ejemplo, supongamos que quieres ejecutar escaneos con Nmap. En ese caso, puedes simplemente elegir una AMI del Catálogo de AMIs y actualizar el campo image_id en Terraform/ec2_module/ec2_module.tf. Después, habría que actualizar el archivo ec2py/template.py para personalizar los argumentos del escaneo con Nmap (-Pn, -p 443, etc.). Por último, habría que actualizar el campo user_data en el archivo de configuración Terraform/ec2_module/ec2_module.tf para instalar Nmap y sus dependencias.
Otra opción es instalar y ejecutar varias herramientas comerciales; en ese caso, es posible que quieras crear tu propia instancia EC2 o snapshot. En este caso, instalarías todas las dependencias y activarías las licencias para poder usar esa AMI como imagen dorada (gold image) para tus trabajadores

CowCloud se puede dividir en tres componentes principales:
Estas son las características clave:
autoscalingStrategy.py)retention_timeextra_docker_params en el archivo template.py (esto se explica en la sección Administrador/mantenedor más abajo)
| variable | valor por defecto | descripción |
|---|---|---|
eipenable | false | Si es true, la solución asigna un pool de direcciones IP elásticas asociadas a los nodos trabajadores a medida que se crean. El número de EIP a reservar se calcula con esta fórmulasum([var.max_workers, var.maximum_number_of_terminating_machines]) |
cidr_whitelist | [] | La lista blanca CIDR para permitir solo ciertos rangos de IP en el firewall. P. ej. ["195.95.131.0/24"] |
max_workers y max_queued_tasks_per_worker | max_workers: 3, max_queued_tasks_per_worker: 10 | Estos dos ajustes determinan cuándo escalar hacia dentro o hacia fuera, p. ej., max_workers 3, max_queued_tasks_per_worker 10. Esto significa que si el número de tareas supera las diez, se creará una nueva instancia EC2. Si hay más de veinte tareas, habrá un máximo de tres instancias EC2 disponibles para distribuir las cargas de trabajo (consulta el algoritmo presente en este script Terraform/dynamodb_module/autoscalingTool/autoscalingStrategy.py). |
maximum_number_of_terminating_machines | 2 | Define el número de instancias que están configuradas para terminarse pero que quedan en espera hasta que el proceso/escaneo complete la tarea. |
heartbeat_timeout | 900 | Define el tiempo que esos trabajadores permanecen en espera. Cuando este tiempo expira, el trabajador se termina de forma forzosa. |
instance_type | t2.micro | https://aws.amazon.com/ec2/instance-types/ |
ami | null | https://aws.amazon.com/es/amazon-linux-ami/ |
retention_time | 7 | Establece el tiempo de retención (en días) para los registros y la expiración de los elementos de la tabla de archivo (tareas completadas). |
Como resultado de ejecutar Terraform, se crea un nuevo archivo (config.js); este contiene la configuración necesaria para que la aplicación React JS se autentique contra el directorio del grupo de usuarios de Cognito. Después de haber desplegado la infraestructura, tienes que compilar la aplicación React y subir la carpeta build. Además, tienes que subir el código Python a un bucket de S3 que actúe como repositorio de código. Este proceso se ha automatizado en dos scripts setup.bat y setup.sh, por lo que no tienes que preocuparte por ello; esto es solo para resumir esta etapa.
La infraestructura se despliega en la región us-east-1 por defecto, aunque esto se puede cambiar en el archivo locals.tf dentro de la carpeta Terraform.