Составить и выгрузить ППК (SBOM) с учетом требований ФСТЭК¶
Контекст¶
Для сертификации и подготовки сопроводительных материалов недостаточно просто выгрузить обычный SBOM. Нужен перечень программных компонентов в машиночитаемой форме, который учитывает дополнительные требования ФСТЭК и при этом отражает полный состав проекта, включая зависимости, которые не всегда раскрываются в манифестах по умолчанию.
CodeScoring поддерживает выгрузку SBOM в расширенных форматах CycloneDX v1.6 Ext JSON и CycloneDX v1.7 Ext JSON, адаптированных под такие требования. Чтобы такой файл получился полезным, сначала важно собрать полный состав компонентов, а затем разметить в проекте свойства зависимостей, которые не определяются автоматически.
В примере ниже для локального запуска используется Python-проект и pip, потому что на этой связке проще наглядно показать, зачем для полного ППК иногда нужно разрешение зависимостей в локальной среде и явное указание пути к пакетному менеджеру. Тот же подход применяется и для других экосистем, где для полного инвентаря нужно разрешение зависимостей в окружении.
Что получится¶
После прохождения сценария:
- в CodeScoring появится проект с полным составом компонентов, сохраненным после локального запуска агента;
- для ключевых зависимостей будут заполнены свойства, важные для выгрузки ППК;
- из интерфейса можно будет скачать
CycloneDX v1.6 Ext JSONилиCycloneDX v1.7 Ext JSONс учетом требований ФСТЭК.
Требования¶
Перед началом убедитесь, что есть:
- доступ к on-premise инсталляции CodeScoring;
- лицензия CodeScoring, в которой включен модуль SCA;
- API-токен платформы для локального запуска агента;
- локальная копия проекта, для которого нужно сформировать ППК;
- установленный в локальной среде пакетный менеджер и известный путь к нему, например
/usr/local/bin/pip3; - права на просмотр проекта и выгрузку SBOM из интерфейса.
Шаги¶
Шаг 1. Подготовьте агент Johnny для локального запуска¶
Сначала нужно убедиться, что локальный запуск можно выполнить без дополнительных донастроек в последний момент.
- Откройте страницу
[platform-url]/download/в своей инсталляции CodeScoring. - При необходимости проверьте актуальную версию по адресу
[platform-url]/download/johnny_version. - Скачайте исполняемый файл агента под свою систему.
- Сделайте файл исполняемым:
После этого агент можно использовать для локальной инвентаризации проекта и сохранения результатов в платформу.
Шаг 2. Сначала получите полный состав компонентов локально¶
Чтобы получить полный граф зависимостей с учетом транзитивных, нужен либо lock-файл соответствующего пакетного менеджера, либо запуск с разрешением зависимостей в окружении сборки. В случае pip отдельный lock-файл обычно не используется, поэтому в этом примере показан второй вариант с явным указанием пути к пакетному менеджеру.
Пример локального запуска с сохранением результатов в CodeScoring
Что важно в этой команде:
--pip-resolveвключает разрешение зависимостей в окружении;--pip-pathявно указывает, какойpipнужно использовать для локального запуска;--save-resultsи--create-projectсохраняют результаты в отдельный CLI-проект CodeScoring;--bom-path bom-local.jsonоставляет локальную копию SBOM рядом с проектом;- полный список флагов и режимов запуска собран в руководстве по запуску агента Johnny.
Когда resolve действительно нужен
Для некоторых экосистем пакетные менеджеры по умолчанию не раскрывают транзитивные зависимости в манифестах. В таких случаях CodeScoring рекомендует разрешение зависимостей в окружении. Если lock-файл уже существует, агент использует его и отдельный resolve не выполняет.
Ниже показано короткое интерактивное демо. Оно показывает разницу между запуском только по манифесту и запуском с resolve. Для pip такой режим стоит использовать только в изолированном окружении проекта: иначе в результат могут попасть лишние пакеты из локальной среды, которые не относятся к сканируемому приложению.
После такого запуска в платформе появляется CLI-проект с полным составом компонентов, а локально сохраняется bom-local.json.
Шаг 3. Разметьте свойства зависимостей перед выгрузкой¶
Расширенный SBOM для ФСТЭК отличается от обычного тем, что в него добавляются дополнительные свойства компонентов. Часть из них требует ручной разметки в проекте.
- Откройте созданный проект в CodeScoring.
- Перейдите к таблице зависимостей.
- Нажмите Настроить зависимости.
- Для компонентов, которые нужно отразить в ППК более точно, заполните необходимые поля:
- VCS — ссылка на репозиторий или архив с исходным кодом;
- Поверхность атаки —
Да,КосвенноилиНет; - Функция безопасности —
Да,КосвенноилиНет; - Кем предоставлено — если компонент заимствован из другого продукта.
- Сохраните изменения.
Что не заполняется автоматически
Поля, соответствующие поверхности атаки, функции безопасности и источнику заимствования, требуют экспертной оценки и не должны считаться полностью автоматическими. Именно поэтому их лучше проверить и заполнить перед выгрузкой.
Эти значения относятся только к текущему проекту и учитываются в следующих выгрузках из него.
После этого выбранные значения будут учитываться при последующих выгрузках SBOM из проекта.
Шаг 4. Выгрузите ППК в расширенном формате CycloneDX¶
Теперь можно получить машиночитаемый файл, который уже учитывает разметку из проекта.
- На странице проекта нажмите Скачать SBOM.
- В списке форматов выберите:
CycloneDX v1.6 Ext JSON, илиCycloneDX v1.7 Ext JSON.
- При необходимости задайте имя файла.
- Подтвердите выгрузку.
Почему нужен именно формат Ext
Для требований ФСТЭК недостаточно обычного CycloneDX JSON. Нужен расширенный формат Ext, в котором дополнительные свойства компонентов включаются в properties.
После этого на локальной машине появится файл ППК в формате, который адаптирован под дополнительные требования ФСТЭК.
Шаг 5. Проверьте содержимое выгруженного файла¶
Финальная проверка нужна, чтобы убедиться, что выгружен не просто SBOM, а именно тот файл, который содержит добавленные свойства и пригоден для дальнейшей передачи и проверки.
- Откройте выгруженный JSON-файл в редакторе или просмотрщике JSON.
- Найдите один из компонентов, который был размечен на предыдущем шаге.
- Убедитесь, что:
- у компонента есть блок
properties; - в нем присутствуют значения для свойств, связанных с поверхностью атаки, функцией безопасности и источником заимствования;
- ссылка на репозиторий или архив исходного кода попала в
externalReferences.
- у компонента есть блок
После такой проверки можно быть уверенным, что файл содержит не только базовый перечень компонентов, но и дополнительную разметку, важную для ППК.
Результат¶
Сценарий можно считать завершенным, если:
- локальный запуск агента сформировал полный состав компонентов и сохранил результаты в проект CodeScoring;
- для нужных зависимостей в проекте заполнены свойства, влияющие на выгрузку ППК;
- из интерфейса скачан
CycloneDX v1.6 Ext JSONилиCycloneDX v1.7 Ext JSON; - в выгруженном файле видны дополнительные свойства компонентов и ссылка на исходный код там, где она была указана.
После этого ППК можно использовать как машиночитаемый результат для внутренней проверки и дальнейшей подготовки материалов.
Что дальше¶
- уточнить параметры разрешения зависимостей для других экосистем;
- донастроить свойства зависимостей для следующих выгрузок;
- проверить файл через SBOM Checker ИСП РАН.