Структура и алгоритм обработки SWID-тег
Согласно данной технологии, продукту присваивается уникальный идентификатор (тег), который позволяет единообразно и достоверно идентифицировать продукт и его владельца.
Теги используются учетными системами для получения информации об используемом в организации ПО, определения его количества, проверки на соответствие лицензионному соглашению, установке зависимостей и так далее. Информация из тегов позволяет однозначно понять, кто является производителем и/или владельцем продукта для обращения при сбоях или других вопросах, связанных с эксплуатацией продукта. Производитель на основании информации из тега может убедиться, что речь идет действительно о принадлежащем ему продукте.
Стандарт
SWID (Software Identifier) — открытый международный стандарт, разработанный под ISO/IEC 19770‑2:2009, в России закрепленный в ГОСТ Р ИСО/МЭК 19770-2-2014. Он описывает XML-схему для однозначной идентификации программного продукта, его компонентов и их взаимосвязей.
Функции и возможности SWID-тег
- Единый идентификатор. Каждому продукту присваивается уникальный
<unique_id>, по которому можно отслеживать его версии. - Учет лицензий. Поле
<entitlement_required_indicator>указывает, требуется ли лицензия. Данные можно сравнить с лицензионным реестром. - Управление зависимостями. Блок
<dependency>содержит список всех требуемых компонентов. Его содержимое используется для построения графа зависимостей. - Аудит и безопасность. Сравнение
<unique_id>с базами CVE позволяет находить уязвимости. Права444устанавливают режим «только чтение», предотвращая модификацию SWID-тега и сохраняя целостность метаданных для корректной сверки. - Обнаружение сбоев. Тег хранит идентификаторы создателя и лицензиара. Это упрощает обращение в поддержку при инцидентах.
Обозначения
{product_version}- версия продукта (текущая версия: 7.3.1);{short_version}- короткая версия продукта (текущая: 7.3);{version_component}- версия компонента.
Формальная структура
<?xml version="1.0" encoding="utf-8"?>
<software_identification_tag ...>
<entitlement_required_indicator>...</entitlement_required_indicator>
<product_title>...</product_title>
<product_version>
<name>...</name>
<numeric>
<major>...</major>
<minor>...</minor>
<build>...</build>
<review>...</review>
</numeric>
</product_version>
<software_creator>...</software_creator>
<software_licensor>...</software_licensor>
<software_id>
<unique_id>...</unique_id>
<tag_creator_regid>...</tag_creator_regid>
</software_id>
<tag_creator>...</tag_creator>
<dependency>...</dependency>
<component_of>...</component_of>
</software_identification_tag>
SWID-тег компонентов поставляется в составе rpm/deb-пакетов соответствующих компонентов, входящих в дистрибутив продукта. К файлам как для продукта, так и для компонентов разрешен только доступ на чтение (444).
Ключевые элементы и их назначение
Назначение | Элемент | Описание и Содержание | Пример |
|---|---|---|---|
Версионирование |
| Версия продукта фиксируется в этом теге. Включает имя версии ( |
|
Идентификация и права |
| Наименование продукта |
|
- | Идентификатор разработчика. Участник процесса создания ПО |
| |
- | Идентификатор владельца авторского права. Лицензиар |
| |
- | Кто создал SWID-тег (может совпадать с |
| |
- | Уникальный идентификатор текущей версии. Содержит |
| |
- |
|
| |
- | Уникальный идентификатор родительского продукта, к которому относится модуль (только для компонентов) |
| |
Зависимости |
| Список зависимостей. Внутри в ключе |
|
Пример сформированного SWID-тег файла для компонента
<?xml version="1.0" encoding="utf-8"?>
<software_identification_tag
xmlns="http://standards.iso.org/iso/19770/-2/2009/schema.xsd"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xsi:schemaLocation="http://standards.iso.org/iso/19770/-2/2009/schema.xsd schema.xsd"
id="AAAAA"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<entitlement_required_indicator>false</entitlement_required_indicator>
<product_title>Platform V Pangolin DB</product_title>
<product_version>
<name>x.x.x</name>
<numeric>
<major>x</major>
<minor>x</minor>
<build>x</build>
<review>x</review>
</numeric>
</product_version>
<software_creator>
<name>SberTech</name>
<regid>regid.2021-12.ru.sbertech</regid>
</software_creator>
<software_licensor>
<name>SberTech</name>
<regid>regid.2021-12.ru.sbertech</regid>
</software_licensor>
<software_id>
<unique_id>psq-x.x.x</unique_id>
<tag_creator_regid>regid.2021-12.ru.sbertech</tag_creator_regid>
</software_id>
<tag_creator>
<name>SberTech</name>
<regid>regid.2021-12.ru.sbertech</regid>
</tag_creator>
<dependency>
<software_id>
<unique_id>audit-libs@3.0</unique_id>
<tag_creator_regid>regid.-.audit-libs</tag_creator_regid>
</software_id>
<software_id>
<unique_id>cpio@2.12</unique_id>
<tag_creator_regid>regid.-.cpio</tag_creator_regid>
</software_id>
<software_id>
<unique_id>xz-libs@5.2</unique_id>
<tag_creator_regid>regid.-.xz-libs</tag_creator_regid>
</software_id>
</dependency>
</software_identification_tag>
Формат имени SWID-тег файла для компонентов
Для каждого модуля используется собственный файл с уникальным суффиксом, например:
regid.2021-12.ru.sbertech_dbms-7.1.3.swidtag
regid.2021-12.ru.sbertech_dbcl-7.1.3swidtag
regid.2021-12.ru.sbertech_manager-20230101.swidtag
Имена формируются по шаблону:
regid.2021-12.ru.sbertech_<component_name>-<suffix>.swidtag
В качестве <suffix> может выступать версия продукта, номер сборки или дата.
Расположение файлов в дистрибутиве
| Компонент | Путь в файловой системе | Пример имени файла |
|---|---|---|
pangolin-dbms | /usr/pangolin-{short_version}/bin | regid.2021-12.ru.sbertech_dbms-{product_version}.swidtag |
pangolin-dbms-client | /usr/pangolin-dbms-client-{short_version}/bin | regid.2021-12.ru.sbertech_dbcl-{product_version}.swidtag |
pangolin-manager | /opt/pangolin-manager/bin | regid.2021-12.ru.sbertech_mngr-{version_component}.swidtag |
pangolin-ansible-venv-controller | /opt/pangolin-ansible-venv-controller/bin | regid.2021-12.ru.sbertech_vctr-{version_component}.swidtag |
Формат SWID-тег файла для компонента аналогичен SWID-тег файлу для продукта за исключением того, что добавлен ключ <component_of></component_of>, куда записывается уникальный идентификатор родительского продукта. Ключ <software_id> содержит два идентификатора создателя тега: <unique_id> — уникальный ID в рамках родительского продукта, и <tag_creator_regid> — регистрационный ID создателя.
Все SWID-теги располагаются в архиве owned-distrib.zip и после распаковки получают права доступа 444 (только чтение).
Практический пример чтения через xmlstarlet
xmlstarlet sel -t \
-m "//product_title" -v "." -n \
-m "//product_version/name" -v "." -n \
-m "//software_id/unique_id" -v "." -n \
-m "//dependency/software_id" -v "unique_id" -o " -> " -v "tag_creator_regid" -n \
/opt/pangolin-dbms/bin/regid.2021-12.ru.sbertech_dbms-7.2.0.swidtag
Вывод
Platform V Pangolin DB
x.x.x
psq-x.x.x -> regid.2021-12.ru.sbertech
audit-libs@3.0 -> regid.-.audit-libs
cpio@2.12 -> regid.-.cpio
openssl@1.1.1 -> regid.-.openssl
...
- Всегда проверяйте права
444. Если они отличаются — потенциально изменились метаданные. - Валидация по схеме перед парсингом способствует обеспечению корректности данных.
- Зафиксируйте
<unique_id>в базе, любое новое значение указывает на выпуск новой версии. - Автоматизируйте импорт — вынесите процесс в отдельный скрипт/модуль, чтобы он вызывался каждый раз при установке/обновлении.
- Синхронизируйте с лицензионным сервером — при
<entitlement_required_indicator="true">автоматически проверяйте наличие лицензии в FlexNet / Sentinel. - Сохраняйте историю — храните старые SWID-файлы в отдельном репозитории (Git) для восстановления предыдущих версий.
Общий алгоритм использования
Работа со SWID-тег файлами включает восемь типовых этапов: поиск файлов с атрибутом доступа 444на файловой системе, валидация соответствия XML-схеме, извлечение метаданных (product_title, product_version, unique_id, dependency и других), интеграция полученных данных в централизованные системы инвентаризации, проверка соответствия лицензионных требований через entitlement_required_indicator, обработка зависимостей с построением графа взаимосвязей компонентов, сопоставление уникальных идентификаторов с базами уязвимостей для оперативного реагирования, а также аудит целостности путем контроля атрибутов доступа к файлам.
Таким образом, SWID-тег — стандартизированный XML-файл, описывающий продукт, его версию, лицензию, создателя и зависимости.
Он гарантирует:
- Единый идентификатор (
<unique_id>). - Возможность быстрого аудита и реагирования на уязвимости.
Для использования необходимо найти файл, убедиться в валидности, извлечь метаданные, загрузить их в инвентарь, сопоставить с лицензиями и базами уязвимостей, построить граф зависимостей и регулярно проверять права доступа.
При соблюдении описанных шагов и рекомендаций вы получаете полностью контролируемую, проверяемую и совместимую информацию о каждом компоненте программного продукта, что упрощает эксплуатацию, аудит и поддержку в любой ИТ-среде.