Скрещиваем Ежа С Ужом. Заводим Репорты Nuclei В Defect Dojo
Сканерами уязвимостей пользуются многие, и в обороне и в атаке. Кто-то использует дорогой SaaS, кто-то использует opensource-решения вроде OpenVAS или даже SaaS на его основе.
Казалось бы, можно использовать готовые решения, но мы пойдём другим путём и будем заводить репорты Nuclei в Defect Dojo.
Как раз, поддержка репортов есть, нужно только ей воспользоваться.
Можно конечно использовать Rengine, и это бы решило часть проблем. Но задача стояла в сборе уязвимостей не только от nuclei, но и других инструментов, вроде trivy.
Так же не могу сказать, что я в восторге от Defect Dojo, но замены ему я не нашёл. По крайней мере из opensource.
Отдельно отмечу, что это тестовый пример и на руководство на полноценное внедрение он не тянет.
Рекомендую для тестов поднять заведомо уязвимый хост, чтобы удостоверится в работоспособности.
Используемые инструменты
Нам потребуются:
docker-compose >= 1.28
bash
Defect Dojo
Nuclei
Defect Dojo
|
|
Если всё запустилось, то на http://localhost:8080/ нас будет ждать Defect Dojo.
Нам от него нужно:
- Получить api-token пользователя
- Создать product
1. Получаем api-token
В правом верхнем углу нажимаем на “человечка”, нажимаем на API v2 Key. Готово.
2. Создаём product
В левой панели “Products” выбираем “Add Product”, где заполняем необходимые поля.
Важно, что в данном примере у нас будет имя
Nuclei Test Scan
, так как оно будет использоваться и далее.
В дальнейшем стоит создать отдельный Product Type и указывать его, но в данном случае будем использовать стандартный.
Ещё нам потребуется product id, который мы можем увидеть в адресной строке. Он нам так же понадобится.
Nuclei
Установить nuclei можно множеством способов, но проще всего скачать архив с бинарником со страницы релизов.
Подготовка
Перед началом сканирования стоит сделать отдельный конфиг, чтобы использовать только конкретные шаблоны для поиска CVE, уязвимостей и мисконфигов.
Так же стоит использовать дополнительные хидеры, чтобы используемый вами сканер можно было отделить от кучи других запросов.
И разумеется, выставляем допустимый rate-limit
.
Пример конфига:
|
|
Сохраняем конфиг в файл nuclei.conf
и оставляем его рядом с бинарником.
Использование
В целом, у нас всё готово, но без скрипта запускать nuclei с множеством опций это сомнительное удовольствие.
Так же, к этому моменту уже можно собрать список хостов для сканирования.
Небольшие пояснения по скрипту:
- В секции
Defect Dojo
мы указываем хост, порт и токен. Так же идут эндпоинты api, их мы не меняем. - Далее идёт время, обовление nuclei и его теплейтов (опционально, можно закомментить) и сам запуск nuclei с опциями.
- В секции
Create engagement
указываем необходимый product id (product
), про который говорилось выше. - И наконец секция Send result to defect dojo, где мы указываем
product_name
.
Пример скрипта:
|
|
Запускаем, смотрим Engagements в нашем продукте, и если всё отработало верно, то там нас будут ждать находки в виде CVE и\или уязвимостей.
Итог
Разумеется, есть куда стремится. Ручное указание product id это не удобно, решению не хватает гибкости.
Но решение есть и оно работает, что уже хорошо.