Всем привет. Не так давно я выпустил очередной релиз своего инструмента dt-report-generator и уже прошло достаточно времени после обзора возможностей первой версии (почитать можно тут), поэтому пришло время поделиться улучшениями и новыми фичами.
Кратко, что из себя представляем инструмент: dtrg (аббревиатура от Dependency Track Report Generator) дополнение к OWASP Dependency Track, которое формирует максимально информативный отчёт об уязвимых компонентах (да, DT не умеет из коробки в удобочитаемый экспорт).

dtrg можно развернуть как на своей машине (с использованием python как flask приложение), так и через docker (кстати, теперь образы каждой версии лежат и доступы в GitHub Container Registry).
Новые возможности и изменения (dtrg v.1.7.0)
-
Поиск проектов по названию в выпадающем меню. После передачи адреса DT и токена все проекты подгружаются в соответствующее поле выбора. Теперь нет необходимости искать uuid проекта в интерфейсе DT.

-
Построение дерева зависимостей (если в вашем sbom есть такая информация) с подсветкой уязвимых компонентов. На данный момент это текстовое (без особой визуализации) представление графа зависимостей до 3 уровня глубины.

-
Построение графика в Excel, который визуально даёт представление о количестве найденных уязвимых компонентов по уровням критичности, а также даёт понимание, сколько из них являются прямыми зависимостями проекта.

-
Использование инструмента as a Service. Теперь есть возможность перед запуском передать параметры URL и токена для обращения в DT. Пользователю останется лишь указать необходимый проект и получить результат выгрузки.

-
Приоритезация уязвимостей на основе обогащенных данных из открытых источников (подробное описание в отдельном разделе ниже).
Приоритезация уязвимостей
Одно из ключевых нововведений последних версий — это встроенная приоритезация уязвимостей, которая помогает сфокусироваться на действительно важных проблемах, а не утонуть в десятках страниц отчёта.
Реализация этой функциональности стала возможна благодаря подключению моего второго инструмента — CVE-PaaS (CVE Prioritizer as a Service). Это отдельный микросервис, который можно использовать как вместе с dtrg, так и отдельно в своих проектах (можно подключить к другим системам управления уязвимостями, CI/CD пайплайнам или даже использовать в собственных скриптах для аналитики).
При генерации отчета dt-report-generator отправляет список уязвимостей в CVE-PaaS. Тот, в свою очередь, обогащает каждую из них дополнительной информацией:
-
Наличие Proof of concept (PoC) и Nuclei Template
-
Наличие в Known Exploited Vulnerabilities Catalog (KEV)
На основе этих данных рассчитывается приоритет уязвимости (в итоговом отчёте уязвимые компоненты будут отсортированы именно по приоритету, а не критичности уязвимости). Подробности об инструменте и расчёте приоритета описаны в репозитории CVE-PaaS.

Подключение реализовано через переменную окружения, указывающую на инструмент приоритезации:
export CVEPAAS_URL="http://evil.com"
Сразу отмечу, что сейчас это работает не сильно шустро( Ждём новый релиз от разработчика CVE-PaaS (от меня))).
Пример локальной песочницы
Инструкция для тех, кто хочет локально протестировать DT Report Generator в действии и посмотреть, как он работает в связке с Dependency Track.
1.Разворачиваем Dependency Track
Если у вас ещё не развернут DT — используйте официальный гайд (docker compose). Тут останавливаться подробно не будем — просто следуйте инструкции по ссылке, это займёт пару минут. Ваш DT скорее всего будет доступен по адресу http://localhost:8080.
2.Запускаем dt-report-generator
После запуска инструмент сразу не сможет достучаться до DT. Для этого нужно объединить их в одну сеть.
3.Узнаём имя сети DT
docker network ls
Вы увидите сеть с именем dependency-track_default
(дефолтная сеть, которая создается docker compose для DT).
4.Подключаем dtrg к этой сети
docker network connect dependency-track_default dtrg
5.Узнаём IP-адрес DT (а именно apiserver, т.к. обращение идет именно к нему)
docker inspect dependency-track-apiserver
Найдите блок NetworkSettings > Networks > dependency-track_default > IPAddress (у меня, например, был адрес 172.18.0.3. Скорее и у вас будет похожая подсеть).
6.Всё. Используйте данный адрес в интерфейсе инструмента и будет вам счастье (не забудьте указать порт. По умолчанию в данном случае он 8080).
Планы развития
Как и в прошлый раз, делюсь планами на будущее. Публичное обещание — лучший стимул довести всё до ума.
-
Оптимизация производительности. Один из неприятных моментов — загрузка проектов при большом их количестве. Более 10к проектов (а именно столько у меня в боевых условиях) уже не в шутку тормозят интерфейс. В планах — вынести операцию на бэкенд, чтобы фронт больше не страдал.
-
Документация 2.0. Собираюсь серьёзно прокачать API спецификацию, добавить разбор частных случаев и кастомных настроек.
-
Управление графом зависимостей. Граф уже даёт необходимое представление о проекте и позволяет определить очередность анализа зависимостей, но хочется сделать его более наглядным и читаемым, добавить возможность фильтровать, подсвечивать маршруты и т.д.
-
Сравнение версий проекта. Хочется добавить возможность сравнивать отчёты по разным версиям одного и того же проекта. На выходе: какие уязвимости ушли, какие появились, что изменилось в компонентах.
Как всегда открыт к вашим предложениям и замечаниям!
ссылка на оригинал статьи https://habr.com/ru/articles/900276/
Добавить комментарий