
Nuclear Pond es una utilidad que aprovecha Nuclei para realizar escaneos a nivel de internet por el costo de una taza de café.
Hicimos un fork de este proyecto para poder continuar con esta gran idea, espero que juntos podamos mejorar el código y hacerlo disponible para todos - @OFJAAAH
Para instalar Nuclear Pond, necesitas configurar el backend módulo de terraform. Puedes hacerlo ejecutando terraform apply o usando terragrunt.
Utiliza AWS Lambda como backend para invocar escaneos de Nuclei en paralelo, con la opción de almacenar los hallazgos 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 como una forma de ejecutar Nuclei en la nube. Puedes usarlo igual que lo harías en tu máquina local, pero ejecutándolos en paralelo y con tantos hosts como quieras especificar. Todo lo que necesitas considerar son los flags de la línea de comandos de nuclei que deseas pasarle.
Para instalar Nuclear Pond, necesitas configurar el backend módulo de terraform. Puedes hacerlo ejecutando terraform apply o usando terragrunt.
$ go install github.com/DevSecOpsDocs/nuclearpond@latest
Puedes pasar tu backend mediante flags o 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 en la que se ejecutan los escaneosAWS_REGION es la región donde están desplegados tus recursosNUCLEARPOND_API_KEY es la clave de API para autenticarse en la APIAWS_DYNAMODB_TABLE es la tabla de DynamoDB para almacenar los estados de escaneo de la APIA continuación se muestran algunos de los flags que puedes especificar al ejecutar nuclearpond. Los flags 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 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 mediante un lote de un host a través de -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, por defecto, descarga las plantillas en la ejecución y además las añade como capa. Las variables para descargar plantillas usan el proveedor de github de terraform para descargar el zip de la versión. El nombre de la carpeta dentro del zip se ubicará en /opt. Dado que Nuclei las descarga en la ejecución, 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 backend, todo lo que necesitas hacer es consultarlos directamente a través de Athena. Es posible que tengas que 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 sentencia select profundizamos en la columna info, la columna "matched-at" debe estar entre comillas dobles debido al carácter -, y solo se buscan hallazgos altos y críticos 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 algunas notas importantes.