Сценарий 20: Анализ зависимостей

Сценарий 20: Анализ зависимостей

Инженер по безопасности или DevOps-лидер, анализирующий зависимости проекта на уязвимости, устаревшие пакеты и соответствие лицензиям.

Содержание

Быстрый старт

/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

Связанные сценарии