Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
Контрольные вопросы
Базовый уровень 1. Почему
#include <openssl/ssl.h>не позволяет определить версию OpenSSL и факт линковки? Что в принципе можно узнать из заголовка, а что — нет? 2. Чем динамическая линковка (.so) отличается от статической (.a) с точки зрения видимости компонента в SBOM? 3. Какая запись в ELF-секции.dynamicперечисляет динамические зависимости и какими командами её прочитать? 4. Как путь к.soпревращается в координаты компонента (имя пакета, версия, PURL)? Какие утилиты для этого нужны?Средний уровень 5. Почему статическая линковка называется слепой зоной композиционного анализа? Куда «уходит» код
libfoo.aпосле линковки? 6. Чем поздний скан готового бинаря хуже build-scan для полноты инвентаризации C/C++? Какую роль играет stripping? 7. Чем внутренний форк OSS опаснее для анализа, чем чистый апстрим той же библиотеки? Что меняется в профиле риска? 8. Когда в проекте есть Conan/vcpkg, что именно они дают для идентичности компонента по сравнению сpkg:generic/...? 9. Что такое unresolved library в C/C++ контексте и почему такой случай нельзя молча выбрасывать из SBOM?Продвинутый уровень 10. Сырой
cdxgenSBOM для C/C++ проекта нашёл 3 компонента, аreadelf -dпоказывает 9DT_NEEDED. Как объяснить расхождение и чем его закрыть? 11. Какие данные C/C++ проекта (исходники, бинарники, build-логи) допустимо отправлять во внешний облачный сервис без отдельного решения, а какие — нет? 12. Как enrichment-утилита («генератор фактов») повышает полноту: какие источники она объединяет и почему именно она, а не сервис вердиктов, отвечает за факты?
Кейс-задачи
Кейс 1. Тихий SBOM Соисполнитель прислал C++ компонент и
cdxgenSBOM с двумя записями.ldd ./serviceвыдаётnot a dynamic executable. Опишите, что именно произошло, почему SBOM пуст, и какие шаги (команды, артефакты, реестр) вы предпримете, чтобы восстановить состав и зафиксировать слепую зону.Кейс 2. Неопознанная .so В
readelf -dестьlibcustomcrypto.so.1, ноdpkg -Sиapt-cache policyеё не находят. Что это может быть (vendored, внутренний форк, ручная сборка)? Как доказать версию и происхождение, куда занести компонент и кто отвечает за доразметку? Сошлитесь на нужный шаблон.Кейс 3. Динамика против статики Один и тот же релиз собирается в двух конфигурациях: динамической (для разработки) и статической stripped (для поставки). По SBOM поставочного бинаря OpenSSL «отсутствует». Объясните заказчику, почему это не значит, что OpenSSL не используется, и предложите процессное решение, дающее полный состав именно для поставочной сборки.