README.md

SBOM Checker Go

Утилита для валидации и обновления CycloneDX SBOM

Оригинальная утилита sbom-checker реализована на языке Python разработчиками ИСП РАН.

Go Reference Go Report

История

В 2024 году вышел документ ФСТЭК “Порядок взаимодействия участников сертификации с центром исследований безопасности системного программного обеспечения при проведении сертификации средств защиты информации, включающих в свой состав заимствованные программные компоненты с открытым исходным кодом”:

Изготовители, осуществляющие сертифицированное производство средств защиты информации (при наличии сертификата соответствия с действующим сроком) или сертификацию серийного производства средств защиты информации, должны до 1 января 2025 г. представить в ФСТЭК России и центр в электронном виде перечни заимствованных программных компонентов с открытым исходным кодом по каждому сертифицированному средству защиты информации, оформленные в соответствии с приложениями к порядку, прилагаемому к настоящему письму, для получения плана поддержки безопасности заимствованных компонентов сертифицированного средства защиты.

В сообществе Telegram “Доверенная разработка” тогда же появился анонс утилиты sbom-checker, позволяющей автоматически доработать SBOM и проверить на соответствие требованиям ФСТЭК.

sbom-checker-go помогает оперативно и надёжно формировать перечни заимствованных компонентов на основе SBOM. Ключевые возможности:

  • Валидация и нормализация SBOM (обязательные поля, корректные PURL).
  • Разрешение источников компонентов, включая корпоративные/vanity-домены Go (например, go.uber.org, go.mongodb.org).
  • Учёт переездов и переименований репозиториев и пакетов (NPM/GitHub) для актуальных ссылок.
  • Конкурентная обработка и кэширование запросов к внешним источникам для сокращения времени выполнения.
  • Устойчивые сетевые политики (таймауты, ретраи, rate limiting) для предсказуемой работы.
  • Детерминированный вывод и подготовка отчётных материалов под внутренние шаблоны.

Далее см. разделы «Возможности» и «Использование» для примеров и конфигурации, а также «Архитектурная документация» для деталей реализации.

Архитектурная документация

Возможности

Основная функциональность

  • Валидация SBOM: Проверка CycloneDX SBOM файлов по официальным схемам
  • Расчет тройного хэша: Обязательные SHA-256, Стрибог-256 и Стрибог-512 для source-distribution
  • Умное разрешение источников: Проверяет все доступные источники перед выбором лучшего.
  • Категоризация безопасности: Применение свойств поверхности атаки и функций безопасности по ГОСТ
  • Поддержка списка игнорирования: Фильтрация компонентов с использованием шаблонов .sbomignore
  • Ограничение скорости: Настраиваемая параллельная обработка с ограничениями по хостам
  • Конвертация форматов: Экспорт в форматы CSV и ODT
  • Слияние SBOM: Объединение нескольких SBOM с дедупликацией

Ключевые возможности

  • Параллельная обработка: Более быстрая валидация и расчет хэшей
  • Умное разрешение источников: Не останавливается на первом недоступном источнике
  • Принудительный тройной хэш: Все три хэша обязательны при наличии любого хэша
  • Настраиваемое ограничение скорости: Предотвращение троттлинга API с умными ограничениями
  • Эффективное использование памяти: Улучшенная обработка больших SBOM файлов

Установка

Из исходного кода

git clone <репозиторий>
cd sbom-checker-go
make build

Установка в систему

make install

Использование

Основные команды

Проверка/Валидация SBOM

# Валидация SBOM по схеме
# Проверяет соответствие файла спецификации CycloneDX
sbom-checker check input.json

# Валидация с проверкой хэшей
# Убеждается, что если есть хоть один хэш, то присутствуют все три
sbom-checker check --validate-hashes input.json

# Проверка VCS URL
# Проверяет доступность репозиториев Git, SVN, Mercurial
sbom-checker check --check-vcs input.json

# Проверка URL дистрибутивов исходного кода
# Проверяет доступность tar.gz, zip и других архивов
sbom-checker check --check-source-distribution input.json

# Пример комплексной проверки
# Выполняет все виды валидации одновременно
sbom-checker check \
  --validate-hashes \
  --check-vcs \
  --check-source-distribution \
  production-sbom.json

Подробное логирование

