- PVSM.RU - https://www.pvsm.ru -
Всем привет. Не так давно я выпустил очередной релиз своего инструмента dt-report-generator [1] и уже прошло достаточно времени после обзора возможностей первой версии (почитать можно тут: https://habr.com/ru/articles/860536/ [2]), поэтому пришло время поделиться улучшениями и новыми фичами.
Кратко, что из себя представляем инструмент: dtrg (аббревиатура от Dependency Track Report Generator) дополнение к OWASP Dependency Track [3], которое формирует максимально информативный отчёт об уязвимых компонентах (да, DT не умеет из коробки в удобочитаемый экспорт).
dtrg можно развернуть как на своей машине (с использованием python как flask приложение), так и через docker (кстати, теперь образы каждой версии лежат и доступы в GitHub Container Registry).
Поиск проектов по названию в выпадающем меню. После передачи адреса DT и токена все проекты подгружаются в соответствующее поле выбора. Теперь нет необходимости искать uuid проекта в интерфейсе DT.
Построение дерева зависимостей (если в вашем sbom есть такая информация) с подсветкой уязвимых компонентов. На данный момент это текстовое (без особой визуализации) представление графа зависимостей до 3 уровня глубины.
Построение графика в Excel, который визуально даёт представление о количестве найденных уязвимых компонентов по уровням критичности, а также даёт понимание, сколько из них являются прямыми зависимостями проекта.
Использование инструмента as a Service. Теперь есть возможность перед запуском передать параметры URL и токена для обращения в DT. Пользователю останется лишь указать необходимый проект и получить результат выгрузки.
Приоритезация уязвимостей на основе обогащенных данных из открытых источников (подробное описание в отдельном разделе ниже).
Одно из ключевых нововведений последних версий — это встроенная приоритезация уязвимостей, которая помогает сфокусироваться на действительно важных проблемах, а не утонуть в десятках страниц отчёта.
Реализация этой функциональности стала возможна благодаря подключению моего второго инструмента — CVE-PaaS [5] (CVE Prioritizer as a Service). Это отдельный микросервис, который можно использовать как вместе с dtrg, так и отдельно в своих проектах (можно подключить к другим системам управления уязвимостями, CI/CD пайплайнам или даже использовать в собственных скриптах для аналитики).
При генерации отчета dt-report-generator отправляет список уязвимостей в CVE-PaaS. Тот, в свою очередь, обогащает каждую из них дополнительной информацией:
EPSS [6]
Наличие Proof of concept (PoC) и Nuclei [7] Template
Наличие в Known Exploited Vulnerabilities Catalog (KEV [8])
На основе этих данных рассчитывается приоритет уязвимости (в итоговом отчёте уязвимые компоненты будут отсортированы именно по приоритету, а не критичности уязвимости). Подробности об инструменте и расчёте приоритета описаны в репозитории CVE-PaaS [5].
Подключение реализовано через переменную окружения, указывающую на инструмент приоритезации:
export CVEPAAS_URL="http://evil.com"
Сразу отмечу, что сейчас это работает не сильно шустро( Ждём новый релиз от разработчика CVE-PaaS (от меня))).
Инструкция для тех, кто хочет локально протестировать DT Report Generator в действии и посмотреть, как он работает в связке с Dependency Track.
1.Разворачиваем Dependency Track
Если у вас ещё не развернут DT — используйте официальный гайд (docker compose) [9]. Тут останавливаться подробно не будем — просто следуйте инструкции по ссылке, это займёт пару минут. Ваш DT скорее всего будет доступен по адресу http://localhost:8080 [10].
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 спецификацию, добавить разбор частных случаев и кастомных настроек.
Управление графом зависимостей. Граф уже даёт необходимое представление о проекте и позволяет определить очередность анализа зависимостей, но хочется сделать его более наглядным и читаемым, добавить возможность фильтровать, подсвечивать маршруты и т.д.
Сравнение версий проекта. Хочется добавить возможность сравнивать отчёты по разным версиям одного и того же проекта. На выходе: какие уязвимости ушли, какие появились, что изменилось в компонентах.
Как всегда открыт к вашим предложениям и замечаниям!
Автор: denimoll
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/dependency/416548
Ссылки в тексте:
[1] dt-report-generator: https://github.com/denimoll/dt-report-generator
[2] https://habr.com/ru/articles/860536/: https://habr.com/ru/articles/860536/
[3] OWASP Dependency Track: https://dependencytrack.org/
[4] https://github.com/appsecco/dvja: https://github.com/appsecco/dvja
[5] CVE-PaaS: https://github.com/denimoll/CVE-PaaS
[6] EPSS: https://www.first.org/epss/
[7] Nuclei: https://github.com/projectdiscovery/nuclei
[8] KEV: https://www.cisa.gov/known-exploited-vulnerabilities-catalog
[9] официальный гайд (docker compose): https://docs.dependencytrack.org/getting-started/deploy-docker/#deploy-using-docker-compose
[10] http://localhost:8080: http://localhost:8080
[11] Источник: https://habr.com/ru/articles/900276/?utm_campaign=900276&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.