
Nuclear Pond es una utilidad que aprovecha Nuclei para realizar escaneos a nivel de internet al costo de una taza de café.
Nuclear Pond se utiliza para aprovechar Nuclei en la nube con velocidad, flexibilidad notables, y realizar escaneos a nivel de Internet por mucho menos que el costo de un café.
Aprovecha AWS Lambda como backend para invocar escaneos de Nuclei en paralelo, con la opción de almacenar hallazgos en json en S3 para consultarlos con AWS Athena, y es fácilmente una de las formas más económicas de ejecutar escaneos en la nube.
Piensa en Nuclear Pond simplemente como una forma de ejecutar Nuclei en la nube. Puedes usarlo como lo harías en tu máquina local, pero ejecutándolos en paralelo y con tantos hosts como desees especificar. Todo lo que necesitas considerar son las banderas de línea de comandos de Nuclei que deseas pasarle.
Para instalar Nuclear Pond, necesitas configurar el módulo de terraform del backend. Puedes hacerlo ejecutando terraform apply o usando terragrunt.
$ go install github.com/DevSecOpsDocs/nuclearpond@latest
Puedes pasar tu backend mediante banderas o a través de variables de entorno. Puedes usar -f o --function-name para especificar tu función Lambda y -r o --region para la región especificada. A continuación se muestran las variables de entorno que puedes usar.
AWS_LAMBDA_FUNCTION_NAME es el nombre de tu función lambda para ejecutar los escaneosAWS_REGION es la región donde están desplegados tus recursosNUCLEARPOND_API_KEY es la clave API para autenticarse en la APIAWS_DYNAMODB_TABLE es la tabla de DynamoDB para almacenar los estados de los escaneos de la APIA continuación se muestran algunas de las banderas que puedes especificar al ejecutar nuclearpond. Las banderas principales que necesitas son -t o -l para tus objetivos, -a para los argumentos de Nuclei y -o para especificar tu salida. Al especificar los argumentos de Nuclei, debes pasarlos como cadenas codificadas en base64 ejecutando -a $(echo -ne "-t dns" | base64).
A continuación se muestran los subcomandos que puedes ejecutar dentro de nuclearpond.
Para ejecutar el subcomando de 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 en el cual el objetivo es devsecopsdocs.com, la región es us-east-1, el nombre de la función lambda es jwalker-nuclei-runner-function, los argumentos de Nuclei son -t dns, la salida es cmd, y ejecuta una función a través de un lote de un host mediante -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)
El módulo de terraform descarga las plantillas por defecto al ejecutarse y también las agrega como una capa. Las variables para descargar plantillas utilizan el proveedor de github de terraform para descargar el zip de la versión. El nombre de la carpeta dentro del zip se encontrará en /opt. Dado que Nuclei las descarga al ejecutarse, no es necesario, pero para mejorar el rendimiento puedes especificar -t /opt/nuclei-templates-9.3.4/dns para ejecutar plantillas desde el zip descargado. Para especificar tus propias plantillas, debes hacer referencia a una versión. Al hacerlo en tu propio repositorio, debes especificar estas variables en el módulo de terraform; github_token no es necesario si tu repositorio es público.
Si has especificado s3 como salida, tus hallazgos se ubicarán en S3. La forma más rápida de acceder a ellos es mediante Athena. Suponiendo que configuraste el módulo de terraform como tu backend, todo lo que necesitas hacer es consultarlos directamente a través de Athena. Es posible que debas configurar los resultados de las consultas si aún no lo has hecho.
select
*
from
nuclei_db.findings_db
limit 10;
Para profundizar un poco más en las consultas, pensé en darte un ejemplo rápido. En la declaración SELECT, profundizamos en la columna info, la columna "matched-at" debe estar entre comillas dobles debido al carácter -, y estás buscando solo hallazgos de alto y crítico generados por 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')
La infraestructura del backend, todo dentro del módulo de terraform. Recomiendo encarecidamente leer el readme asociado, ya que contiene notas importantes.