Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
SBOM evidence occurrences
Почему это важно для SCA/OSA
В экосистемных языках источник компонента очевиден — строка в lock-файле. В C/C++ компонент часто появляется в SBOM по косвенным признакам: символ в бинаре, путь к .so, строка версии в секции .comment, совпадение хеша. Без записанного доказательства такая запись неотличима от догадки генератора. CycloneDX закрывает это полем evidence с подполями occurrences (где физически найден компонент) и identity (на каком основании присвоены имя и версия, с confidence). Это превращает SBOM из списка имён в доказательную базу: для каждой записи видно, откуда она и насколько ей можно верить.
Для аудита это ключевое отличие «честного» SBOM от декоративного. Запись OpenSSL 3.0.11 без evidence — утверждение; та же запись с occurrence-путём к libssl.so.3 и identity-методом binary-symbol — проверяемый факт. Именно по наличию evidence сервис аудита/вердиктов отделяет findings, которые можно эскалировать, от тех, что требуют доразметки.
Как это проявляется
Компонент с доказательствами происхождения и оценкой достоверности:
{
"type": "library", "name": "openssl", "version": "3.0.11",
"purl": "pkg:deb/debian/libssl3@3.0.11-1~deb12u2?arch=amd64",
"evidence": {
"identity": [{
"field": "version", "confidence": 0.8, "methods": [
{ "technique": "binary-analysis", "confidence": 0.8,
"value": "OpenSSL 3.0.11 19 Sep 2023" }]
}],
"occurrences": [
{ "location": "usr/lib/x86_64-linux-gnu/libssl.so.3" },
{ "location": "opt/app/bin/service" }
]
}
}
Из этой записи аудитор читает: компонент найден в двух местах (системная .so и сам бинарь, который её тянет), версия восстановлена из строки в бинаре с confidence 0.8 — не из манифеста, значит подтверждать дополнительно. Запись без блока evidence такой трассировки не даёт: непонятно, реально ли это OpenSSL или совпадение имени.
Слепая зона или приём
Слепая зона — равнять записи с доказательством и без. Генератор может выдать confidence: 1.0 там, где компонент извлечён из манифеста, и низкий — там, где из бинаря; если отчёт игнорирует confidence, обе строки выглядят одинаково надёжными. Приём: использовать occurrences и identity.confidence как фильтр и как worklist. Низкий confidence или отсутствие occurrence — повод для ручной доразметки, а не для тихого включения в итоговый список.
Что делать на проекте
- Включить сбор evidence в генераторе (для cdxgen — режим с
--evidence/глубоким анализом), не ограничиваться плоским списком имён. - Проверить, что у системных и статически вшитых компонентов заполнены
occurrences(путь к.so/архиву/бинарю) иidentity.methods. - Отсортировать компоненты по
identity.confidence: низкий — в worklist доразметки. - Сверять
occurrencesс реальностью: путь должен указывать на существующий артефакт в поставке, а не на промежуточный build-каталог. - Записи без evidence трактовать как неподтверждённые: либо доказать происхождение, либо понизить их статус в отчёте.
- Хранить evidence как аудиторский след: он отвечает на вопрос «откуда вы знаете, что здесь OpenSSL 3.0.11».
Связь
- Модуль: М09. C/C++ legacy (полнота на этапе сборки, доказательная база), М04. Идентификаторы компонентов и уязвимостей (на чём основан присвоенный идентификатор).
- Практики: П22. ELF dynamic dependencies (откуда occurrence-путь к
.so), П04. Генерация SBOM через cdxgen для C C++ (генерация SBOM с evidence), П34. SBOM quality gate (порог по качеству записей). - Нормативка: CycloneDX ECMA-424 (схема
evidence/occurrences), BSI TR-03183-2 v2.1.0 (полнота и достоверность), CISA Minimum Elements for SBOM. - Смежные заметки: hash-based identification (хеш как метод identity), debug symbols как evidence (символы как доказательство), honest SBOM (доказуемость против декоративности).