
Nuclear Pond è un'utility che sfrutta Nuclei per eseguire scansioni su scala internet al costo di una tazza di caffè.
Abbiamo fatto il fork di questo progetto per poter continuare questa grande idea, spero che insieme possiamo migliorare il codice e renderlo disponibile a tutti - @OFJAAAH
Per installare Nuclear Pond, devi configurare il backend modulo terraform. Puoi farlo eseguendo terraform apply oppure utilizzando terragrunt.
Utilizza AWS Lambda come backend per eseguire scan Nuclei in parallelo, con la possibilità di salvare i risultati in formato json su S3 per interrogarli con AWS Athena, ed è facilmente uno dei modi più economici per eseguire scan nel cloud.
Pensa a Nuclear Pond semplicemente come a un modo per eseguire Nuclei nel cloud. Puoi usarlo proprio come faresti sulla tua macchina locale, ma eseguendo gli scan in parallelo e con tutti gli host che desideri specificare. Tutto ciò a cui devi pensare sono i flag della riga di comando di nuclei che vuoi passargli.
Per installare Nuclear Pond, devi configurare il backend modulo terraform. Puoi farlo eseguendo terraform apply oppure utilizzando terragrunt.
$ go install github.com/DevSecOpsDocs/nuclearpond@latest
Puoi passare il tuo backend tramite flag oppure tramite variabili d'ambiente. Puoi usare -f o --function-name per specificare la tua funzione Lambda e -r o --region per la regione specificata. Di seguito sono riportate le variabili d'ambiente che puoi usare.
AWS_LAMBDA_FUNCTION_NAME è il nome della tua funzione lambda su cui eseguire gli scanAWS_REGION è la regione in cui sono distribuite le tue risorseNUCLEARPOND_API_KEY è la chiave API per l'autenticazione all'APIAWS_DYNAMODB_TABLE è la tabella dynamodb per memorizzare gli stati degli scan APIDi seguito sono riportati alcuni dei flag che puoi specificare quando esegui nuclearpond. I flag principali di cui hai bisogno sono -t o -l per i tuoi target, -a per gli argomenti di nuclei e -o per specificare l'output. Quando specifichi gli argomenti di Nuclei, devi passarli come stringhe codificate in base64 eseguendo -a $(echo -ne "-t dns" | base64).
Di seguito sono riportati i sottocomandi che puoi eseguire all'interno di nuclearpond.
Per eseguire il sottocomando di nuclearpond nuclearpond run -t devsecopsdocs.com -r us-east-1 -f jwalker-nuclei-runner-function -a $(echo -ne "-t dns" | base64) -o cmd -b 1, dove il target è devsecopsdocs.com, la regione è us-east-1, il nome della funzione lambda è jwalker-nuclei-runner-function, gli argomenti di nuclei sono -t dns, l'output è cmd e viene eseguita una funzione attraverso un batch di un host con -b 1.
$ 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)
Il modulo terraform, per impostazione predefinita, scarica i template durante l'esecuzione e li aggiunge anche come layer. Le variabili per scaricare i template utilizzano il provider github di terraform per scaricare lo zip della release. Il nome della cartella all'interno dello zip si troverà in /opt. Poiché Nuclei li scarica durante l'esecuzione non è necessario farlo, ma per migliorare le prestazioni puoi specificare -t /opt/nuclei-templates-9.3.4/dns per eseguire i template dallo zip scaricato. Per specificare i tuoi template devi fare riferimento a una release. Quando lo fai su un repository tuo, devi specificare queste variabili nel modulo terraform; github_token non è richiesto se il tuo repository è pubblico.
Se hai specificato s3 come output, i tuoi risultati si troveranno su S3. Il modo più rapido per accedervi è tramite Athena. Supponendo che tu abbia configurato il modulo terraform come backend, tutto ciò che devi fare è interrogarli direttamente tramite Athena. Potrebbe essere necessario configurare i risultati delle query se non l'hai già fatto.
select
*
from
nuclei_db.findings_db
limit 10;
Per approfondire un po' di più le query, ho pensato di darti un rapido esempio. Nell'istruzione select esploriamo la colonna info, la colonna "matched-at" deve essere tra doppi apici a causa del carattere -, e stai cercando solo i risultati high e critical generati da Nuclei.
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')
L'infrastruttura backend, tutta all'interno del modulo terraform. Consiglio vivamente di leggere il readme associato perché contiene note importanti.