Перейти к содержанию

Анализ достижимости уязвимостей

Что такое достижимость

Достижимость уязвимости — это проверка того, действительно ли потенциально уязвимый участок кода может быть выполнен при использовании приложения. Такой анализ позволяет отфильтровать «шум» и сосредоточиться на реально эксплуатируемых проблемах.

Консольный агент Johnny умеет анализировать уязвимости на достижимость из исходного кода. Для использования данной функции необходимо задать два параметра:

  • cg-path — путь к графу вызовов формата Svace;
  • cg-lang — язык программирования, для которого был построен граф вызовов. На данный момент поддерживаются значения java, python, go, kotlin и csharp (C#).

Построение графа вызовов

С использованием инструмента Svace

  1. Скачать модуль Svace https://REGISTRY_USERNAME:REGISTRY_PASSWORD@REGISTRY_URL/#browse/browse:files:codescoring%2Fsvace-callgraph
  2. Получить токен пользователя в CodeScoring (по ссылке{platform-url}/cabinet/profile)
  3. Запустить Svace на исходном коде проекта. Этот этап лучше делать в рамках или после шага сборки в конвейере.
  4. Инициализация
    svace init
    
  5. Контролируемая сборка
    svace build <build command>
    
    Пример для проектов на языке Java:
    svace build mvn clean package
    
    Пример на языке Go:
    svace build go build -a main.go
    
    Пример на языке Python:
    svace build --python .
    
    Пример на языке Kotlin:
    svace build ./gradlew clean build
    
    Пример на языке C#:
    svace build dotnet build
    
  6. Анализ результатов и построение графа вызовов
    svace analyze --build-call-graph-only --license-server-url "http(s)://<codescoring_host>" --license-server-token "<токен из п.1>"
    
  7. В случае успешного выполнения всех шагов в директории проекта появится файл .svace-dir/analyze-res/call-graph-results/<project_name>-graph-order.json, содержащий граф вызовов.

    Сохранение файла

    До версии Svace 5.0.260311 файл с графом вызовов сохранялся в папку .svace-dir/analyze-res/call-graph

  8. Запустить сканирования с помощью Johnny, например:

    johnny-linux-amd64 scan dir . --api_url "http(s)://<codescoring_host>" --api_token "<токен из п.1>"  --cg-path .svace-dir/analyze-res/call-graph-results/<project_name>-graph-order.json  --cg-lang java
    

Удаленный анализ

В версии Svace 5.0.260311 появилась возможность использования сервера удалённого анализа. Это позволяет вынести построение графа вызовов за пределы CI/CD пайплайна, снизить нагрузку на сборочные серверы и оптимизировать процесс непрерывной интеграции.

Этапы настройки сервера

  1. Указать переменные окружения
    SVACE_LIC_SERVER_URL=http(s)://<codescoring_host>
    SVACE_LIC_SERVER_TOKEN=<токен CodeScoring>
    
  2. Инициализация
    sace server init
    
  3. Запустить сервер
    svace server start
    
  4. Отправить проект на анализ. После настройки сервера не нужно указывать параметры лицензии --license-server-url и --license-server-token.

    svace remote --host <адрес сервера> analyze --build-call-graph-only
    

    При необходимости можно добавить параметры --port, --login, --pass и т.д.

Подробнее с настройками сервера удалённого анализа можно ознакомиться в документации Svace.

Получение результатов

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

Таблица уязвимостей с колонкой Reachable

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

Таблица путей достижимости уязвимостей json-bug

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

Таблица путей достижимости уязвимостей dep-track

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

Таблица уязвимостей json-bug

Страница была полезна?