Сценарий 20: Анализ зависимостей¶
Инженер по безопасности или DevOps-лидер, анализирующий зависимости проекта на уязвимости, устаревшие пакеты и соответствие лицензиям.
Содержание¶
- Быстрый старт
- Обзор
- Поддерживаемые менеджеры пакетов
- Функции анализа
- Команды CLI
- Команды TUI
- Примеры вопросов
- Связанные сценарии
Быстрый старт¶
/select 20
Обзор¶
Сценарий 20 предоставляет комплексный анализ зависимостей для нескольких языков программирования и менеджеров пакетов. Он сканирует проекты на файлы зависимостей, строит графы зависимостей, проверяет уязвимости и валидирует соответствие лицензиям.
Сканирование проекта → Граф зависимостей → Анализ → Отчёт
↓
┌──────────┬──────────┬──────────┬──────────┐
↓ ↓ ↓ ↓ ↓
Уязвимости Устаревшие Лицензии SBOM Граф
Поддерживаемые менеджеры пакетов¶
| Язык | Обнаруживаемые файлы | Менеджер пакетов |
|---|---|---|
| Python | requirements.txt, Pipfile, pyproject.toml, setup.py |
pip, pipenv, poetry |
| JavaScript | package.json, yarn.lock, pnpm-lock.yaml |
npm, yarn, pnpm |
| Go | go.mod, go.sum |
go modules |
| Ruby | Gemfile, Gemfile.lock |
bundler |
| Java | pom.xml, build.gradle |
maven, gradle |
| Rust | Cargo.toml, Cargo.lock |
cargo |
| PHP | composer.json, composer.lock |
composer |
Функции анализа¶
Построение графа зависимостей¶
Сканирование проекта и построение дерева зависимостей:
> Сканировать зависимости проекта в .
╭─────────────── Результаты анализа зависимостей ──────────╮
│ │
│ Обзор: │
│ - Всего зависимостей: 127 │
│ - Прямых зависимостей: 23 │
│ - Dev-зависимостей: 45 │
│ - Проанализировано файлов: 3 │
│ │
│ Зависимости: │
│ - `fastapi` @ 0.104.1 │
│ - `pydantic` @ 2.5.2 │
│ - `sqlalchemy` @ 2.0.23 │
│ - `uvicorn` @ 0.24.0 │
│ - `httpx` @ 0.25.2 │
│ - `pytest` @ 7.4.3 │
│ - `black` @ 23.11.0 │
│ - `ruff` @ 0.1.6 │
│ - `mypy` @ 1.7.1 │
│ - `rich` @ 13.7.0 │
│ │
│ ... и ещё 117 зависимостей │
│ │
╰────────────────────────────────────────────────────────────╯
Проверка уязвимостей¶
Проверка зависимостей по базам данных уязвимостей:
> Проверить зависимости на уязвимости
╭─────────────── Проверка уязвимостей ─────────────────────╮
│ │
│ Обзор: │
│ - Всего зависимостей: 127 │
│ - Прямых зависимостей: 23 │
│ - Dev-зависимостей: 45 │
│ - Проанализировано файлов: 3 │
│ │
│ Уязвимости: │
│ │
│ - 🔴 **CVE-2024-12345**: requests │
│ Удалённое выполнение кода при обработке редиректов │
│ *Исправлено в: 2.32.0* │
│ │
│ - 🟠 **CVE-2024-23456**: pillow │
│ Переполнение буфера при обработке изображений │
│ *Исправлено в: 10.2.0* │
│ │
│ - 🟡 **CVE-2024-34567**: cryptography │
│ Атака по времени при расшифровке RSA │
│ *Исправлено в: 41.0.7* │
│ │
╰────────────────────────────────────────────────────────────╯
Источники уязвимостей¶
| Источник | Описание |
|---|---|
| OSV | База данных уязвимостей Open Source |
| GitHub Advisory | GitHub Security Advisories |
| NVD | National Vulnerability Database |
| PyPI Advisory | Рекомендации по безопасности Python |
| npm Audit | Рекомендации по безопасности Node.js |
Уровни серьёзности¶
| Эмодзи | Серьёзность | CVSS Score |
|---|---|---|
| 🔴 | Критическая | 9.0-10.0 |
| 🟠 | Высокая | 7.0-8.9 |
| 🟡 | Средняя | 4.0-6.9 |
| 🟢 | Низкая | 0.1-3.9 |
Обнаружение устаревших пакетов¶
Поиск пакетов с доступными обновлениями:
> Проверить устаревшие зависимости
╭─────────────── Устаревшие пакеты ────────────────────────╮
│ │
│ Устаревшие пакеты: │
│ │
│ - `fastapi`: 0.104.1 → 0.109.0 │
│ - `pydantic`: 2.5.2 → 2.6.1 │
│ - `sqlalchemy`: 2.0.23 → 2.0.25 │
│ - `uvicorn`: 0.24.0 → 0.27.0 │
│ - `pytest`: 7.4.3 → 8.0.0 │
│ │
│ ... и ещё 12 устаревших пакетов │
│ │
╰────────────────────────────────────────────────────────────╯
Соответствие лицензиям¶
Проверка лицензий на проблемы совместимости:
> Проверить лицензии зависимостей
╭─────────────── Анализ лицензий ──────────────────────────╮
│ │
│ Сводка по лицензиям: │
│ - MIT: 78 пакетов │
│ - Apache-2.0: 32 пакета │
│ - BSD-3-Clause: 12 пакетов │
│ - GPL-3.0: 3 пакета │
│ - Неизвестно: 2 пакета │
│ │
│ Проблемы с лицензиями: │
│ │
│ - `some-gpl-lib`: GPL-3.0 может конфликтовать с MIT-проектом│
│ - `mystery-pkg`: Лицензия не указана │
│ - `old-lib`: Файл лицензии не найден │
│ │
╰────────────────────────────────────────────────────────────╯
Генерация SBOM¶
Генерация Software Bill of Materials (спецификации ПО):
> Сгенерировать SBOM для проекта
╭─────────────── SBOM сгенерирован ────────────────────────╮
│ │
│ Формат: CycloneDX 1.4 │
│ Файл: sbom.json │
│ │
│ Компонентов: 127 │
│ - Библиотек: 125 │
│ - Фреймворков: 2 │
│ │
│ Метаданные: │
│ - Сгенерировано: 2024-12-09T14:35:21Z │
│ - Инструмент: CodeGraph v1.0 │
│ - Проект: codegraph │
│ │
╰────────────────────────────────────────────────────────────╯
Команды CLI¶
Сканирование зависимостей¶
# Сканировать текущий проект
codegraph deps scan
# Сканировать указанный путь
codegraph deps scan --project /path/to/project
# Включить dev-зависимости
codegraph deps scan --include-dev
# Вывод в JSON
codegraph deps scan --output deps.json
Аудит уязвимостей¶
# Проверить на уязвимости
codegraph deps audit
# Проверить конкретную серьёзность
codegraph deps audit --severity critical,high
# Выход с ошибкой при уязвимостях (для CI)
codegraph deps audit --fail-on high
# Вывести детальный отчёт
codegraph deps audit --report vuln-report.json
Устаревшие пакеты¶
# Проверить устаревшие пакеты
codegraph deps outdated
# Показать только прямые зависимости
codegraph deps outdated --direct-only
# Показать доступные обновления
codegraph deps outdated --show-updates
Проверка лицензий¶
# Проверить лицензии
codegraph deps licenses
# Проверить по списку разрешённых
codegraph deps licenses --allowed MIT,Apache-2.0,BSD-3-Clause
# Завершить с ошибкой при запрещённых лицензиях
codegraph deps licenses --fail-on GPL-3.0
Генерация SBOM¶
# Сгенерировать CycloneDX SBOM
codegraph deps sbom --format cyclonedx --output sbom.json
# Сгенерировать SPDX SBOM
codegraph deps sbom --format spdx --output sbom.spdx
# Включить уязвимости в SBOM
codegraph deps sbom --include-vulnerabilities
Граф зависимостей¶
# Показать дерево зависимостей
codegraph deps tree
# Показать почему пакет установлен
codegraph deps why requests
# Экспортировать граф в формате DOT
codegraph deps graph --format dot --output deps.dot
Команды TUI¶
| Команда | Описание |
|---|---|
/dependencies scan |
Сканировать зависимости |
/dependencies audit |
Проверить уязвимости |
/dependencies outdated |
Найти устаревшие пакеты |
/dependencies licenses |
Проверить соответствие лицензий |
/dependencies sbom |
Сгенерировать SBOM |
/dependencies tree |
Показать дерево зависимостей |
/dependencies why <pkg> |
Показать почему пакет установлен |
Примеры вопросов¶
- “Сканировать проект на зависимости”
- “Проверить на уязвимые пакеты”
- “Есть ли устаревшие зависимости?”
- “Показать дерево зависимостей”
- “Почему установлен requests?”
- “Сгенерировать SBOM для проекта”
- “Проверить совместимость всех лицензий с MIT”
- “Найти пакеты с критическими уязвимостями”
Конфигурация¶
Настройка анализа зависимостей в config.yaml:
scenarios:
dependencies:
# Проверка уязвимостей
vulnerability_sources:
- osv
- github_advisory
- nvd
severity_threshold: medium # low, medium, high, critical
# Соответствие лицензиям
allowed_licenses:
- MIT
- Apache-2.0
- BSD-3-Clause
- ISC
disallowed_licenses:
- GPL-3.0
- AGPL-3.0
# Настройки SBOM
sbom_format: cyclonedx # cyclonedx, spdx
# Параметры сканирования
include_dev: true
max_depth: 10
cache_ttl: 3600 # секунды
Интеграция с CI/CD¶
GitHub Actions¶
# .github/workflows/security.yml
name: Безопасность зависимостей
on:
push:
branches: [main]
pull_request:
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Установить CodeGraph
run: pip install codegraph
- name: Проверить уязвимости
run: codegraph deps audit --fail-on high
- name: Проверить лицензии
run: codegraph deps licenses --allowed MIT,Apache-2.0
- name: Сгенерировать SBOM
run: codegraph deps sbom --output sbom.json
- name: Загрузить SBOM
uses: actions/upload-artifact@v3
with:
name: sbom
path: sbom.json
GitLab CI¶
# .gitlab-ci.yml
security:audit:
stage: test
script:
- pip install codegraph
- codegraph deps audit --fail-on high
- codegraph deps sbom --output sbom.json
artifacts:
paths:
- sbom.json
Связанные сценарии¶
- Аудит безопасности - Сканирование уязвимостей
- Соответствие - Проверка соответствия
- Оптимизация кода - Предложения по оптимизации