Безопасность цепочки поставок

CodeGraph обеспечивает анализ безопасности цепочки поставок в рамках процесса 5.17 ГОСТ Р 56939-2024. Модуль оценивает доверие к сторонним компонентам, обнаруживает тайпосквоттинг, проверяет целостность зависимостей и генерирует отчёты для аудита по ГОСТ.

Обзор

Безопасность цепочки поставок отличается от композиционного анализа (SCA). SCA отвечает на вопрос «есть ли известные уязвимости в зависимостях?», а анализ цепочки поставок — «можно ли доверять самим поставщикам и их каналам поставки?»

Модуль цепочки поставок CodeGraph предоставляет:

  • Реестр компонентов — каталог всех прямых, транзитивных и dev-зависимостей с метаданными экосистемы
  • Оценка доверия — композитная оценка (0–10) на основе OpenSSF Scorecard, количества мейнтейнеров, активности, политики безопасности и популярности
  • Обнаружение тайпосквоттинга — анализ расстояния Левенштейна относительно базы популярных пакетов
  • Проверка целостности — верификация контрольных сумм и консистентности файлов блокировки
  • Обнаружение вредоносного кода — сканирование скриптов пост-установки на подозрительные паттерны
  • Отчёты ГОСТ 5.17.3 — артефакты для регуляторного аудита

Архитектура

Зависимости (SCA)  ──►  Реестр компонентов
                              │
              ┌───────────────┼───────────────┐
              ▼               ▼               ▼
        Оценка доверия   Проверка        Детектор
        (OpenSSF +       целостности     вредоносного
         метаданные)     (контрольные    кода
                          суммы,         (тайпосквоттинг,
                          lockfile)       паттерны)
              │               │               │
              └───────────────┼───────────────┘
                              ▼
                     SupplyChainReport
                     (JSON / Markdown / SARIF / ГОСТ)

Команды CLI

Полное сканирование

python -m src.cli supply-chain scan \
    [--project ИМЯ] \
    [--path /путь/к/исходникам] \
    [--format json|markdown|sarif|gost] \
    [--language en|ru] \
    [--output отчёт.md] \
    [--fail-on critical|high|medium]

Коды завершения: - 0 — нет проблем выше порога --fail-on - 1 — обнаружены проблемы выше порога - 2 — ошибка выполнения

Реестр компонентов

python -m src.cli supply-chain registry \
    [--project ИМЯ] \
    [--format json|markdown]

Выводит все компоненты с типом (прямой/транзитивный/dev), экосистемой, URL реестра и лицензией.

Оценка доверия

python -m src.cli supply-chain trust \
    [--project ИМЯ] \
    [--min-score 5.0] \
    [--format json|markdown]

При указании --min-score отображаются только компоненты ниже заданного порога.

Обнаружение тайпосквоттинга

python -m src.cli supply-chain typosquatting [--project ИМЯ]

Проверяет имена пакетов по базе популярных пакетов с использованием расстояния Левенштейна.

Отчёт ГОСТ 5.17.3

python -m src.cli supply-chain gost-report \
    [--project ИМЯ] \
    [--language ru|en] \
    [--output отчёт_гост.md]

Генерирует отчёт с разделами 5.17.3.1 (компоненты от поставщиков), 5.17.3.3 (критичные элементы), 5.17.3.4 (результаты контроля целостности), 5.17.3.5 (результаты сканирования).

REST API

Метод Адрес Описание
POST /api/v1/supply-chain/scan Полное сканирование
GET /api/v1/supply-chain/registry Реестр компонентов
GET /api/v1/supply-chain/trust Оценки доверия
GET /api/v1/supply-chain/findings Обнаруженные проблемы
GET /api/v1/supply-chain/gost-report Отчёт ГОСТ 5.17.3

POST /scan

Запрос:

{
  "fail_on": "critical",
  "include_trust": true
}

Ответ:

{
  "project": "myapp",
  "timestamp": "2026-03-10T12:00:00",
  "risk_level": "low",
  "total_components": 45,
  "direct_components": 12,
  "transitive_components": 33,
  "avg_trust_score": 7.2,
  "findings_count": 2,
  "findings": [...],
  "components": [...]
}

GET /trust

Параметры запроса: - min_score (float) — показать только компоненты ниже порога

GET /gost-report

Параметры запроса: - languageru (по умолчанию) или en

Инструменты MCP

Инструмент Описание
codegraph_supply_chain_scan Полное сканирование безопасности цепочки поставок
codegraph_supply_chain_trust Оценка уровня доверия к зависимостям

codegraph_supply_chain_scan

Параметры: - format — json, markdown, sarif, gost (по умолчанию: json) - fail_on — порог критичности (пустой = без порога) - language — ru или en - project — имя проекта (необязательно)

