Перейти к основному содержимому

Структура и алгоритм обработки SWID-тег

Согласно данной технологии, продукту присваивается уникальный идентификатор (тег), который позволяет единообразно и достоверно идентифицировать продукт и его владельца.

Теги используются учетными системами для получения информации об используемом в организации ПО, определения его количества, проверки на соответствие лицензионному соглашению, установке зависимостей и так далее. Информация из тегов позволяет однозначно понять, кто является производителем и/или владельцем продукта для обращения при сбоях или других вопросах, связанных с эксплуатацией продукта. Производитель на основании информации из тега может убедиться, что речь идет действительно о принадлежащем ему продукте.

Стандарт

SWID (Software Identifier) — открытый международный стандарт, разработанный под ISO/IEC 19770‑2:2009, в России закрепленный в ГОСТ Р ИСО/МЭК 19770-2-2014. Он описывает XML-схему для однозначной идентификации программного продукта, его компонентов и их взаимосвязей.

Функции и возможности SWID-тег

  1. Единый идентификатор. Каждому продукту присваивается уникальный <unique_id>, по которому можно отслеживать его версии.
  2. Учет лицензий. Поле <entitlement_required_indicator> указывает, требуется ли лицензия. Данные можно сравнить с лицензионным реестром.
  3. Управление зависимостями. Блок <dependency> содержит список всех требуемых компонентов. Его содержимое используется для построения графа зависимостей.
  4. Аудит и безопасность. Сравнение <unique_id> с базами CVE позволяет находить уязвимости. Права 444 устанавливают режим «только чтение», предотвращая модификацию SWID-тега и сохраняя целостность метаданных для корректной сверки.
  5. Обнаружение сбоев. Тег хранит идентификаторы создателя и лицензиара. Это упрощает обращение в поддержку при инцидентах.
Обозначения

  • {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).

Ключевые элементы и их назначение

Назначение

Элемент

Описание и Содержание

Пример

Версионирование

<product_version>

Версия продукта фиксируется в этом теге. Включает имя версии (<name> в формате major.minor.patch) и числовые составляющие (<major>, <minor>, <build>)

<name>6.4.0</name> и <major>6</major><minor>3</minor>...

Идентификация и права

<product_title>

Наименование продукта

Platform V Pangolin DB

- <software_creator>

Идентификатор разработчика. Участник процесса создания ПО

<name>SberTech</name><regid>regid.2021-12.ru.sbertech</regid>

- <software_licensor>

Идентификатор владельца авторского права. Лицензиар

<name>SberTech</name><regid>regid.2021-12.ru.sbertech</regid>

- <tag_creator>

Кто создал SWID-тег (может совпадать с <software_creator>)

<name>SberTech</name>

- <software_id>

Уникальный идентификатор текущей версии. Содержит <unique_id> – строковое представление psq-major.minor.patch. Ссылка на версию

<unique_id>psq-7.2.0</unique_id>

- <entitlement_required_indicator>

true – требуется лицензия; false – лицензия не нужна

false

- <component_of>

Уникальный идентификатор родительского продукта, к которому относится модуль (только для компонентов)

regid.2021-12.ru.sbertech_dbms

Зависимости

<dependency>

Список зависимостей. Внутри в ключе <software_id> прописываются <unique_id> зависимого ПО и <tag_creator_regid>

<dependency> <software_id> <unique_id>audit-libs@3.0</unique_id>...

Пример сформированного 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}/binregid.2021-12.ru.sbertech_dbms-{product_version}.swidtag
pangolin-dbms-client/usr/pangolin-dbms-client-{short_version}/binregid.2021-12.ru.sbertech_dbcl-{product_version}.swidtag
pangolin-manager/opt/pangolin-manager/binregid.2021-12.ru.sbertech_mngr-{version_component}.swidtag
pangolin-ansible-venv-controller/opt/pangolin-ansible-venv-controller/binregid.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
...
Важно
  1. Всегда проверяйте права 444. Если они отличаются — потенциально изменились метаданные.
  2. Валидация по схеме перед парсингом способствует обеспечению корректности данных.
  3. Зафиксируйте <unique_id> в базе, любое новое значение указывает на выпуск новой версии.
  4. Автоматизируйте импорт — вынесите процесс в отдельный скрипт/модуль, чтобы он вызывался каждый раз при установке/обновлении.
  5. Синхронизируйте с лицензионным сервером — при <entitlement_required_indicator="true"> автоматически проверяйте наличие лицензии в FlexNet / Sentinel.
  6. Сохраняйте историю — храните старые SWID-файлы в отдельном репозитории (Git) для восстановления предыдущих версий.

Общий алгоритм использования

Работа со SWID-тег файлами включает восемь типовых этапов: поиск файлов с атрибутом доступа 444на файловой системе, валидация соответствия XML-схеме, извлечение метаданных (product_title, product_version, unique_id, dependency и других), интеграция полученных данных в централизованные системы инвентаризации, проверка соответствия лицензионных требований через entitlement_required_indicator, обработка зависимостей с построением графа взаимосвязей компонентов, сопоставление уникальных идентификаторов с базами уязвимостей для оперативного реагирования, а также аудит целостности путем контроля атрибутов доступа к файлам.

Таким образом, SWID-тег — стандартизированный XML-файл, описывающий продукт, его версию, лицензию, создателя и зависимости.

Он гарантирует:

  • Единый идентификатор (<unique_id>).
  • Возможность быстрого аудита и реагирования на уязвимости.

Для использования необходимо найти файл, убедиться в валидности, извлечь метаданные, загрузить их в инвентарь, сопоставить с лицензиями и базами уязвимостей, построить граф зависимостей и регулярно проверять права доступа.

При соблюдении описанных шагов и рекомендаций вы получаете полностью контролируемую, проверяемую и совместимую информацию о каждом компоненте программного продукта, что упрощает эксплуатацию, аудит и поддержку в любой ИТ-среде.