Используйте флаг -v или --verbose для включения детального логирования, которое показывает обычно игнорируемые ошибки и пустые результаты:

# Включить подробное логирование для любой команды
sbom-checker -v check input.json
sbom-checker --verbose update input.json output.json

# Пример отладки проблемы с недоступным источником
# Показывает все попытки загрузки и причины неудач
sbom-checker -v update \
  --calculate-hashes \
  --app-name "MyApp" \
  --app-version "1.0.0" \
  --manufacturer "MyCompany" \
  problematic-sbom.json fixed-sbom.json

# Подробное логирование покажет:
# - Ошибки, которые обычно игнорируются (логируются как WARN)
# - Пустые результаты от функций, которые не объясняют причину
# - Детальную информацию о HTTP запросах, операциях кэша
# - Проверки VCS репозиториев и детали разрешения источников
# - Информацию о производительности и отладке

Что фиксирует подробное логирование:

  • Игнорируемые ошибки: Таймауты сети, ошибки парсинга, ошибки кэша
  • Пустые результаты: API вызовы без данных, отсутствующие конфигурационные файлы
  • HTTP операции: Неудачные запросы, редиректы, коды состояния
  • Проверки репозиториев: Доступность VCS, проблемы аутентификации
  • Разрешение источников: Какие источники проверяются, почему они не работают/работают
  • Операции кэша: Попадания/промахи кэша, ошибки файлового ввода-вывода
  • Внешние API вызовы: Ответы API ecosyste.ms, NuGet, RubyGems

Обновление SBOM с тройными хэшами

# Базовое обновление с тройными хэшами
# Добавляет метаданные приложения и рассчитывает хэши
sbom-checker update \
  --app-name "MyApp" \
  --app-version "1.0.0" \
  --manufacturer "MyCompany" \
  input.json output.json

# Обновление со всеми функциями
# Полный цикл обработки с игнорированием и ограничениями
sbom-checker update \
  --app-name "MyApp" \
  --app-version "1.0.0" \
  --manufacturer "MyCompany" \
  --calculate-hashes \           # Рассчитать SHA-256, Стрибог-256/512
  --ignore-file .sbomignore \    # Использовать список игнорирования
  --save-ignored ignored.txt \   # Сохранить игнорированные компоненты
  --max-concurrent 10 \          # Макс. 10 параллельных операций
  --rate-limit "5/s" \          # Не более 5 запросов в секунду
  input.json output.json

# Пример обработки больших SBOM с оптимизацией
# Увеличиваем параллелизм для ускорения обработки
sbom-checker update \
  --app-name "EnterpriseApp" \
  --app-version "2.5.0" \
  --manufacturer "BigCorp" \
  --calculate-hashes \
  --max-concurrent 50 \          # Больше воркеров для больших файлов
  --rate-limit "20/s" \         # Выше лимит для быстрой обработки
  large-sbom.json optimized-sbom.json

Расчет тройных хэшей

# Расчет хэшей для одного источника
# Загружает файл и вычисляет все три обязательных хэша
sbom-checker hash https://github.com/example/repo/archive/v1.0.0.tar.gz

# Вывод:
# SHA-256:      abc123...
# Streebog-256: def456...
# Streebog-512: ghi789...

# Пример проверки хэшей локального файла
# Полезно для верификации загруженных архивов
sbom-checker hash ./downloads/package-v1.2.3.tar.gz

# Пример с пакетом Python из PyPI
sbom-checker hash https://files.pythonhosted.org/packages/requests-2.28.2.tar.gz

Конвертация в CSV

# Базовая конвертация в CSV
sbom-checker csv input.json output.csv

# Включить колонки с хэшами
sbom-checker csv --include-hashes input.json output.csv

# Включить свойства ГОСТ
sbom-checker csv --include-gost input.json output.csv

Слияние SBOM

# Слияние нескольких SBOM
# Объединяет компоненты из разных источников с дедупликацией
sbom-checker merge \
  --app-name "MergedApp" \
  --app-version "2.0.0" \
  --manufacturer "MyCompany" \
  --ignore-file .sbomignore \   # Применить фильтры при слиянии
  --preserve-hashes \            # Сохранить существующие хэши
  --preserve-gost \              # Сохранить ГОСТ-атрибуты
  input1.json input2.json output.json

