Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
Практическая работа: координаты компонентов и эффект битого PURL
Цель
Собрать корректные координаты (PURL, CPE, идентификаторы уязвимостей) для четырёх компонентов и на собственном опыте увидеть, как порча координаты превращает уязвимый компонент в «чистый» в отчёте сканера.
Что понадобится
- стенд из П01 (Docker, доступ в сеть к публичным базам);
osv-scanner(см. П07);- доступ к NVD CPE Search (nvd.nist.gov/products/cpe/search), osv.dev, БДУ ФСТЭК (bdu.fstec.ru).
Часть 1. Таблица координат (4 компонента)
Заполните таблицу для OpenSSL, zlib, libcurl и одной внутренней библиотеки Организации. Версии берите фиксированные (как в реальном релизе).
| Компонент | PURL | CPE 2.3 | CVE / GHSA | BDU | Источник координаты |
|---|---|---|---|---|---|
| OpenSSL 3.0.7 | pkg:generic/openssl@3.0.7 или экосистемный |
cpe:2.3:a:openssl:openssl:3.0.7:*:*:*:*:*:*:* |
… | … | NVD CPE Search / osv.dev |
| zlib 1.2.11 | pkg:generic/zlib@1.2.11 |
cpe:2.3:a:zlib:zlib:1.2.11:*:*:*:*:*:*:* |
… | … | … |
| libcurl 7.74.0 | pkg:deb/debian/curl@7.74.0-1.3?arch=amd64 |
cpe:2.3:a:haxx:curl:7.74.0:*:*:*:*:*:*:* |
… | … | проверить alias curl:curl |
| внутренняя библиотека | pkg:generic/<name>@<ver> (приватный) |
назначить вручную или пометить «нет CPE» | — | — | реестр Организации |
Где брать значения PURL экосистемного пакета часто берётся из самого SBOM. Для C/C++ компонента CPE приходится искать вручную: вбейте product в NVD CPE Search и посмотрите, под какими vendor он зарегистрирован. Для libcurl специально проверьте обе формы —
haxx:curlиcurl:curl.
Шаги
- Зафиксируйте вход: компонент, версию, дату анализа, версии инструментов.
- Для каждого компонента найдите PURL и проверьте его в osv.dev → выпишите CVE/GHSA.
- Найдите CPE в NVD CPE Search; для libcurl зафиксируйте обе vendor-формы (alias).
- Проверьте каждый CVE по БДУ ФСТЭК — выпишите
BDU:YYYY-NNNNN, где есть; отметьте записи без CVE. - Для внутренней библиотеки решите: есть ли публичная координата вообще; если нет — пометьте как «unresolved, требует ручной разметки».
Часть 2. Эксперимент «битый PURL → тихий ноль»
- Возьмите lockfile или manifest с заведомо уязвимым пакетом (например, устаревший npm/PyPI). Запустите базовый скан:
osv-scanner scan source --lockfile=package-lock.json
Зафиксируйте число находок (например, N уязвимостей).
- Смоделируйте порчу координаты. В SBOM (CycloneDX JSON) у этого компонента добавьте приватный qualifier и/или измените
type, затем прогоните скан по SBOM:
# было: pkg:npm/lodash@4.17.20
# стало: pkg:npm/lodash@4.17.20?repository_url=https://nexus.internal/repo
osv-scanner scan --sbom=bom.cdx.json
-
Сравните: число находок упало (часто до нуля по этому компоненту), при этом скан завершился без ошибок. Запишите результат.
-
Снимите приватный qualifier (нормализуйте PURL по правилам П24. PURL нормализация и private qualifiers) и повторите — находки должны вернуться.
Главный вывод части 2 Снижение числа находок не сопровождается ошибкой. Это и есть механизм false negative: компонент «выпал» из матчинга, а отчёт выглядит благополучно.
Ожидаемый результат
- Заполненная таблица из 4 строк с PURL, CPE (для libcurl — две vendor-формы), CVE/GHSA и BDU.
- Зафиксированная пара чисел находок: до порчи PURL и после, плюс восстановление после нормализации.
- Короткий вывод (3–5 строк): какие компоненты остались без надёжной координаты и что отправить в worklist.
Если не получилось
- osv-scanner находит ноль на чистом проекте — проверьте, что lockfile реальный и пакет действительно уязвимой версии; возможно, версия уже пропатчена.
- CPE не находится в NVD — продукт может быть под другим vendor (alias) или вообще без записи в словаре; это нормальный результат для C/C++ — фиксируйте в П25. CPE alias worklist.
- После порчи PURL находок столько же — вероятно, сканер взял координату не из изменённого поля; убедитесь, что меняете именно тот
purl, по которому идёт матчинг. - БДУ пусто, а CVE есть — нормально: часть CVE не имеет записи в БДУ и наоборот; так и фиксируйте.
Критерий зачёта
Показать преподавателю: (1) таблицу координат с alias для libcurl; (2) воспроизведённый эффект «битый PURL → падение находок → восстановление после нормализации» с конкретными числами; (3) список unresolved-координат.
Практики
- П24. PURL нормализация и private qualifiers
- П25. CPE alias worklist
- П07. OSV-Scanner и lockfiles
- П10. БДУ ФСТЭК как национальный источник
Нормативная связка
NIST SP 800-218 SSDF RV.1 (поиск уязвимостей опирается на корректную идентификацию), CISA Minimum Elements for SBOM (уникальные идентификаторы), BSI TR-03183-2 v2.1.0 (качество SBOM), БДУ ФСТЭК.