
Serverlose AWS-Lösung zur Verteilung von Recon- und Schwachstellenscan-Workloads. Übermitteln Sie Aufgaben über das Web-UI; EC2-Worker führen benutzerdefinierte Python-Skripte mit Tools wie Nmap aus.
CowCloud wurde ursprünglich entwickelt, um Recon-Tools und Schwachstellenscans verteilt auszuführen; ein Anwendungsfall könnten beispielsweise Bug-Bounty-Jäger sein. Diese Lösung soll Endbenutzer von der zugrunde liegenden Arbeit abstrahieren, die zur Verteilung von Workloads in AWS erforderlich ist. CowCloud bietet Benutzern eine benutzerfreundliche Weboberfläche zum Anzeigen und Erstellen neuer Aufgaben, die später von Python-Code verarbeitet werden, der auf Workerknoten (EC2-Instanzen) läuft. Es ist vorgesehen, dass sowohl der Python-Code als auch die EC2-AMIs angepasst werden.
Als Beispiel: Angenommen, Sie möchten Nmap-Scans ausführen. In diesem Fall können Sie einfach ein AMI aus dem AMI-Katalog auswählen und das Feld image_id in Terraform/ec2_module/ec2_module.tf aktualisieren. Anschließend müsste die Datei ec2py/template.py angepasst werden, um die Argumente für den Nmap-Scan zu konfigurieren (-Pn, -p 443, usw.). Zuletzt müsste das Feld user_data in der Konfigurationsdatei Terraform/ec2_module/ec2_module.tf aktualisiert werden, um Nmap und seine Abhängigkeiten zu installieren.
Eine weitere Möglichkeit besteht darin, mehrere kommerzielle Tools zu installieren und auszuführen; in diesem Fall möchten Sie möglicherweise Ihre eigene EC2-Instanz oder einen eigenen Snapshot erstellen. Dabei würden Sie alle Abhängigkeiten installieren und die Lizenzen aktivieren, um dieses AMI als Gold-Image für Ihre Worker zu verwenden.