# Пример слияния SBOM микросервисов
# Создаёт единый SBOM для всего приложения
sbom-checker merge \
  --app-name "MicroservicesApp" \
  --app-version "3.0.0" \
  --manufacturer "TechCorp" \
  --preserve-hashes \
  --preserve-gost \
  frontend-sbom.json \
  backend-sbom.json \
  database-sbom.json \
  auth-service-sbom.json \
  combined-app-sbom.json

Полная справка по командам и флагам

# Глобальные флаги (для всех команд)
-v, --verbose          Включить подробный вывод
    --no-color         Выключить цветной вывод

Валидация файлов SBOM

Usage:
  sbom-checker check <filename> [flags]

Flags:
      --cache-config string         Путь к файлу конфигурации кеша
      --check-source-distribution   Проверка что URL распространения источников существуют и указывают на архивы
      --check-vcs                   Проверка VCS URL на git/svn/hg/fossil репозитории
      --check-vcs-leaf-only         То же что --check-vcs но только для листовых компонентов
  -e, --errors int                  Максимальное количество ошибок для отображения (0 для всех) (по умолчанию 10)
      --format string               Формат валидации: 'oss' для компонентов с открытым исходным кодом, 'container' для образов контейнеров (по умолчанию "oss")
      --global-rate-limit string    Глобальное ограничение скорости (например, '5/s', '100/m') (по умолчанию "5/s")
      --max-concurrent int          Максимальное количество параллельных запросов для разрешения источников (по умолчанию 10)
      --no-cache                    Выполнить проверку без использования кешей
      --per-host-limit string       Ограничения скорости на хост (например, 'github.com:10/s,default:2/s')
      --rate-limit string           Ограничение скорости на хост (например, '5/s', '100/m') (по умолчанию "5/s")
      --rate-limit-config string    Путь к файлу конфигурации ограничения скорости
      --validate-hashes             Валидация что все три хеша (SHA-256, Стрибог-256, Стрибог-512) присутствуют когда существует любой хеш

Обновление SBOM тройными хешами, ссылками, свойствами ГОСТ

Usage:
  sbom-checker update <input> <output> [flags]

Flags:
      --app-name string                   Установить имя приложения
      --app-version string                Установить версию приложения
      --attack-surface-config string      Путь к файлу конфигурации поверхности атаки (по умолчанию: config/attack_surface.json)
      --cache-config string               Путь к файлу конфигурации кеша
      --calculate-hashes                  Вычислить тройные хеши (SHA-256, Стрибог-256, Стрибог-512) для всех источников (по умолчанию true)
      --fail-unresolved                   Завершиться с ошибкой если разрешение PURL не удалось.
      --fix-all                           Применить все обновления включая тройные хеши и категоризацию безопасности
      --force-recalculate                 Принудительно пересчитать хеши даже если они уже существуют
      --global-rate-limit string          Глобальное ограничение скорости (например, '5/s', '100/m') (по умолчанию "5/s")
      --ignore-file string                Путь к файлу игнорирования для фильтрации компонентов (по умолчанию ".sbomignore")
      --manufacturer string               Установить имя производителя
      --max-concurrent int                Максимальное количество параллельных запросов для разрешения источников (по умолчанию 10)
      --no-cache                          Отключить кеш
      --per-host-limit string             Ограничения скорости на хост (например, 'github.com:10/s,default:2/s')
      --props                             Добавить свойства GOST:attack_surface и GOST:security_function
      --purl-to-vcs-file string           Путь к файлу сопоставления purl-в-VCS (по умолчанию: ./config/purl_to_vcs.json)
      --rate-limit string                 Ограничение скорости на хост (например, '5/s', '100/m') (по умолчанию "5/s")
      --rate-limit-config string          Путь к файлу конфигурации ограничения скорости
      --ref                               Установить externalReferences на основе поля purl
      --save-ignored string               Сохранить список игнорируемых компонентов в файл
      --security-function-config string   Путь к файлу конфигурации функций безопасности (по умолчанию: config/security_functions.json)

Конвертация SBOM в CSV

Usage:
  sbom-checker csv <input> <output> [flags]

Flags:
      --include-gost     Включить свойства ГОСТ в CSV вывод
      --include-hashes   Включить колонки хешей в CSV вывод

