Nuclear Pond 用于在云端利用 Nuclei,具备超快的速度、灵活性,并且能以远低于一杯咖啡的成本执行互联网范围的扫描。
它利用 AWS Lambda 作为后端来并行调用 Nuclei 扫描,可选择将 JSON 发现结果存储在 S3 中以便通过 AWS Athena 进行查询,并且是执行云端扫描最经济的方式之一。
将 Nuclear Pond 视作在云端运行 Nuclei 的一种方式。您可以像在本地机器上一样使用它,但可以并行执行并指定任意数量的目标。您只需考虑要传递给 Nuclei 的命令行标志即可。
要安装 Nuclear Pond,您需要配置后端的 terraform 模块。可以通过运行 terraform apply 或利用 terragrunt 来完成。
$ go install github.com/DevSecOpsDocs/nuclearpond@latest
您可以通过标志或环境变量传递后端信息。可以使用 -f 或 --function-name 指定 Lambda 函数,使用 -r 或 --region 指定区域。以下是可用的环境变量:
AWS_LAMBDA_FUNCTION_NAME:执行扫描的 Lambda 函数名称AWS_REGION:资源部署的区域NUCLEARPOND_API_KEY:用于 API 身份验证的 API 密钥AWS_DYNAMODB_TABLE:存储 API 扫描状态的 DynamoDB 表以下是运行 nuclearpond 时可以指定的一些标志。主要标志包括用于目标的 -t 或 -l、用于 Nuclei 参数的 -a,以及用于指定输出的 -o。指定 Nuclei 参数时,必须将其作为 base64 编码的字符串传递,例如执行 -a $(echo -ne "-t dns" | base64)。
以下是在 nuclearpond 中可以执行的子命令:
运行 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,其中目标为 devsecopsdocs.com,区域为 us-east-1,Lambda 函数名为 jwalker-nuclei-runner-function,Nuclei 参数为 -t dns,输出为 cmd,并通过 -b 1 让每个函数处理一个目标。
$ nuclearpond run -h
通过异步调用 Lambda 并行执行 Nuclei 任务
用法:
nuclearpond run [flags]
标志:
-a, --args string Nuclei 参数(base64 编码字符串)
-b, --batch-size int 每次执行处理的目标数量(默认 1)
-f, --function-name string AWS Lambda 函数名称
-h, --help 帮助信息(run)
-o, --output string 保存 Nuclei 结果的输出类型(s3、cmd 或 json)(默认 "cmd")
-r, --region string AWS 区域(用于运行 Nuclei)
-s, --silent 静默命令行输出
-t, --target string 指定单个目标
-l, --targets string 文件中的目标列表
-c, --threads int 运行 Lambda 函数的线程数,默认为 1,速度较慢(默认 1)
默认情况下,terraform 模块会在执行时下载模板,并将模板作为层添加。用于下载模板的变量使用 terraform github provider 下载发布版 zip 文件。zip 内的文件夹名称位于 /opt 下。由于 Nuclei 在运行时下载模板,我们不必手动下载,但为了提高性能,您可以指定 -t /opt/nuclei-templates-9.3.4/dns 来使用已下载 zip 中的模板。要使用自己的模板,您必须引用一个发布版本。如果自己的仓库是公开的,则 github_token 不是必需的。
如果您将输出指定为 s3,发现结果将存储在 S3 中。最快的方式是通过 Athena 获取。假设您已将 terraform 模块设置为后端,只需直接通过 Athena 查询即可。如果尚未配置查询结果,您可能需要配置。
select
*
from
nuclei_db.findings_db
limit 10;
为了更深入地了解查询,我提供一个快速示例。在 SELECT 语句中,我们深入查询 info 列,"matched-at" 列由于包含 - 字符必须使用双引号,并且只搜索由 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')
后端基础设施全部包含在 terraform 模块中。强烈建议阅读其相关的 README,因为其中包含重要说明。