
Solução serverless AWS para distribuir cargas de trabalho de reconhecimento e varredura de vulnerabilidades. Envie tarefas pela interface web; workers EC2 executam scripts Python personalizados com ferramentas como Nmap.
O CowCloud foi originalmente criado para executar ferramentas de reconhecimento (recon) e varreduras de vulnerabilidades de forma distribuída; por exemplo, um caso de uso pode ser por caçadores de bug bounty. Esta solução tem como objetivo abstrair os usuários finais do trabalho subjacente necessário para distribuir cargas de trabalho na AWS. O CowCloud fornece aos usuários uma interface web amigável para visualizar e criar novas tarefas que, posteriormente, são consumidas por código Python executado nos nós de trabalho (instâncias EC2). A intenção é que o código Python seja personalizado, bem como as AMIs EC2.
Como exemplo, digamos que você queira executar varreduras Nmap. Nesse caso, você pode simplesmente escolher uma AMI do Catálogo de AMIs e atualizar o campo image_id em Terraform/ec2_module/ec2_module.tf. Em seguida, o arquivo ec2py/template.py teria que ser atualizado para personalizar os argumentos da varredura Nmap (-Pn, -p 443, etc). Por fim, o campo user_data no arquivo de configuração Terraform/ec2_module/ec2_module.tf teria que ser atualizado para instalar o Nmap e suas dependências.
Outra opção é instalar e executar várias ferramentas comerciais; nesse caso, talvez você queira criar sua própria instância EC2 ou snapshot. Nesse caso, você instalaria todas as dependências e ativaria as licenças para poder usar essa AMI como gold image para seus workers

O CowCloud pode ser dividido em três componentes principais:
Estas são as principais funcionalidades:
autoscalingStrategy.py)retention_timeextra_docker_params no arquivo template.py (isso é explicado na seção Administrador/mantenedor abaixo)
| variável | valor padrão | descrição |
|---|---|---|
eipenable | false | Se true, a solução aloca um pool de endereços IP elásticos associados aos nós de trabalho à medida que são criados. O número de EIPs a reservar é calculado usando esta fórmulasum([var.max_workers, var.maximum_number_of_terminating_machines]) |
cidr_whitelist | [] | A whitelist de CIDR para permitir apenas determinados intervalos de IP no firewall. Ex.: ["195.95.131.0/24"] |
max_workers and max_queued_tasks_per_worker | max_workers: 3, max_queued_tasks_per_worker: 10 | Essas duas configurações determinam quando escalar para dentro (scale in) ou para fora (scale out), ex.: max_workers 3, max_queued_tasks_per_worker 10. Isso significa que, se o número de tarefas ultrapassar dez, uma nova instância EC2 será criada. Se houver mais de vinte tarefas, um máximo de três instâncias EC2 estará disponível para distribuir as cargas de trabalho (confira o algoritmo presente neste script Terraform/dynamodb_module/autoscalingTool/autoscalingStrategy.py). |
maximum_number_of_terminating_machines | 2 | Isso define o número de instâncias que estão definidas para encerramento, mas ficam em espera até que o processo/varredura conclua a tarefa. |
heartbeat_timeout | 900 | Isso define o tempo que esses workers ficam em espera. Após o término desse tempo, o worker será encerrado à força. |
instance_type | t2.micro | https://aws.amazon.com/ec2/instance-types/ |
ami | null | https://aws.amazon.com/es/amazon-linux-ami/ |
retention_time | 7 | Define o tempo de retenção (em dias) para os logs e a expiração dos itens da tabela de arquivo (tarefas concluídas). |
Como resultado da execução do Terraform, um novo arquivo é criado (config.js);, que contém a configuração necessária para o aplicativo React JS autenticar no diretório do user pool do Cognito. Depois que a infraestrutura for implantada, você precisa compilar o aplicativo React e enviar a pasta build. Além disso, você precisa enviar o código Python para um bucket S3 que atua como repositório de código. Esse processo foi automatizado em dois scripts setup.bat e setup.sh para que você não precise se preocupar com isso; isso é apenas para resumir esta etapa.
A infraestrutura é implantada na região us-east-1 por padrão, embora isso possa ser alterado no arquivo locals.tf dentro da pasta Terraform.