Конвертация SBOM в ODT

Usage:
  sbom-checker odt <input> <output> [flags]

Flags:
      --format string    Формат: 'oss' для компонентов с открытым исходным кодом, 'container' для образов контейнеров (по умолчанию "oss")
  -t, --pa-fb-ontop      Размещать записи PA и FB в верхней части таблицы

Слияние нескольких SBOM

Usage:
  sbom-checker merge [inputs...] <output> [flags]

Flags:
      --app-name string       Имя приложения (обязательно)
      --app-version string    Версия приложения (обязательно)
      --ignore-file string    Путь к файлу игнорирования для фильтрации компонентов во время слияния
      --manufacturer string   Имя производителя (обязательно)
      --preserve-gost         Сохранить свойства ГОСТ из входных файлов (по умолчанию true)
      --preserve-hashes       Сохранить тройные хеши из входных файлов (по умолчанию true)

Вычисление тройных хешей для одного источника

Usage:
  sbom-checker hash <url> [flags]

Конфигурационные файлы

Формат .sbomignore

# Игнорировать конкретные пакеты
# Точное совпадение PURL
pkg:npm/debug
pkg:pypi/requests

# Игнорировать по шаблону (сопоставление подстроки)
# Любой пакет, содержащий эти подстроки, будет исключён
test-           # Тестовые пакеты (test-utils, jest-test и т.д.)
-dev@           # Dev-версии (react-dev@18.0.0)
@alpha          # Альфа-версии (vue@3.0.0-alpha.1)
mock            # Моки и заглушки (mock-fs, axios-mock-adapter)
example         # Примеры кода
demo            # Демо-пакеты

# Игнорировать конкретные экосистемы
pkg:npm/        # Все npm пакеты (раскомментировать при необходимости)
pkg:golang/     # Все Go модули (раскомментировать при необходимости)

Конфигурация поверхности атаки (config/attack_surface.json)

{
  "nginx": "yes",
  "openssl": "yes",
  "sqlite": "indirect",
  "test-framework": "no"
}

Конфигурация функций безопасности (config/security_functions.json)

{
  "crypto-library": "yes",
  "auth-module": "yes",
  "logging": "indirect",
  "test-utils": "no"
}

Конфигурация ограничения скорости

# config/rate_limits.yaml
max_concurrent: 20
global_rate: "50/s"
default_rate: "5/s"

per_host:
  "github.com": "10/s"
  "gitlab.com": "5/s"
  "npmjs.org": "20/s"
  "pypi.org": "15/s"
  "maven.org": "10/s"
  "pkg.go.dev": "18/m"
  "packages.ecosyste.ms": "10/s"

Практические примеры

Пример 1: Полный цикл обработки SBOM для продуктивной среды

# Шаг 1: Проверка входного SBOM
# Убеждаемся, что файл валиден перед обработкой
sbom-checker check production-input.json
# Ожидаемый вывод: "SBOM is valid"

# Шаг 2: Создание файла игнорирования для тестовых зависимостей
cat > .sbomignore << EOF
# Игнорируем все тестовые и dev-зависимости
test-
-dev@
@alpha
@beta
jest
mocha
pytest
coverage
EOF

# Шаг 3: Обновление SBOM с полной обработкой
sbom-checker update \
  --app-name "ПромышленноеПриложение" \
  --app-version "1.5.0" \
  --manufacturer "ООО РосСофт" \
  --calculate-hashes \
  --ignore-file .sbomignore \
  --save-ignored ignored-components.txt \
  --max-concurrent 20 \
  --rate-limit "10/s" \
  -v \
  production-input.json production-output.json

# Шаг 4: Проверка результата
sbom-checker check --validate-hashes production-output.json

# Шаг 5: Экспорт в CSV для отчётности
sbom-checker csv \
  --include-hashes \
  --include-gost \
  production-output.json \
  production-report.csv

Пример 2: Обработка SBOM с проблемными источниками

# Включаем подробное логирование для диагностики
sbom-checker -v update \
  --app-name "LegacyApp" \
  --app-version "2.0.0" \
  --manufacturer "СтараяКомпания" \
  --calculate-hashes \
  legacy-sbom.json fixed-sbom.json

