Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
detection accuracy
Почему это важно для SCA/OSA
В C/C++ точность обнаружения — это не «сколько уязвимостей нашли», а «какую долю реально присутствующих компонентов мы вообще увидели и верно скоординировали». Здесь два разных провала. Первый — компонент не попал в SBOM (статическая линковка, vendored-код, stripped-бинарь) — провал полноты (recall). Второй — компонент в SBOM есть, но координата битая (generic-PURL, не тот CPE-alias, ненормализованная версия) — провал точности координаты. Оба дают один и тот же видимый симптом: подозрительно мало findings. И оба опасны именно тем, что выглядят как «всё чисто».
Самый дорогой исход в SCA — не false positive (его видно и можно отклонить), а false negative из-за невидимого компонента или битой координаты: уязвимость есть, а инструмент молчит. Поэтому «accuracy» здесь измеряют не точностью срабатываний, а способностью доказать, что нулю findings можно верить.
Как это проявляется
Один и тот же проект под разными методами обнаружения даёт разный состав:
метод обнаружения OpenSSL zlib(static) внутр. форк итог покрытия
скан готового бинаря cpe? — — частично
ldd / readelf -d (.so) да — — только динамика
build-scan (перехват CC) да да да полно
Статически слинкованная zlib не видна ни в ldd, ни в готовом SBOM от позднего скана — её ловит только перехват вызовов компилятора на этапе сборки. То есть точность напрямую зависит от метода: поздний скан бинаря систематически недосчитывает статику и vendored-код.
# симптом провала полноты: cdxgen нашёл мало C/C++ компонентов
$ jq '[.components[] | select(.purl|startswith("pkg:generic"))] | length' bom.json
7 # семь generic — кандидаты на потерю матчинга
$ jq '[.components[] | select(.purl==null)] | length' bom.json
3 # три компонента вообще без координаты
Слепая зона или приём
Слепая зона — измерять точность по числу findings. Малое число находок одинаково означает и «чисто», и «мы не туда смотрели». Приём: оценивать accuracy через прокси-метрики качества данных — доля компонентов с валидным PURL, доля с CPE, доля с evidence/высоким confidence, число pkg:generic и записей без координаты. Контрольный приём — намеренно сломать координату известного компонента и убедиться, что findings для него пропадает: это показывает, что матчинг вообще работает и насколько он хрупок.
Что делать на проекте
- Различать два провала: полнота (компонент не в SBOM) и точность координаты (компонент есть, координата битая) — лечатся они по-разному.
- Для полноты — переносить обнаружение на этап сборки (build-scan), а не на поздний скан бинаря; статику/vendored иначе не увидеть.
- Считать прокси-метрики: доля валидных PURL/CPE, число
genericи записей без координаты, доля записей с evidence. - Прогонять контрольный эксперимент «битая координата → пропавшие находки», чтобы доказать, что матчинг живой.
- Записи с низким confidence/без evidence держать в worklist доразметки, а не в итоговом «чистом» списке.
- Трактовать «ноль уязвимостей» как гипотезу, требующую доказательства полноты, а не как результат.
Связь
- Модуль: М04. Идентификаторы компонентов и уязвимостей (false negative из-за битой координаты), М09. C/C++ legacy (полнота на этапе сборки).
- Практики: П23. Статическая линковка как слепая зона (провал полноты), П24. PURL нормализация и private qualifiers и П25. CPE alias worklist (провал точности координаты), П34. SBOM quality gate (порог качества данных).
- Нормативка: NIST SP 800-218 SSDF (RV.1 — поиск уязвимостей), BSI TR-03183-2 v2.1.0 (полнота и точность SBOM), ГОСТ Р 56939-2024 (доказательность РБПО).
- Смежные заметки: PURL pkg generic fallback (скрытый пропуск), version normalization (версия как источник пропуска), SBOM evidence occurrences (доказуемость записей).