Поддерживаемые экосистемы и способы анализа
Манифесты
Для поиска зависимостей CodeScoring в первую очередь опирается на разбор файлов манифестов пакетных менеджеров. Платформа поддерживает разбор следующих технологий:
Лучший результат будет при наличии основного файла манифеста и соответствующего lock-файла, если он предусмотрен механизмом пакетного менеджера.
Типы PURL и компонентов
Для унифицированного описания зависимостей CodeScoring использует стандарт Package URL (PURL).
При анализе SBOM через команду агента или импорте в платформу CodeScoring распознаёт и поддерживает следующие типы PURL в соответствии со спецификацией:
Каждый компонент с PURL классифицируется по типу, который CodeScoring распознаёт при импорте SBOM-файлов. Тип указывается в поле type внутри описания компонента.
Тип компонента описывает его функциональную роль внутри продукта — например, библиотека, фреймворк или встроенное ПО. Тип PURL, в свою очередь, определяет экосистему и источник, из которого этот компонент был получен.
Поддерживаются следующие типы компонентов:
Системные пакеты
В рамках работы модуля OSA платформа поддерживает разбор системных пакетов следующих форматов:
Сканирование архивов
Плагины CodeScoring.OSA поддерживают сканирование архивов в следующих форматах:
Консольный агент Johnny также поддерживает сканирование архивов. Поддерживаемые форматы приведены на странице Сканирование архивов.
Механизм резолва при отсутствии lock-файла
При отсутствии lock-файла для некоторых пакетных индексов система выполняет разрешение транзитивных OSS зависимостей следующим образом:
- Maven
- для формата pom.xml и build.gradle генерация maven-dependency-tree через соответствующий плагин maven
- используются Maven версии 3.8.8 и OpenJDK версии 11
- PyPi
- генерация poetry.lock с помощью пакетного менеджера Poetry
- используется Python версии 3.11.7
- NPM
- генерация yarn.lock с помощью пакетного менеджера Yarn
- используется Node.js версии 20.9.0
- Nuget
- для формата csproj и sln генерация project.assets.json с помощью встроенных инструментов nuget
- используется .NET SDK версии 8.0.404
- Packagist
- генерация composer.lock с помощью пакетного менеджера Composer
- используется PHP версии 8.2.26
- Rubygems
- генерация Gemfile.lock с помощью пакетного менеджера Bundler
- используется Ruby версии 3.1.2p20
Самостоятельная генерация lock-файлов системой не может давать результат в 100% случаев, так как результат часто зависит от окружения.
Разрешение зависимостей в окружении
Пакетные менеджеры некоторых экосистем по умолчанию не включают транзитивные зависимости в манифесты. Для качественного проведения композиционного анализа при работе с ними рекомендуется применять механизм разрешения зависимостей в окружении сборки.
При разрешении зависимостей в окружении система проверяет отсутствие lock-файла, самостоятельно запускает пакетный менеджер или инструмент сборки и формирует полный список компонентов с учетом корректной версии сборки. На данный момент функциональность доступна для следующих экосистем:
- .NET
- Go
- Gradle
- Maven
- npm
- Poetry
- sbt
- yarn
- Conda
Механизм поиска зависимостей по хэшам
Поиск по хэшам подразумевает определение непосредственного включения библиотек в код проектов путём копирования. В рамках этого механизма происходит хэширование всех файлов проекта и сверка этих сигнатур с известными нам open source библиотеками.
В данный момент поиск по хэшам происходит для следующих индексов пакетных менеджеров по следующим типам файлов:
- Maven
.jar.war.ear
- npm
.min.js
- PyPI
.whl.egg
- Nuget
.nupkg
От платформы в облако не уходят хэши файлов, размер которых не превышает 512 байт.
Сканирование сборки для языков C и C++
В случае, если для сборки C/С++ проекта не используется пакетный менеджер Conan и соответствующие манифесты, для получения списка используемых библиотек можно использовать специальный режим для анализа вывода процесса сборки.
В данном режиме консольный агент Johnny анализирует процесс сборки, используя флаги компилятора и выявляя использованные библиотеки. Далее с помощью системного кэша определяется местоположение библиотек и их источник.