# Пример вывода с подробным логированием:
# INFO: Processing component pkg:npm/old-package@1.0.0
# WARN: VCS URL https://github.com/deleted/repo not accessible (404)
# INFO: Trying distribution URL https://registry.npmjs.org/old-package/-/old-package-1.0.0.tgz
# INFO: Successfully downloaded from distribution URL
# INFO: Calculated hashes:
#   SHA-256: a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
#   Streebog-256: 3f8e4585e89a3f8d5e2494fb55a0a79f8d2c4dd0a9e33d6b90e29c6e21dd6e3f
#   Streebog-512: 8e945da209aa8398f1d366e6b8c4c91963dc7d0eba7c62c29c6c9f537f7a81a9...

Пример 3: Слияние SBOM микросервисной архитектуры

# Подготовка: убеждаемся, что все SBOM валидны
for sbom in frontend.json backend.json auth.json database.json; do
  echo "Проверка $sbom..."
  sbom-checker check "$sbom"
done

# Создаём единый файл игнорирования для всего проекта
cat > .microservices-ignore << EOF
# Общие правила для всех сервисов
test-
-dev@
localhost
example.com
demo-
EOF

# Выполняем слияние с сохранением всех атрибутов
sbom-checker merge \
  --app-name "МикросервиснаяПлатформа" \
  --app-version "3.2.1" \
  --manufacturer "ТехКорп" \
  --ignore-file .microservices-ignore \
  --preserve-hashes \
  --preserve-gost \
  frontend.json backend.json auth.json database.json \
  platform-complete.json

# Генерируем отчёт о слиянии
echo "Статистика объединённого SBOM:"
sbom-checker check platform-complete.json | grep "Total components"

Пример 4: Автоматизация с использованием скриптов

#!/bin/bash
# sbom-pipeline.sh - Скрипт автоматической обработки SBOM

set -e  # Останавливаться при ошибках

# Конфигурация
APP_NAME="АвтоматизированноеПриложение"
APP_VERSION=$(git describe --tags --always)
MANUFACTURER="АвтоКомпания"
INPUT_DIR="./sboms"
OUTPUT_DIR="./processed"
REPORT_DIR="./reports"

# Создаём директории если не существуют
mkdir -p "$OUTPUT_DIR" "$REPORT_DIR"

