Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
CERT MISRA рядом с SCA
Почему это важно для SCA/OSA
CERT C/C++ и MISRA — это стандарты того, как написан ваш собственный код: какие конструкции языка запрещены, как обращаться с памятью, целочисленными переполнениями, указателями. SCA отвечает на ортогональный вопрос — какие чужие компоненты в сборке. Эти два среза не заменяют, а дополняют друг друга, и их легко спутать: «у нас чистый MISRA-отчёт» не означает «у нас нет уязвимой zlib в зависимостях», а полный SBOM ничего не говорит о том, нарушает ли ваш код CERT-правила работы с буферами. Понимать границу важно, чтобы в досье РБПО не выдавать один контроль за другой.
Как это проявляется
Инструменты разные, входы разные, выводы про разное. Статический анализатор правил смотрит исходники вашего кода; SCA смотрит граф компонентов.
# CERT: проверка правил написания кода
clang-tidy -checks='cert-*' src/parser.c --
# warning: calling 'system' is insecure [cert-env33-c]
# warning: do not use 'strcpy' [cert-str31-c]
# MISRA: проверка по своду правил
cppcheck --addon=misra --enable=all src/
# [misra-c2012-21.3] dynamic memory allocation shall not be used
# SCA: это про состав, а не про правила — другой инструмент:
syft dir:. -o cyclonedx-json # перечислит компоненты, но не нарушения CERT/MISRA
Показательно: clang-tidy с профилем cert-* найдёт небезопасный strcpy в вашем parser.c, но не заметит, что в сборку вкомпилирована уязвимая версия стороннего парсера — это зона SCA. И наоборот.
Слепая зона или приём
Чистый MISRA ≠ безопасный состав Отчёт «0 нарушений MISRA» относится только к проверенному собственному коду. Vendored-библиотеки обычно исключают из MISRA-анализа (чужой код, тонны нарушений), и именно там живёт уязвимая
zlib/libpng, которую ловит только SCA. Принимать конформанс правилам за безопасность поставки — ошибка.
Приём: вести два независимых контроля в досье — конформанс CERT/MISRA по собственному коду и инвентаризацию + уязвимости по всем компонентам через SCA, и не закрывать пробел одного отчётом другого.
Что делать на проекте
- Развести зоны ответственности: CERT/MISRA — собственный код, SCA — состав и чужие компоненты; в досье это два отдельных раздела.
- Запускать
clang-tidy -checks=cert-*иcppcheck --addon=misraпо своему коду как отдельный gate, не смешивая с генерацией SBOM. - Явно фиксировать, что vendored/
third_partyвыведены из MISRA-анализа, и закрывать их SCA + санитайзерами. - Не засчитывать чистый CERT/MISRA-отчёт как доказательство отсутствия уязвимых зависимостей — это разные метрики.
- Сводить оба контроля в нормативную трассировку РБПО: правила написания и композиционный анализ — обязательные, но разные требования.
- Спорные нарушения CERT/MISRA документировать с обоснованием (deviation), как и исключения по уязвимостям в SCA.
Связь
- Модуль: М09. C/C++ legacy без дисциплины пакетного менеджера.
- Практики: П19. C C++ make build inventory, П40. Огнестойкость РБПО и SCA процесс.
- Нормативка: CERT C/C++, MISRA C/C++, ГОСТ Р 56939-2024.
- Смежные заметки: secure compiler flags, sanitizers in CI, копипаста кода, форки open source библиотек.