
Nuclear Pond ist ein Dienstprogramm, das Nuclei nutzt, um internetweite Scans zum Preis einer Tasse Kaffee durchzuführen.
Nuclear Pond wird verwendet, um Nuclei in der Cloud mit bemerkenswerter Geschwindigkeit und Flexibilität zu nutzen und Internet-weite Scans für weit weniger als eine Tasse Kaffee durchzuführen.
Es nutzt AWS Lambda als Backend, um Nuclei-Scans parallel auszuführen, bietet die Wahl, JSON-Ergebnisse in S3 zu speichern und mit AWS Athena abzufragen, und ist auf einfachste Weise eine der günstigsten Methoden, um Scans in der Cloud durchzuführen.
Betrachten Sie Nuclear Pond einfach als eine Möglichkeit, Nuclei in der Cloud auszuführen. Sie können es genauso verwenden wie auf Ihrem lokalen Rechner, jedoch parallel und mit einer beliebigen Anzahl von Hosts. Sie müssen lediglich die Nuclei-Befehlszeilenargumente angeben, die Sie übergeben möchten.
Um Nuclear Pond zu installieren, müssen Sie das Backend-Terraform-Modul konfigurieren. Dies können Sie durch Ausführen von terraform apply oder durch Nutzung von terragrunt tun.
$ go install github.com/DevSecOpsDocs/nuclearpond@latest
Sie können Ihr Backend entweder mit Flags oder über Umgebungsvariablen übergeben. Mit -f oder --function-name geben Sie Ihre Lambda-Funktion und mit -r oder --region die entsprechende Region an. Nachfolgend sind die Umgebungsvariablen aufgeführt, die Sie verwenden können.
AWS_LAMBDA_FUNCTION_NAME ist der Name Ihrer Lambda-Funktion, um die Scans auszuführenAWS_REGION ist die Region, in der Ihre Ressourcen bereitgestellt werdenNUCLEARPOND_API_KEY ist der API-Schlüssel zur Authentifizierung an der APIAWS_DYNAMODB_TABLE ist die DynamoDB-Tabelle zum Speichern der API-Scan-StatusNachfolgend sind einige Flags aufgeführt, die Sie bei der Ausführung von nuclearpond angeben können. Die wichtigsten Flags sind -t oder -l für Ihre Ziele, -a für die Nuclei-Argumente und -o zur Angabe der Ausgabe. Bei der Angabe von Nuclei-Argumenten müssen Sie diese als Base64-kodierte Zeichenfolgen übergeben, indem Sie -a $(echo -ne "-t dns" | base64) ausführen.
Nachfolgend sind die Unterbefehle aufgeführt, die Sie innerhalb von nuclearpond ausführen können.
Um den Unterbefehl nuclearpond 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, die Region us-east-1, der Lambda-Funktionsname jwalker-nuclei-runner-function, die Nuclei-Argumente -t dns, die Ausgabe cmd sind und eine Funktion durch einen Batch von einem Host mit -b 1 ausgeführt wird.
$ nuclearpond run -h
Führt Nuclei-Aufgaben parallel aus, indem Lambda asynchron aufgerufen wird
Verwendung:
nuclearpond run [flags]
Flags:
-a, --args string Nuclei-Argumente als Base64-kodierte Zeichenfolge
-b, --batch-size int Batch-Größe für die Anzahl der Ziele pro Ausführung (Standard 1)
-f, --function-name string Name der AWS Lambda-Funktion
-h, --help Hilfe für run
-o, --output string Ausgabetyp zum Speichern der Nuclei-Ergebnisse (s3, cmd oder json) (Standard "cmd")
-r, --region string AWS-Region zum Ausführen von Nuclei
-s, --silent Stille Befehlszeilenausgabe
-t, --target string Einzelnes Ziel zum Angeben
-l, --targets string Liste der Ziele in einer Datei
-c, --threads int Anzahl der Threads zum Ausführen von Lambda-Funktionen, Standard ist 1, was langsam sein wird (Standard 1)
Das Terraform-Modul lädt standardmäßig die Templates bei der Ausführung herunter und fügt sie als Layer hinzu. Die Variablen zum Herunterladen von Templates verwenden den Terraform-Github-Provider, um das Release-Zip herunterzuladen. Der Ordnername innerhalb des Zips befindet sich unter /opt. Da Nuclei die Templates beim Ausführen 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 Ihre eigenen 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 über Athena. Angenommen, Sie haben das Terraform-Modul als Backend eingerichtet, müssen Sie sie nur direkt über Athena abfragen. Möglicherweise müssen Sie die Abfrageergebnisse konfigurieren, falls Sie dies noch nicht 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 bohren wir uns in die Spalte info, 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 generiert 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, alles innerhalb des Terraform-Moduls. Ich empfehle dringend, das zugehörige Readme zu lesen, da es einige wichtige Hinweise enthält.