# Обрабатываем все SBOM файлы
for input_file in "$INPUT_DIR"/*.json; do
    basename=$(basename "$input_file" .json)
    output_file="$OUTPUT_DIR/${basename}-processed.json"
    report_file="$REPORT_DIR/${basename}-report.csv"
    
    echo "Обработка $input_file..."
    
    # Обновляем SBOM
    sbom-checker update \
        --app-name "$APP_NAME" \
        --app-version "$APP_VERSION" \
        --manufacturer "$MANUFACTURER" \
        --calculate-hashes \
        --ignore-file .sbomignore \
        --max-concurrent 30 \
        "$input_file" "$output_file"
    
    # Генерируем отчёт
    sbom-checker csv \
        --include-hashes \
        --include-gost \
        "$output_file" "$report_file"
    
    echo "✓ Обработано: $basename"
done

echo "Все SBOM успешно обработаны!"

Пример 5: Интеграция с CI/CD (GitLab CI)

# .gitlab-ci.yml
stages:
  - validate
  - process
  - report

variables:
  APP_NAME: "CI-Приложение"
  MANUFACTURER: "DevOps-Команда"

validate-sbom:
  stage: validate
  script:
    - sbom-checker check input-sbom.json
    - echo "✓ SBOM валиден"

process-sbom:
  stage: process
  script:
    # Используем версию из тега или коммита
    - APP_VERSION=${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA}
    - |
      sbom-checker update \
        --app-name "$APP_NAME" \
        --app-version "$APP_VERSION" \
        --manufacturer "$MANUFACTURER" \
        --calculate-hashes \
        --ignore-file .sbomignore \
        --max-concurrent 20 \
        input-sbom.json output-sbom.json
  artifacts:
    paths:
      - output-sbom.json
    expire_in: 1 week

generate-reports:
  stage: report
  dependencies:
    - process-sbom
  script:
    # Генерация CSV отчёта
    - sbom-checker csv --include-hashes --include-gost output-sbom.json sbom-report.csv
    # Генерация ODT отчёта
    - sbom-checker odt output-sbom.json sbom-report.odt
    # Проверка на критичные компоненты
    - |
      if grep -q "critical" sbom-report.csv; then
        echo "⚠️  Найдены критичные компоненты!"
        exit 1
      fi
  artifacts:
    paths:
      - sbom-report.csv
      - sbom-report.odt
    reports:
      # Сохраняем как артефакты для дальнейшего анализа
      junit: sbom-report.xml

Пример 6: Мониторинг и алертинг

#!/bin/bash
# monitor-sbom.sh - Скрипт мониторинга изменений в SBOM

# Функция для отправки уведомлений
send_alert() {
    local message=$1
    echo "[ALERT] $message"
    # Здесь можно добавить отправку в Slack, email и т.д.
}

# Проверяем наличие новых компонентов без хэшей
check_missing_hashes() {
    local sbom_file=$1
    
    if sbom-checker check --validate-hashes "$sbom_file" 2>&1 | grep -q "missing hash"; then
        send_alert "Обнаружены компоненты без хэшей в $sbom_file"
        return 1
    fi
    return 0
}

# Проверяем наличие компонентов с высоким риском
check_high_risk_components() {
    local sbom_file=$1
    local csv_file=$(mktemp)
    
    sbom-checker csv --include-gost "$sbom_file" "$csv_file"
    
    if grep -E "(yes|direct)" "$csv_file" | grep -E "(attack_surface|security_function)" > /dev/null; then
        send_alert "Обнаружены компоненты с высоким риском в $sbom_file"
        cat "$csv_file" | grep -E "(yes|direct)" | head -10
    fi
    
    rm "$csv_file"
}

# Основной цикл мониторинга
while true; do
    echo "$(date): Начало проверки SBOM..."
    
    for sbom in ./sboms/*.json; do
        echo "Проверка $sbom..."
        check_missing_hashes "$sbom"
        check_high_risk_components "$sbom"
    done
    
    echo "$(date): Проверка завершена. Следующая через 1 час."
    sleep 3600
done

Пример 7: Работа с конкретными экосистемами

NPM/JavaScript

# Обработка SBOM с npm пакетами
sbom-checker update \
  --app-name "NodeJSApp" \
  --app-version "1.0.0" \
  --manufacturer "JSCompany" \
  --calculate-hashes \
  --rate-limit "npmjs.org=20/s" \  # Специальный лимит для npm
  npm-sbom.json npm-sbom-updated.json

Python/PyPI

# Обработка SBOM с Python пакетами
sbom-checker update \
  --app-name "PythonApp" \
  --app-version "2.0.0" \
  --manufacturer "PyCompany" \
  --calculate-hashes \
  --rate-limit "pypi.org=15/s" \  # Специальный лимит для PyPI
  python-sbom.json python-sbom-updated.json

Go Modules

# Обработка SBOM с Go модулями
sbom-checker update \
  --app-name "GoApp" \
  --app-version "3.0.0" \
  --manufacturer "GoCompany" \
  --calculate-hashes \
  --rate-limit "pkg.go.dev=18/m" \  # Лимит в минутах для Go
  go-sbom.json go-sbom-updated.json

Реализация тройного хэша

Инструмент реализует обязательное тройное хэширование согласно требованиям:

  1. SHA-256: Стандартный криптографический хэш
  2. Стрибог-256: ГОСТ Р 34.11-2012 (256 бит)
  3. Стрибог-512: ГОСТ Р 34.11-2012 (512 бит)

Правила валидации хэшей

  • Если ЛЮБОЙ хэш существует для компонента, ВСЕ ТРИ должны присутствовать
  • Отсутствие любого из трёх хэшей при наличии других является ошибкой валидации
  • Полное отсутствие хэшей допустимо (они будут рассчитаны при обновлении)

Приоритет источников

При разрешении источников инструмент использует следующий порядок приоритета: 1. VCS (git, svn, hg) - Высший приоритет 2. Архивы дистрибутивов (tar.gz, zip и т.д.) - Средний приоритет 3. Другие источники - Низший приоритет

Умное разрешение источников

Реализация:

  • Проверяет все доступные источники перед выбором.
  • Не останавливается на первом недоступном источнике.
  • Выбирает лучший доступный источник на основе приоритета.
  • Очищает избыточные ссылки после выбора.

Функции производительности

Параллельная обработка

  • Настраиваемый пул воркеров для параллельных операций
  • По умолчанию: 10 параллельных операций
  • Настраивается через флаг --max-concurrent

Ограничение скорости

  • Глобальное ограничение скорости (по умолчанию: 5 запросов/секунду)
  • Ограничения по хостам для популярных сервисов
  • Настраивается через флаги или конфигурационный файл

Кэширование

  • Кэширование результатов валидации VCS
  • Кэширование проверок дистрибутивов исходного кода
  • Кэширование расчетов хэшей в рамках сессии

Сборка из исходного кода

Предварительные требования

  • Go 1.25 или выше
  • Git (для валидации VCS)
  • Make (опционально, для использования Makefile)

Тестирование

Модульные тесты

go test ./internal/...

Интеграционные тесты

go test ./test/integration/...

Тесты на соответствие

# Тестирование против вывода инструмента Python
make test-conformance

Структура проекта

sbom-checker-go/
├── cmd/
│   └── main.go                  # Точка входа CLI
├── internal/
│   ├── cmd                      # Конфигурация команд
│   ├── cache/                   # Кэширование
│   ├── checker/                 # Валидация SBOM
│   ├── csv/                     # Конвертация в CSV
│   ├── cyclonedxdeepcopy/       # Копирование структур CycloneDX
│   ├── filter/                  # Список игнорирования
│   ├── fstools/                 # Работа с файлами
│   ├── hash/                    # Тройной хэш
│   ├── iostreams/               # Потоки ввода/вывода
│   ├── logger/                  # Логирование
│   ├── merger/                  # Слияние SBOM
│   ├── odt/                     # Конвертация в ODT
│   ├── ratelimiter/             # Ограничение скорости
│   ├── resolver/                # Разрешение источников
│   ├── sbomerr/                 # Ошибки домена
│   ├── sbomx/                   # Утилиты для SBOM
│   ├── schemafixer/             # Исправление схем
│   ├── security/                # Категоризация ГОСТ
│   ├── updater/                 # Обновление SBOM
│   └── version/                 # Информация о версии
├── config/                      # Конфигурация
│   ├── attack_surface.json
│   ├── security_functions.json
│   ├── purl_to_vcs.json
│   ├── cache.yaml
│   └── rate_limits.yaml
├── schemas/                     # JSON-схемы CycloneDX/SPDX/ГОСТ
├── templates/                   # Шаблоны для ODT 
├── docs/                        # Документация
└── build/                       # Артефакты сборки

Статус миграции

✅ Реализованные функции

  •  Расчет тройного хэша (SHA-256, Стрибог-256, Стрибог-512)
  •  Умное разрешение источников (проверка всех источников)
  •  Список игнорирования с точным сопоставлением подстроки
  •  Категоризация безопасности из конфигурационных файлов
  •  Параллельная обработка с ограничением скорости
  •  Совместимость CLI с инструментом Python
  •  Поддержка контейнерных форматов
  •  Конвертация CSV/ODT
  •  Слияние SBOM

🚧 В процессе

  •  Полный набор тестов на совместимость результатов работы sbom-checker и sbom-checker-go
  •  Расширенные шаблоны репозиториев
  •  Поддержка Docker контейнеров
  •  CI/CD конвейер
  •  Выпускать пакеты .rpm / .deb для релизов утилиты
  •  Подписывать утилиту для работы в ЗПС Астра Linux;
  •  Фаззинг

❌ Не реализовано

  •  Внешний сервис валидации (по дизайну - только локально)
  •  Упрощения для конкретных форков (сохраняем полный набор функций)

Планы на будущее:

Участие в проекте

Пожалуйста, ознакомьтесь с CONTRIBUTING.md для получения руководства.

Лицензия

Лицензия Apache-2.0. См. LICENSE для деталей.

Поддержка

По вопросам, проблемам или предложениям обращайтесь к системе отслеживания проблем проекта.

Благодарности

Выражаем благодарность коллективу разрабочиков ИСП РАН работу над первой версией утилиты sbom-checker.

Описание

Проверка SBOM по стандартам ФСТЭК

Конвейеры
8 успешных
2 с ошибкой