Анализ достижимости уязвимостей
Достижимость уязвимости — это проверка того, действительно ли потенциально уязвимый участок кода может быть выполнен при использовании приложения. Такой анализ позволяет отфильтровать «шум» и сосредоточиться на реально эксплуатируемых проблемах.
Консольный агент Johnny умеет анализировать уязвимости на достижимость из исходного кода. Для использования данной функции необходимо задать два параметра:
cg-path— путь к файлу графа вызовов: дляjava,python,go,kotlinиcsharp(C#) — формат Svace; дляjavascript— JSON, сформированный Joern (см. раздел ниже);cg-lang— язык программирования, для которого был построен граф вызовов. Поддерживаются значенияjava,python,go,kotlin,csharp(C#) иjavascript.
Построение графа вызовов
С использованием инструмента Svace
-
Скачать модуль Svace
https://REGISTRY_USERNAME:REGISTRY_PASSWORD@REGISTRY_URL/#browse/browse:files:codescoring%2Fsvace-callgraph -
Получить токен пользователя в CodeScoring (по ссылке
{platform-url}/cabinet/profile) -
Запустить Svace на исходном коде проекта. Этот этап лучше делать в рамках или после шага сборки в конвейере.
- Инициализация
- Контролируемая сборка
Пример для проектов на языке Java:Пример на языке Go:Пример на языке Python:Пример на языке Kotlin:Пример на языке C#:
- Анализ результатов и построение графа вызовов
- Инициализация
-
В случае успешного выполнения всех шагов в директории проекта появится файл
.svace-dir/analyze-res/call-graph-results/<project_name>-graph-order.json, содержащий граф вызовов.Сохранение файлаДо версии Svace 5.0.260311 файл с графом вызовов сохранялся в папку
.svace-dir/analyze-res/call-graph -
Запустить сканирования с помощью Johnny, например:
С использованием Joern (JavaScript)
Для языка JavaScript граф вызовов для анализа достижимости строится с помощью Joern. В каталоге с исходным кодом проекта выполните:
Команда joern-parse создаёт CPG в файле cpg.bin. Команда joern-slice usages записывает результат в JSON. По умолчанию файл сохраняется как slices.json в текущей папке. Путь к этому файлу передайте в параметре --cg-path при запуске Johnny. Имя выходного файла можно задать опцией -o у joern-slice; см. документацию Joern по CPG slicing.
Пример запуска сканирования:
Удаленный анализ
В версии Svace 5.0.260311 появилась возможность использования сервера удалённого анализа. Это позволяет вынести построение графа вызовов за пределы CI/CD пайплайна, снизить нагрузку на сборочные серверы и оптимизировать процесс непрерывной интеграции.
Этапы настройки сервера
- Указать переменные окружения
- Инициализация
- Запустить сервер
-
Отправить проект на анализ. После настройки сервера не нужно указывать параметры лицензии
--license-server-urlи--license-server-token.При необходимости можно добавить параметры
--port,--login,--passи т.д.
Подробнее с настройками сервера удалённого анализа можно ознакомиться в документации Svace.
Получение результатов
В таблице уязвимостей с найденными достижимыми вызовами будет проставлена отметка в соответствующем столбце:

В конце будет доступна ещё одна таблица с перечислением деревьев вызовов для уязвимостей:

Пример для более крупного проекта:

Если был указан флаг --save-results, то результаты достижимости будут в колонке "Достижимо" таблицы уязвимостей:

