SBOM Checker Go
Утилита для валидации и обновления CycloneDX SBOM
Оригинальная утилита sbom-checker реализована на языке Python разработчиками ИСП РАН.
История
В 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) для предсказуемой работы.
- Детерминированный вывод и подготовка отчётных материалов под внутренние шаблоны.
Далее см. разделы «Возможности» и «Использование» для примеров и конфигурации, а также «Архитектурная документация» для деталей реализации.
Архитектурная документация
- Обзор архитектуры - общее описание архитектуры системы
- Диаграммы - визуальное представление компонентов и их взаимодействий
- API Reference - справочник по API и интерфейсам
- Глоссарий терминов - словарь технических терминов и сокращений
- Пояснения по реализации и подготовке перечней
- Руководство для контрибьюторов - основные принципы разработки и участия в проекте
Возможности
Основная функциональность
- Валидация 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
Реализация тройного хэша
Инструмент реализует обязательное тройное хэширование согласно требованиям:
- SHA-256: Стандартный криптографический хэш
- Стрибог-256: ГОСТ Р 34.11-2012 (256 бит)
- Стрибог-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.