
Nuclear Pond ist ein Dienstprogramm, das Nuclei nutzt, um internetweite Scans für den Preis einer Tasse Kaffee durchzuführen.
Wir haben dieses Projekt geforkt, damit wir diese großartige Idee fortsetzen können. Ich hoffe, dass wir gemeinsam den Code verbessern und ihn allen zugänglich machen können – @OFJAAAH
Um Nuclear Pond zu installieren, müssen Sie das Backend-Terraform-Modul konfigurieren. Dies können Sie tun, indem Sie terraform apply ausführen oder terragrunt verwenden.
Es nutzt AWS Lambda als Backend, um Nuclei-Scans parallel auszuführen, bietet die Möglichkeit, JSON-Ergebnisse zur Abfrage mit AWS Athena in S3 zu speichern, und ist mit Abstand eine der günstigsten Möglichkeiten, Scans in der Cloud auszuführen.
Betrachten Sie Nuclear Pond einfach als eine Möglichkeit, Nuclei in der Cloud auszuführen. Sie können es genau wie auf Ihrem lokalen Rechner verwenden, jedoch parallel und mit so vielen Hosts, wie Sie angeben möchten. Sie müssen nur an die Nuclei-Befehlszeilenoptionen denken, die Sie übergeben möchten.
Um Nuclear Pond zu installieren, müssen Sie das Backend-Terraform-Modul konfigurieren. Dies können Sie tun, indem Sie terraform apply ausführen oder terragrunt verwenden.
$ go install github.com/DevSecOpsDocs/nuclearpond@latest
Sie können Ihr Backend entweder über Flags oder über Umgebungsvariablen übergeben. Mit -f oder --function-name legen Sie Ihre Lambda-Funktion fest und mit -r oder --region die angegebene Region. Im Folgenden finden Sie die Umgebungsvariablen, die Sie verwenden können.
AWS_LAMBDA_FUNCTION_NAME ist der Name Ihrer Lambda-Funktion, auf der die Scans ausgeführt werdenAWS_REGION ist die Region, in der Ihre Ressourcen bereitgestellt werdenNUCLEARPOND_API_KEY ist der API-Schlüssel für die Authentifizierung an der APIAWS_DYNAMODB_TABLE ist die DynamoDB-Tabelle zum Speichern des API-ScanstatusIm Folgenden finden Sie einige der Flags, die Sie beim Ausführen von nuclearpond angeben können. Die wichtigsten Flags, die Sie benötigen, sind -t oder -l für Ihre Ziele, -a für die Nuclei-Argumente und -o für die Angabe Ihrer Ausgabe. Wenn Sie Nuclei-Argumente angeben, müssen Sie diese als Base64-codierte Zeichenfolgen übergeben, indem Sie -a $(echo -ne "-t dns" | base64) ausführen.
Im Folgenden finden Sie die Unterbefehle, die Sie innerhalb von nuclearpond ausführen können.
Um den nuclearpond-Unterbefehl auszuführen: nuclearpond run -t devsecopsdocs.com -r us-east-1 -f jwalker-nuclei-runner-function -a $(echo -ne "-t dns" | base64) -o cmd -b 1, wobei das Ziel devsecopsdocs.com ist, die Region us-east-1, der Lambda-Funktionsname jwalker-nuclei-runner-function, die Nuclei-Argumente -t dns, die Ausgabe cmd und eine Funktion über einen Batch aus einem Host mittels -b 1 ausgeführt wird.
$ nuclearpond run -h
Executes nuclei tasks in parallel by invoking lambda asynchronously
Usage:
nuclearpond run [flags]
Flags:
-a, --args string nuclei arguments as base64 encoded string
-b, --batch-size int batch size for number of targets per execution (default 1)
-f, --function-name string AWS Lambda function name
-h, --help help for run
-o, --output string output type to save nuclei results(s3, cmd, or json) (default "cmd")
-r, --region string AWS region to run nuclei
-s, --silent silent command line output
-t, --target string individual target to specify
-l, --targets string list of targets in a file
-c, --threads int number of threads to run lambda functions, default is 1 which will be slow (default 1)
Das Terraform-Modul lädt die Templates standardmäßig bei der Ausführung herunter und fügt sie außerdem als Layer hinzu. Die Variablen zum Herunterladen von Templates verwenden den Terraform-GitHub-Provider, um das Release-ZIP herunterzuladen. Der Ordnername innerhalb des ZIP befindet sich unter /opt. Da Nuclei sie bei der Ausführung herunterlädt, müssen wir das nicht tun, aber zur Verbesserung der Leistung können Sie -t /opt/nuclei-templates-9.3.4/dns angeben, um Templates aus dem heruntergeladenen ZIP auszuführen. Um eigene Templates anzugeben, müssen Sie ein Release referenzieren. Wenn Sie dies in Ihrem eigenen Repository tun, müssen Sie diese Variablen im Terraform-Modul angeben; github_token ist nicht erforderlich, wenn Ihr Repository öffentlich ist.
Wenn Sie s3 als Ausgabe angegeben haben, befinden sich Ihre Ergebnisse in S3. Der schnellste Weg, darauf zuzugreifen, ist Athena. Sofern Sie das Terraform-Modul als Backend eingerichtet haben, müssen Sie sie nur direkt über Athena abfragen. Möglicherweise müssen Sie die Abfrageergebnisse konfigurieren, falls Sie dies nicht bereits getan haben.
select
*
from
nuclei_db.findings_db
limit 10;
Um etwas tiefer in die Abfragen einzusteigen, möchte ich Ihnen ein kurzes Beispiel geben. In der SELECT-Anweisung gehen wir genauer auf die Spalte info ein, die Spalte "matched-at" muss aufgrund des --Zeichens in doppelten Anführungszeichen stehen, und es werden nur hohe und kritische Ergebnisse gesucht, die von Nuclei erzeugt wurden.
SELECT
info.name,
host,
type,
info.severity,
"matched-at",
info.description,
template,
dt
FROM
"nuclei_db"."findings_db"
where
host like '%devsecopsdocs.com'
and info.severity in ('high','critical')
Die Backend-Infrastruktur befindet sich vollständig im Terraform-Modul. Ich empfehle dringend, das zugehörige README zu lesen, da es einige wichtige Hinweise enthält.