Поддерживаемые экосистемы и способы анализа

Манифесты

Для поиска зависимостей CodeScoring в первую очередь опирается на разбор файлов манифестов пакетных менеджеров. Платформа поддерживает разбор следующих технологий:

Экосистема
Пакетный менеджер или инструмент сборки
Формат файла
Java и KotlinGradle*.gradle
*.gradle.kts
gradle-dependency-tree.txt
gradle.lockfile
Mavenpom.xml
maven-dependency-tree.txt
Apache Ivyivy.xml
JavaScript и TypeScriptnpmpackage.json
package-lock.json
npm-shrinkwrap.json
yarnyarn.lock
package.json
package-lock.json
pnpmpnpm-lock.yaml
bunbun.lock
Pythonpiprequirements.txt
requirements.pip
requires.txt
pip-resolved-dependencies.txt
pipdeptree.txt
Poetrypyproject.toml
poetry.lock
PipenvPipfile
Pipfile.lock
Condaenvironment.yml
meta.yml
conda-lock.yml
uvpyproject.toml
uv.lock
C и C++Conanconanfile.txt
conan.lock
conanfile.py
GCC, Clang, CMake, Make и др.Сканирование сборки
GoGo Modulesgo.mod
go.sum
PHPComposercomposer.json
composer.lock
RubyRubyGemsGemfile
Gemfile.lock
*.gemspec
gems.locked
gems.rb
.NETNuget*.nuspec
packages.lock.json
Project.json
Project.lock.json
packages.config
*.csproj
project.assets.json
dependencyReport.json
deps.json
*.sln
Paketpaket.dependencies
paket.lock
Objective-CCocoaPodsPodfile
Podfile.lock
*.podspec
SwiftSwift Package ManagerPackage.swift
Package.resolved
RustCargoCargo.toml
Cargo.lock
Scalasbtscala-dependency-tree.txt
sbt-dependency-tree.txt

Лучший результат будет при наличии основного файла манифеста и соответствующего lock-файла, если он предусмотрен механизмом пакетного менеджера.

Типы PURL и компонентов

Для унифицированного описания зависимостей CodeScoring использует стандарт Package URL (PURL).

Пример PURL
pkg:maven/org.apache.logging.log4j/log4j-core@2.17.2

При анализе SBOM через команду агента или импорте в платформу CodeScoring распознаёт и поддерживает следующие типы PURL в соответствии со спецификацией:

Тип PURLОписаниеСпецификация
cocoapodsБиблиотеки для Objective-C / Swift через CocoaPodsCocoaPods Definition
conanПакеты экосистемы C / C++ (Conan)Conan Definition
condaПакеты экосистемы Python / CondaConda Definition
nugetКомпоненты .NET / NuGetNuGet Definition
golangПакеты Go ModulesGo Definition
mavenАртефакты Java / Kotlin (Maven / Gradle)Maven Definition
npmПакеты JavaScript / TypeScriptNPM Definition
composerПакеты PHP (Composer)Composer Definition
pypiПакеты Python (PyPI)PyPI Definition
gemПакеты Ruby (RubyGems)RubyGems Definition
cargoПакеты Rust (Cargo)Cargo Definition
genericОбщий тип для произвольных бинарных или кастомных артефактовGeneric Definition
apkСистемные пакеты Alpine LinuxAPK Definition
debСистемные пакеты Debian / UbuntuDEB Definition
rpmСистемные пакеты RHEL / CentOS / FedoraRPM Definition
swiftПакеты Swift Package ManagerSwift Definition
ociКонтейнерные образы OCI / DockerOCI Definition
dockerОбразы Docker Hub / DockerDocker Definition
githubРепозитории GitHubGitHub Definition
huggingfaceМодели Hugging Face HubHuggingFace Definition
mlflowМодели MLflow Model RegistryMLflow Definition
pubПакеты Dart / Flutter (pub.dev)Pub Definition
swidSWID-теги (Software Identification Tags)SWID Definition

Каждый компонент с PURL классифицируется по типу, который CodeScoring распознаёт при импорте SBOM-файлов. Тип указывается в поле type внутри описания компонента.

Различие типов PURL и компонентов

Тип компонента описывает его функциональную роль внутри продукта — например, библиотека, фреймворк или встроенное ПО. Тип PURL, в свою очередь, определяет экосистему и источник, из которого этот компонент был получен.

Пример компонента в SBOM
{
  "components": [
    {
      "name": "log4j-core",
      "version": "2.17.2",
      "purl": "pkg:maven/org.apache.logging.log4j/log4j-core@2.17.2",
      "type": "library"
    }
  ]
}

Поддерживаются следующие типы компонентов:

Тип компонентаОписание
libraryБиблиотека, пакет или модуль стороннего кода, используемый в проекте.
frameworkИнфраструктурный или прикладной фреймворк, включающий набор библиотек.
firmwareИсполняемый бинарный образ или встроенное ПО, анализируемое на наличие сторонних компонентов.

Системные пакеты

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

Сканирование архивов

Плагины CodeScoring.OSA поддерживают сканирование архивов в следующих форматах:

ЭкосистемаФормат архива
Maven.jar, .war, .ear
NPM.tgz
PyPI.zip, .tar, .tgz, .tar.gz, .tar.bz2, .egg, .whl
Nuget.nupkg
Cocoapods.tar.gz, .zip
Go.mod, .zip
Gems.rz, .gz, .gem
Debian.deb, .xz, .gz
Yum.rpm
Alpine.apk
Docker.json
Сканирование архивов через Johnny

Консольный агент 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 анализирует процесс сборки, используя флаги компилятора и выявляя использованные библиотеки. Далее с помощью системного кэша определяется местоположение библиотек и их источник.

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