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¶
Параметры запроса:
- language — ru (по умолчанию) или 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 (оркестратор)
Связанные документы¶
- Композиционный анализ (SCA) — анализ зависимостей (обязательная зависимость)
- Контроль релизов — использует результаты сканирования цепочки поставок
- Соответствие ГОСТ — общий маппинг соответствия