
Soluzione serverless AWS per la distribuzione di carichi di lavoro di ricognizione e scansione delle vulnerabilità. Invia le attività tramite interfaccia web; i worker EC2 eseguono script Python personalizzati con strumenti come Nmap.
CowCloud è stato originariamente creato per eseguire strumenti di ricognizione e scan di vulnerabilità in modo distribuito; per esempio, un caso d'uso potrebbe essere quello dei cacciatori di bug bounty. Questa soluzione è pensata per astrarre gli utenti finali dal lavoro sottostante necessario per distribuire i carichi di lavoro in AWS. CowCloud offre agli utenti un'interfaccia web intuitiva per visualizzare e creare nuove attività che successivamente vengono consumate dal codice Python in esecuzione sui nodi worker (istanze EC2). È previsto che il codice Python venga personalizzato così come le AMI EC2.
Ad esempio, supponiamo di voler eseguire scan Nmap. In quel caso puoi semplicemente scegliere un'AMI dal Catalogo AMI e aggiornare il campo image_id in Terraform/ec2_module/ec2_module.tf. Poi, il file ec2py/template.py dovrà essere aggiornato per personalizzare gli argomenti per lo scan Nmap (-Pn, -p 443, ecc.). Infine, il campo user_data nel file di configurazione Terraform/ec2_module/ec2_module.tf dovrà essere aggiornato per installare Nmap e le sue dipendenze.
Un'altra opzione è installare ed eseguire diversi strumenti commerciali; in tal caso potresti voler creare la tua istanza EC2 o uno snapshot. In questo caso installeresti tutte le dipendenze e attiveresti le licenze in modo da poter usare questa AMI come immagine gold per i tuoi worker.

CowCloud può essere suddiviso in tre componenti principali:
Queste sono le funzionalità principali:
autoscalingStrategy.py)retention_time
Come risultato dell'esecuzione di Terraform, viene creato un nuovo file (config.js) che contiene la configurazione necessaria all'app React JS per autenticarsi rispetto alla directory dell'user pool Cognito. Dopo che l'infrastruttura è stata distribuita, devi compilare l'app React e caricare la cartella build. Inoltre, devi caricare il codice Python in un bucket S3 che funge da repository di codice. Questo processo è stato automatizzato in due script setup.bat e setup.sh così non devi preoccupartene; tutto questo è solo per riassumere questa fase.
L'infrastruttura viene distribuita di default nella regione us-east-1, anche se questo può essere modificato nel file locals.tf all'interno della cartella Terraform.
Passaggi:
variables.tf; la variabile ami deve puntare a un'AMI EC2 esistente, che può essere la tua AMI golden o una dal Catalogo EC2aws configure. Verifica di averlo configurato correttamente eseguendo questo comando: aws sts get-caller-identity; se configurato correttamente non dovrebbe restituire un erroreaws 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
Ora sei pronto per partire! Registrati, accedi e crea una nuova attività!
Una volta che tutto è stato distribuito e il front-end è accessibile, dovresti seguire questi passaggi:
CowCloud\ec2py> python .\decypt_file.py 2e8cf87c-5389-11ec-abec-d6d1f378b18d
La persona incaricata di distribuire e mantenere l'infrastruttura deve igienizzare e validare correttamente gli input degli utenti finali forniti tramite la web app. In altre parole, deve assicurarsi che il codice in ec2py/template.py non sia vulnerabile all'iniezione di comandi del sistema operativo.
Questo punto è evidenziato perché è l'aspetto più critico del sistema. È stata prestata particolare attenzione per limitare l'ambito delle autorizzazioni e dell'esposizione dei worker e ridurre così i rischi associati. Tuttavia, è responsabilità dell'amministratore occuparsi di questo aspetto della sicurezza del sistema.
Le policy di ruolo associate al profilo delle istanze EC2 sono elencate nel file readme.md all'interno della cartella Terraform
workers_manager.py che viene chiamata dallo strumento ec2py per eseguire azioni più privilegiate. Queste azioni sono state spostate in una funzione Lambda per limitare il rischio nel caso in cui qualcuno compromettesse la chiave di accesso del ruolo associato al profilo EC2. Funziona comunque con IMDSv2.
Le policy di ruolo associate alla funzione Lambda workers_manager.py sono elencate nel file readme.md all'interno della cartella TerraformSe vuoi catturare lo stdout e mostrarlo tramite l'interfaccia web mentre l'attività è in esecuzione, vai a ec2py/template.py e segui questi passaggi::
extra_docker_params include le informazioni necessarie affinché i tuoi container Docker inviino lo stdout ai gruppi di log CloudWatch. Dovrai includere questa variabile nella riga di comando quando vuoi visualizzare lo stdout tramite il 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(' ')
Puoi distruggere l'infrastruttura eseguendo questo semplice comando: terraform destroy --auto-approve; questo rimuoverà tutte le risorse esistenti.
Nota: non interrompere questo processo poiché potrebbe lasciare alcuni elementi nel cloud che dovresti poi identificare e rimuovere manualmente.


terraform destroy --auto-approve -target module.gateway_module.aws_api_gateway_deployment.lambdaterraform apply --auto-approve -target module.gateway_moduleextra_docker_paramstemplate.py| variable | default value | description |
|---|
eipenable | false | Se true, la soluzione alloca un pool di indirizzi IP elastici associati ai nodi worker man mano che vengono avviati. Il numero di EIP da riservare viene calcolato con questa formulasum([var.max_workers, var.maximum_number_of_terminating_machines]) |
cidr_whitelist | [] | La whitelist CIDR per consentire solo determinati intervalli IP nel firewall. Es. ["195.95.131.0/24"] |
max_workers e max_queued_tasks_per_worker | max_workers: 3, max_queued_tasks_per_worker: 10 | Queste due impostazioni determinano quando scalare dentro o fuori, es. max_workers 3, max_queued_tasks_per_worker 10. Ciò significa che se il numero di attività supera dieci, verrà creata una nuova istanza EC2. Se ci sono più di venti attività, saranno disponibili al massimo tre istanze EC2 per distribuire i carichi di lavoro (controlla l'algoritmo presente in questo script Terraform/dynamodb_module/autoscalingTool/autoscalingStrategy.py). |
maximum_number_of_terminating_machines | 2 | Definisce il numero di istanze impostate per terminare ma che sono in attesa finché il processo/scan non completa l'attività. |
heartbeat_timeout | 900 | Definisce il tempo per cui quei worker rimangono in attesa. Dopo la scadenza di questo tempo, il worker verrà terminato forzatamente. |
instance_type | t2.micro | https://aws.amazon.com/ec2/instance-types/ |
ami | null | https://aws.amazon.com/es/amazon-linux-ami/ |
retention_time | 7 | Imposta il tempo di conservazione (in giorni) per i log e la scadenza degli elementi della tabella di archivio (attività completate). |