CowCloud lässt sich in drei Hauptkomponenten unterteilen:
Dies sind die wichtigsten Funktionen:
autoscalingStrategy.py)retention_time zu löschenextra_docker_params in der Datei template.py (dies wird im Abschnitt Administrator/Wartung weiter unten erläutert)
| variable | Standardwert | Beschreibung |
|---|---|---|
eipenable | false | Wenn true, weist die Lösung einen Pool elastischer IP-Adressen zu, die den Workerknoten beim Hochfahren zugeordnet werden. Die Anzahl der zu reservierenden EIPs wird anhand dieser Formelsum([var.max_workers, var.maximum_number_of_terminating_machines]) berechnet. |
cidr_whitelist | [] | Die CIDR-Whitelist, um in der Firewall nur bestimmte IP-Bereiche zuzulassen. Z. B. ["195.95.131.0/24"] |
max_workers und max_queued_tasks_per_worker | max_workers: 3, max_queued_tasks_per_worker: 10 | Diese beiden Einstellungen bestimmen, wann horizontal skaliert (Scale-in/Scale-out) wird, z. B. max_workers 3, max_queued_tasks_per_worker 10. Das bedeutet, wenn die Anzahl der Aufgaben zehn überschreitet, wird eine neue EC2-Instanz erstellt. Wenn mehr als zwanzig Aufgaben vorhanden sind, stehen maximal drei EC2-Instanzen zur Verteilung der Arbeitslasten zur Verfügung (siehe Algorithmus in diesem Skript Terraform/dynamodb_module/autoscalingTool/autoscalingStrategy.py). |
maximum_number_of_terminating_machines | 2 | Dies definiert die Anzahl der Instanzen, die zum Beenden vorgesehen sind, aber angehalten werden, bis der Prozess/Scan die Aufgabe abgeschlossen hat. |
heartbeat_timeout | 900 | Dies definiert die Zeit, die diese Worker in der Warteschleife gehalten werden. Nach Ablauf dieser Zeit wird der Worker zwangsweise beendet. |
instance_type | t2.micro | https://aws.amazon.com/ec2/instance-types/ |
ami | null | https://aws.amazon.com/es/amazon-linux-ami/ |
retention_time | 7 | Legt die Aufbewahrungszeit (in Tagen) für Logs und den Ablauf der Elemente der Archivtabelle (abgeschlossene Aufgaben) fest. |
Durch die Ausführung von Terraform wird eine neue Datei erstellt (config.js); diese enthält die Konfiguration, die die React-JS-App benötigt, um sich gegen das Cognito-User-Pool-Verzeichnis zu authentifizieren. Nachdem die Infrastruktur bereitgestellt wurde, müssen Sie die React-App erstellen und den Ordner build hochladen. Außerdem müssen Sie den Python-Code in einen S3-Bucket hochladen, der als Code-Repository dient. Dieser Prozess wurde in zwei Skripten, setup.bat und setup.sh, automatisiert, sodass Sie sich darum nicht kümmern müssen; dies dient nur der Zusammenfassung dieser Phase.
Die Infrastruktur wird standardmäßig in der Region us-east-1 bereitgestellt; dies kann jedoch in der Datei locals.tf im Terraform-Ordner geändert werden.
Schritte:
variables.tf; die Variable ami muss auf eine vorhandene EC2-AMI verweisen, die entweder Ihre goldene AMI oder eine aus dem EC2-Katalog sein kannaws configure, um Ihr AWS-Konto zu verwenden. Überprüfen Sie, ob die Konfiguration korrekt ist, indem Sie diesen Befehl ausführen: aws sts get-caller-identity; bei korrekter Konfiguration sollte kein Fehler zurückgegeben werdenaws 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
Jetzt kann es losgehen! Registrieren Sie sich, melden Sie sich an und erstellen Sie eine neue Aufgabe!
Sobald alles bereitgestellt ist und das Frontend erreichbar ist, sollten Sie die folgenden Schritte ausführen:
CowCloud\ec2py> python .\decypt_file.py 2e8cf87c-5389-11ec-abec-d6d1f378b18d
Die Person, die für die Bereitstellung und Wartung der Infrastruktur verantwortlich ist, muss die über die Web-App bereitgestellten Endbenutzereingaben ordnungsgemäß bereinigen und validieren. Mit anderen Worten: Stellen Sie sicher, dass der Code in ec2py/template.py nicht anfällig für OS-Command-Injection ist.
Dieser Punkt wird hervorgehoben, da er der kritischste Aspekt des Systems ist. Es wurde besondere Sorgfalt darauf verwendet, den Umfang der Berechtigungen und der Gefährdung der Worker zu begrenzen und so die damit verbundenen Risiken zu reduzieren. Dennoch liegt es in der Verantwortung des Administrators, sich um diesen Aspekt der Systemsicherheit zu kümmern.
Die Rollenrichtlinien, die dem Profil der EC2-Instanzen zugeordnet sind, sind in der Datei readme.md im Terraform-Ordner aufgeführt
workers_manager.py, die vom ec2py-Tool aufgerufen wird, um privilegiertere Aktionen auszuführen. Diese Aktionen wurden in eine Lambda-Funktion verlagert, um das Risiko zu begrenzen, falls jemand den Zugriffsschlüssel der dem EC2-Profil zugeordneten Rolle kompromittiert. Sie funktioniert dennoch mit IMDSv2.
Die Rollenrichtlinien, die der Lambda-Funktion workers_manager.py zugeordnet sind, sind in der Datei readme.md im Terraform-Ordner aufgeführtWenn Sie die Standardausgabe erfassen und während der Ausführung der Aufgabe über die Weboberfläche anzeigen möchten, gehen Sie zu ec2py/template.py und gehen Sie wie folgt vor:
extra_docker_params enthält die Informationen, die Ihre Docker-Container benötigen, um die Standardausgabe an CloudWatch-Loggruppen zu senden. Sie müssen diese Variable in die Befehlszeile aufnehmen, wenn Sie die Standardausgabe über das Frontend anzeigen möchten.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(' ')
Sie können die Infrastruktur zerstören, indem Sie diesen einfachen Befehl ausführen: terraform destroy --auto-approve. Dieser entfernt alle vorhandenen Ressourcen.
Hinweis: Unterbrechen Sie diesen Vorgang nicht, da andernfalls einige Elemente in der Cloud zurückbleiben könnten, die Sie dann manuell identifizieren und entfernen müssten.


terraform destroy --auto-approve -target module.gateway_module.aws_api_gateway_deployment.lambdaterraform apply --auto-approve -target module.gateway_module