Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
Конспект: SBOM for AI и честный SBOM контейнерных образов
Зачем модуль
Две темы, которые не закрываются обычным SBOM. Первая: AI-система — это не дерево npm/pypi-пакетов, а связка «модель + веса + датасеты + инфраструктура исполнения», и риски здесь другие (откуда взяты данные обучения, какова лицензия весов, на чём дистиллировали). Вторая: SBOM, сгенерированный по контейнерному образу, легко делается нечестным — он описывает то, что декларируется, а не то, что физически лежит в слоях. Аудитор, который верит распечатке SBOM, пропускает и приватный ключ в нижнем слое, и образ, в котором сканер «не нашёл ничего», потому что метаданные пакетов затёрты.
Ключевые идеи
SBOM for AI = обычный SBOM + семь кластеров. Документ G7 «SBOM for AI: Minimum Elements» (Avian, France, 2026; авторы — агентства BSI, ACN, ANSSI, CSE, CISA, NCSC, NCO и Еврокомиссия) прямо говорит: AI-система — тоже ПО, поэтому обычные минимальные элементы SBOM сохраняются, а сверху добавляются кластеры: Metadata, System Level Properties, Models, Datasets Properties, Infrastructure, Security Properties, KPI. Принципиально новое — в кластерах Models и Datasets:
- Models:
Model hash value/Model hash algorithm(хэш самих весов, не только кода),Model licenseс явной градацией open weight / open architecture / open data / open training,Model training properties(pre-training, fine-tuning, RLHF, DPO/PPO/GRPO), lineage — указание модели-предшественника, дистилляции, форков. - Datasets:
Dataset provenance(источник, способ сбора — web crawling или коммерческое соглашение, шаги разметки),Dataset sensitivity(PII, copyright, sensitive — финансы/медицина),Dataset hash,Dataset license.
Идентификаторы здесь шире привычных PURL/CPE: добавляются SWHID, OmniBOR, commit-хэши.
Честный SBOM образа = реальное содержимое слоёв, а не декларация. Сканеры образов (Trivy, Grype) работают так: скачивают образ, извлекают tar-ы слоёв из blobs/sha256/, проверяют пути пакетных БД (/var/lib/dpkg/status, /lib/apk/db/installed, /var/lib/rpm/), собирают результат. Это даёт три слепые зоны:
- Удалённый-но-сохранённый файл.
RUN rm secretсоздаёт новый слой, где файла нет, но в нижнем слое он остался физически. - Затёртые метаданные. Если в образе нет следов менеджера пакетов, сканер не видит зависимостей. В «дикой природе» (топ-100 образов реестров) >50% образов модифицируют метаданные пакетов, ~20% ставят ПО мимо менеджера, у Bitnami — до 90%.
- Спрятанные бинарники. UPX-упаковка ломает чтение build-info;
go build -ldflags "-X runtime.modinfo="обнуляет список зависимостей Go.
Как выглядит на практике
Минимальный воспроизводимый пример «секрет переживает rm»:
FROM busybox:latest
COPY key.api .
RUN rm key.api # в финальном слое файла нет
$ docker save secrets-test:latest | tar -x -C .
$ find blobs/sha256/ -type f -exec file {} \; | grep tar
blobs/sha256/b00389...f17b98: POSIX tar archive
$ tar xvf blobs/sha256/b00389...f17b98
key.api
$ cat key.api
-----BEGIN OPENSSH PRIVATE KEY----- # секрет жив в нижнем слое
И демонстрация нечестности SBOM через обфускацию метаданных:
| Команда | Результат grype |
|---|---|
grype …/nodejs-demoapp:latest |
97 vulnerability matches |
mint slim --obfuscate-metadata … → grype …:obfuscated |
0 vulnerability matches |
Слепые зоны именно этой темы - AI: SBOM for AI описывает состав, но не достижимость/автономность — G7 сознательно не вынес «уровень автономности агента» в отдельный элемент. Открытые веса без
Dataset provenance— это лицензионная и legal-ловушка (copyright/PII в обучении). - Контейнеры: «статика» защищает только от легитимного пользователя — вредоносный образ обходит сканер (multi-stage, внешние загрузки в рантайме, обфускация неисправимы статикой). Перевыпуск SBOM после компрометации реестра (имитация коммитов, tag poisoning) делает подпись бесполезной без attestations.
Связь с нормативкой
ГОСТ Р 56939-2024 (РБПО, общие требования) и проект ГОСТ Р по композиционному анализу требуют сохранять evidence и контролировать заимствованный код — для образов это значит фиксировать реальный, а не декларируемый состав. Целостность подтверждается attestations (in-toto, SLSA, подпись через Sigstore). См. 05 Нормативка и Регламент приёмки контейнерного образа.
Что уносим в работу
- Для AI-поставки заполняем кластеры Models и Datasets отдельно от обычного SBOM — особенно
Model license(open weight/data/training) иDataset provenance/sensitivity. - Никогда не верим SBOM образа без сверки с реальными слоями:
docker save+ извлечение tar-ов. - Секреты ищем во всех слоях, а не в финальной ФС —
RUN rmне удаляет. - Проверяем образ на обфускацию: расхождение «декларация vs реальность» — это red flag, а не «чистый образ».
- Доверяй, но проверяй: статику дополняем динамикой и attestations.
Практики: П37. Контейнерный образ слои секреты и удаленные файлы, П38. Честный SBOM контейнерного образа, П39. SBOM for AI minimum elements. Справочник: SBOM for AI - минимальные элементы.