Анализ достижимости уязвимостей¶
Что такое достижимость
Достижимость уязвимости — это проверка того, действительно ли потенциально уязвимый участок кода может быть выполнен при использовании приложения. Такой анализ позволяет отфильтровать «шум» и сосредоточиться на реально эксплуатируемых проблемах.
Консольный агент 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.
Пример запуска сканирования:
johnny-linux-amd64 scan dir . --api_url "http(s)://<codescoring_host>" --api_token "<токен из личного кабинета>" --cg-path <путь_к_json_joern> --cg-lang javascript
Удаленный анализ¶
В версии Svace 5.0.260311 появилась возможность использования сервера удалённого анализа. Это позволяет вынести построение графа вызовов за пределы CI/CD пайплайна, снизить нагрузку на сборочные серверы и оптимизировать процесс непрерывной интеграции.
Этапы настройки сервера¶
- Указать переменные окружения
- Инициализация
- Запустить сервер
-
Отправить проект на анализ. После настройки сервера не нужно указывать параметры лицензии
--license-server-urlи--license-server-token.При необходимости можно добавить параметры
--port,--login,--passи т.д.
Подробнее с настройками сервера удалённого анализа можно ознакомиться в документации Svace.
Получение результатов¶
В таблице уязвимостей с найденными достижимыми вызовами будет проставлена отметка в соответствующем столбце:

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

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

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