codegraph_supply_chain_trust

Параметры: - min_score — показать только компоненты ниже порога (0 = все) - project — имя проекта (необязательно)

Оценка доверия

Оценка доверия — взвешенная композиция 6 факторов:

Фактор Вес Шкала Описание
OpenSSF Scorecard 0,40 0–10 Автоматическая оценка безопасности
Количество мейнтейнеров 0,15 0–10 3+ мейнтейнеров = максимум
Свежесть 0,15 0–10 Дней с последнего релиза (180+ = 0)
Политика безопасности 0,10 0/10 Наличие SECURITY.md
Популярность 0,10 0–10 Логарифмическая шкала по количеству звёзд
Подписанные релизы 0,10 3/10 Наличие GPG/Sigstore подписи

Уровни риска по шкале оценки:

Оценка Уровень риска
0–2,0 CRITICAL
2,1–4,0 HIGH
4,1–6,0 MEDIUM
6,1–8,0 LOW
8,1–10,0 MINIMAL

Типы проблем

Тип Критичность Описание
typosquatting high Имя пакета похоже на популярный пакет
suspicious_script critical Подозрительный скрипт жизненного цикла npm
suspicious_pattern high Подозрительный паттерн в скриптах сборки
no_lockfile medium Отсутствует файл блокировки для манифеста
lockfile_mismatch high Несовпадение версии в файле блокировки
checksum_mismatch critical Ошибка верификации контрольной суммы
low_trust medium/low Оценка доверия ниже порога
abandoned_package medium Нет релиза 730+ дней
single_maintainer low Фактор автобуса = 1
no_security_policy low Отсутствует SECURITY.md

Верификация подписей

IntegrityChecker выполняет верификацию подписей и хэшей для каждого компонента в процессе сканирования:

Экосистема Метод Источник
pypi pip-hash --hash=sha256:... в requirements.txt
npm npm-integrity Поле integrity в package-lock.json
go go-sum Хэш-записи в go.sum
crates.io cargo-checksum Поле checksum в Cargo.lock
sigstore cosign verify-blob Sigstore/cosign (при наличии)

Определение установленного хэша:

Экосистема Метод
pypi Файл RECORD из importlib.metadata (SHA256)
npm integrity из package-lock.json
go Хэш из go.sum

Поле IntegrityResult.signature_valid заполняется для каждого компонента: - True — хэш или подпись найдены и валидны - False — верификация подписи не пройдена - None — данные подписи для этой экосистемы недоступны

Поддержка Sigstore/cosign доступна для верификации артефактов. Требуется cosign в PATH; доступность кэшируется на сессию.

Конфигурация

# config.yaml
supply_chain:
  enabled: true
  trust:
    scorecard:
      enabled: true
      timeout: 30
    thresholds:
      low_trust: 3.0
      abandoned_days: 730
  typosquatting:
    enabled: true
    max_distance: 2
    popular_packages_path: null
  integrity:
    check_checksums: true
    check_lockfiles: true
  signatures:
    verify_pip: true
    verify_npm: true
    verify_go: true
    verify_cargo: true
    cosign_enabled: false
  detector:
    scan_post_install: true
  ci:
    fail_on: "high"

Интеграция с CI

GitHub Actions

- name: Проверка цепочки поставок
  run: |
    python -m src.cli supply-chain scan \
      --format sarif \
      --fail-on high \
      --output supply-chain.sarif

GitLab CI

supply-chain:
  script:
    - python -m src.cli supply-chain scan --fail-on high --format json
  allow_failure: false

Структура модуля

src/supply_chain/
    __init__.py           экспорты
    models.py             ComponentType, RiskLevel, FindingType, TrustScore,
                           SupplyChainComponent, IntegrityResult, SCFinding,
                           SupplyChainReport
    registry.py           ComponentRegistry (DependencyGraph  компоненты)
    scorecard.py          ScorecardClient (OpenSSF Scorecard API)
    trust_scorer.py       TrustScorer (6 факторов, взвешенное среднее)
    typosquatting.py      TyposquattingDetector (Левенштейн + база популярных)
    integrity.py          IntegrityChecker (8 парсеров lockfile, контрольные суммы, интеграция подписей)
    signature.py          SignatureVerifier (pip-hash, npm-integrity, go-sum, cargo, cosign)
    detector.py           MaliciousCodeDetector (10+ паттернов, npm-хуки)
    report.py             SupplyChainReportRenderer (JSON, Markdown, SARIF)
    gost_report.py        SupplyChainGostReport (разделы ГОСТ 5.17.3)
    scanner.py            SupplyChainScanner (оркестратор)