
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_time
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.
Etapas:
variables.tf; a variável ami deve apontar para uma AMI EC2 existente, que pode ser sua AMI golden ou uma do Catálogo de EC2aws configure. Verifique se você o configurou corretamente executando este comando: aws sts get-caller-identity; quando configurado corretamente, isso não deve retornar erroaws ec2 create-key-pair –key-name cowCloud –query “cowCloud” –output text > ec2_module/cowCloud.pemgit clone [email protected]:nccgroup/cowcloud.git
# Deploy the infra
cd cowcloud
cd Terraform
terraform init
terraform plan
terraform apply --auto-approve
Agora você está pronto para começar! Cadastre-se, entre e crie uma nova tarefa!
Depois que tudo estiver implantado e o front-end acessível, siga estas etapas:
CowCloud\ec2py> python .\decypt_file.py 2e8cf87c-5389-11ec-abec-d6d1f378b18d
A pessoa responsável por implantar e manter a infraestrutura deve sanitizar e validar adequadamente as entradas dos usuários finais fornecidas pelo webapp. Em outras palavras, garantir que o código em ec2py/template.py não seja vulnerável a injeção de comandos do sistema operacional.
Este ponto é destacado por ser o aspecto mais crítico do sistema. Cuidados especiais foram tomados para limitar o escopo das permissões e da exposição do worker e, assim, reduzir os riscos associados. No entanto, é responsabilidade do administrador cuidar desse aspecto da segurança do sistema.
As políticas de função (role policies) anexadas ao perfil das instâncias EC2 estão listadas no arquivo readme.md dentro da pasta Terraform
workers_manager.py que é chamada pela ferramenta ec2py para executar ações mais privilegiadas. Essas ações foram movidas para uma função Lambda para limitar o risco caso alguém comprometa a chave de acesso da função (role) anexada ao perfil EC2. Ela funciona com IMDSv2, no entanto.
As políticas de função (role policies) anexadas à função Lambda workers_manager.py estão listadas no arquivo readme.md dentro da pasta TerraformSe você quiser capturar o stdout e exibi-lo pela interface web enquanto as tarefas estão sendo executadas, vá para o ec2py/template.py e siga estas etapas::
extra_docker_params inclui as informações necessárias para que seus contêineres Docker enviem o stdout para os grupos de logs do CloudWatch. Você precisará incluir essa variável na linha de comando quando quiser visualizar o stdout pelo front-end.cmd = f"docker run {extra_docker_params} --rm -v {tmp_folder}target.txt:/root/Tools/reconftw/target.txt -v {tmp_folder}reconftw.cfg:/root/Tools/reconftw/reconftw.cfg -v {tmp_folder}Recon/:/root/Tools/reconftw/Recon/ six2dez/reconftw:main -l target.txt -w".split(' ')
Você pode destruir a infraestrutura executando este comando simples: terraform destroy --auto-approve; isso removerá todos os recursos existentes.
Nota: não interrompa esse processo, pois isso pode deixar alguns elementos remanescentes na nuvem, que você teria que identificar e remover manualmente.


terraform destroy --auto-approve -target module.gateway_module.aws_api_gateway_deployment.lambdaterraform apply --auto-approve -target module.gateway_moduleextra_docker_paramstemplate.py| 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). |