
Nuclear Pond — это утилита, использующая Nuclei для проведения сканирования всего интернета по стоимости чашки кофе.
Мы форкнули этот проект, чтобы продолжить эту отличную идею. Надеюсь, что вместе мы сможем улучшить код и сделать его доступным для всех - @OFJAAAH
Для установки Nuclear Pond необходимо настроить бэкенд terraform module. Это можно сделать, выполнив terraform apply или используя terragrunt.
Он использует AWS Lambda в качестве бэкенда для параллельного запуска сканирований Nuclei, с возможностью сохранения результатов в формате json в S3 для запросов через AWS Athena и является одним из самых дешевых способов выполнения сканирований в облаке.
Воспринимайте Nuclear Pond просто как способ запуска Nuclei в облаке. Вы можете использовать его так же, как на локальной машине, но запускать параллельно и с любым количеством хостов. Все, что вам нужно — это указать флаги командной строки nuclei, которые вы хотите передать.
Для установки Nuclear Pond необходимо настроить бэкенд terraform module. Это можно сделать, выполнив 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 для аутентификации в APIAWS_DYNAMODB_TABLE — таблица DynamoDB для хранения состояний сканирований APIНиже приведены некоторые флаги, которые можно указать при запуске nuclearpond. Основные необходимые флаги: -t или -l для ваших целей, -a для аргументов nuclei и -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
Выполняет задачи nuclei параллельно, асинхронно вызывая lambda
Использование:
nuclearpond run [флаги]
Флаги:
-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 для загрузки zip-архива релиза. Имя папки внутри zip-архива будет находиться в /opt. Поскольку Nuclei загружает их при запуске, нам это не обязательно, но для улучшения производительности вы можете указать -t /opt/nuclei-templates-9.3.4/dns для выполнения шаблонов из загруженного zip-архива. Чтобы указать свои собственные шаблоны, вы должны ссылаться на релиз. При этом в собственном репозитории необходимо указать эти переменные в модуле terraform; 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 module. Настоятельно рекомендую прочитать прилагаемый README, так как в нем есть важные замечания.