OVAL
Описание
OVAL (Open Vulnerability and Assessment Language, Открытый язык описания и оценки уязвимостей) — декларативный язык логических утверждений. OVAL описывает уязвимости и необходимое состояние конфигурации системы. Код OVAL никогда не выполняется напрямую, а только с помощью инструмента-интерпретатора OVAL. Декларативная природа OVAL гарантирует, что состояние оцениваемой системы не будет случайно изменено, что важно, поскольку сканеры безопасности часто запускаются с максимально возможными привилегиями.
OVAL стандартизует 3 основных компонента процесса оценки:
- представление конфигурации целевой системы;
- анализ целевой системы на наличие заданного состояния машины (уязвимости, обновления, конфигурации и т.д.);
- представление отчёта о результатах сравнения указанного состояния машины и наблюдаемого состояния машины.
OVAL Definitions — это наиболее распространенный формат файлов OVAL, который используется непосредственно для сканирования системы. Документ OVAL Definitions описывает желаемое состояние целевой системы.
Документ OVAL Definitions представляет собой XML-файл и состоит из набора требований к конфигурации, где каждое требование определено в следующих базовых разделах: определения (definitions), тесты (tests), объекты (objects), состояния (states) и переменные (variables). Definitions содержит информацию об уязвимости, в блоке tests описываются проверки, в разделе objects перечисляются объекты проверок, а в разделе states описывается формальное условие теста, применяющееся к объектам.
OVAL в ОС «Альт»
Определения исправлений OVAL для ОС «Альт» доступны для p9 и более поздних версий. С помощью инструментов, совместимых с OVAL, эти определения можно использовать для проверки наличия уязвимостей.
Выгрузка OVAL по активным веткам репозитория (бранчам) доступна через открытое API https://rdb.altlinux.org/ (см. ALTRepo#Errata).
Пример
<oval_definitions xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5" xmlns:ind-def="http://oval.mitre.org/XMLSchema/oval-definitions-5#independent" xmlns:linux-def="http://oval.mitre.org/XMLSchema/oval-definitions-5#linux" xmlns:oval="http://oval.mitre.org/XMLSchema/oval-common-5" xmlns:oval-def="http://oval.mitre.org/XMLSchema/oval-definitions-5" xmlns:unix-def="http://oval.mitre.org/XMLSchema/oval-definitions-5#unix" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://oval.mitre.org/XMLSchema/oval-definitions-5#independent independent-definitions-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5#linux linux-definitions-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5#unix unix-definitions-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5 oval-definitions-schema.xsd http://oval.mitre.org/XMLSchema/oval-common-5 oval-common-schema.xsd">
<generator>
<oval:timestamp>2024-01-25T12:03:07</oval:timestamp>
<oval:product_name>ALT Linux Errata System</oval:product_name>
<oval:schema_version>5.11</oval:schema_version>
</generator>
<definitions>
<definition id="oval:org.altlinux.errata:def:20241130" version="oval:org.altlinux.errata:def:20241130" class="patch">
<metadata>
<title>ALT-PU-2024-1130: package `alterator-net-eth` update to version 5.2.6-alt1</title>
<affected family="unix">
<platform>ALT Linux branch p10</platform>
<product>ALT Server</product>
<product>ALT Virtualization Server</product>
<product>ALT Workstation</product>
<product>ALT Workstation K</product>
<product>ALT Education</product>
<product>Simply Linux</product>
<product>Starterkit</product>
</affected>
<reference ref_id="ALT-PU-2024-1130" ref_url="https://errata.altlinux.org/ALT-PU-2024-1130" source="ALTPU"/>
<description>This update upgrades alterator-net-eth to version 5.2.6-alt1. Security Fix(es): * #48920: Не записывается IP-адрес в /etc/systemd/network/alterator-enp0s3.network</description>
<advisory from="errata.altlinux.org">
<severity>Low</severity>
<rights>Copyright 2024 BaseALT Ltd.</rights>
<issued date="2024-01-25"/>
<updated date="2024-01-25"/>
<bugzilla id="48920" href="https://bugzilla.altlinux.org/48920">Не записывается IP-адрес в /etc/systemd/network/alterator-enp0s3.network</bugzilla>
<affected_cpe_list>
<cpe>cpe:/o:alt:kworkstation:10</cpe>
<cpe>cpe:/o:alt:workstation:10</cpe>
<cpe>cpe:/o:alt:server:10</cpe>
<cpe>cpe:/o:alt:server-v:10</cpe>
<cpe>cpe:/o:alt:education:10</cpe>
<cpe>cpe:/o:alt:slinux:10</cpe>
<cpe>cpe:/o:alt:starterkit:p10</cpe>
<cpe>cpe:/o:alt:kworkstation:10.1</cpe>
<cpe>cpe:/o:alt:workstation:10.1</cpe>
<cpe>cpe:/o:alt:server:10.1</cpe>
<cpe>cpe:/o:alt:server-v:10.1</cpe>
<cpe>cpe:/o:alt:education:10.1</cpe>
<cpe>cpe:/o:alt:slinux:10.1</cpe>
<cpe>cpe:/o:alt:starterkit:10.1</cpe>
<cpe>cpe:/o:alt:kworkstation:10.2</cpe>
<cpe>cpe:/o:alt:workstation:10.2</cpe>
<cpe>cpe:/o:alt:server:10.2</cpe>
<cpe>cpe:/o:alt:server-v:10.2</cpe>
<cpe>cpe:/o:alt:education:10.2</cpe>
<cpe>cpe:/o:alt:slinux:10.2</cpe>
<cpe>cpe:/o:alt:starterkit:10.2</cpe>
</affected_cpe_list>
</advisory>
</metadata>
<criteria operator="AND">
<criterion test_ref="oval:org.altlinux.errata:tst:2001" comment="ALT Linux must be installed"/>
<criteria operator="OR">
<criterion test_ref="oval:org.altlinux.errata:tst:20241130001" comment="alterator-net-eth is earlier than 0:5.2.6-alt1"/>
<criterion test_ref="oval:org.altlinux.errata:tst:20241130002" comment="hostname-hook-hosts is earlier than 0:5.2.6-alt1"/>
</criteria>
</criteria>
</definition>
</definitions>
<tests>
<textfilecontent54_test id="oval:org.altlinux.errata:tst:2001" version="1" check="all" comment="ALT Linux based on branch 'p10' must be installed">
<object object_ref="oval:org.altlinux.errata:obj:2001"/>
<state state_ref="oval:org.altlinux.errata:ste:2001"/>
</textfilecontent54_test>
<rpminfo_test id="oval:org.altlinux.errata:tst:20241130001" version="1" check="all" comment="alterator-net-eth is earlier than 0:5.2.6-alt1">
<object object_ref="oval:org.altlinux.errata:obj:20241130001"/>
<state state_ref="oval:org.altlinux.errata:ste:20241130001"/>
</rpminfo_test>
<rpminfo_test id="oval:org.altlinux.errata:tst:20241130002" version="1" check="all" comment="hostname-hook-hosts is earlier than 0:5.2.6-alt1">
<object object_ref="oval:org.altlinux.errata:obj:20241130002"/>
<state state_ref="oval:org.altlinux.errata:ste:20241130001"/>
</rpminfo_test>
</tests>
<objects>
<textfilecontent54_object id="oval:org.altlinux.errata:obj:2001" version="1" comment="Evaluate `/etc/os-release` file content">
<path datatype="string">/etc</path>
<filepath datatype="string">os-release</filepath>
<pattern datatype="string" operation="pattern match">cpe:\/o:alt:(?!sp)[a-z\-]+:p?(\d+)(?:\.\d)*</pattern>
<instance datatype="int">1</instance>
</textfilecontent54_object>
<rpminfo_object id="oval:org.altlinux.errata:obj:20241130001" version="1" comment="alterator-net-eth is installed">
<name datatype="string">alterator-net-eth</name>
</rpminfo_object>
<rpminfo_object id="oval:org.altlinux.errata:obj:20241130002" version="1" comment="hostname-hook-hosts is installed">
<name datatype="string">hostname-hook-hosts</name>
</rpminfo_object>
</objects>
<states>
<textfilecontent54_state id="oval:org.altlinux.errata:ste:2001" version="1" comment="verify distribution branch">
<subexpression operation="equals">10</subexpression>
</textfilecontent54_state>
<rpminfo_state id="oval:org.altlinux.errata:ste:20241130001" version="1" comment="package EVR is earlier than 0:5.2.6-alt1">
<evr datatype="evr_string" operation="less than">0:5.2.6-alt1</evr>
</rpminfo_state>
</states>
</oval_definitions>
Каждый элемент в базовых разделах документа OVAL однозначно идентифицируется идентификатором следующего вида:
oval:namespace:type:ID
где:
- namespace — это пространство имен, определяющее идентификатор;
- тип — тип элемента: def для элементов определений, tst для тестов, obj для объектов, ste для состояний и var для переменных;
- ID — целое значение идентификатора.
generator
Раздел generator содержит информацию о происхождении документа и различную дополнительную информацию, связанную с его содержанием:
<generator>
<oval:timestamp>2024-01-25T12:03:07</oval:timestamp>
<oval:product_name>ALT Linux Errata System</oval:product_name>
<oval:schema_version>5.11</oval:schema_version>
</generator>
definitions
Раздел definitions содержит информацию об уязвимости.
Основная информация подается в виде атрибутов тега 'definition:
- id="oval:org.altlinux.errata:def:20241130" — идентификационный номер определения (oval, созданный org.altlinux.errata; определение с номером 20241130);
- version="oval:org.altlinux.errata:def:20241130" — версия;
- class="patch" — класс, к которому принадлежит определение. Класс дает пользователю подсказку, чтобы он мог понять, что пытается сказать автор определения.
В теге metadata приводится общая информация, в том числе:
- title — строка, используемая для быстрой идентификации определения пользователем;
- affected — информация о системе(ах), для которой было написано определение (в примере продукты Альт на платформе p10);
- reference — связывает определение OVAL с внешней ссылкой. В примере содержится единственная ссылка https://errata.altlinux.org/ALT-PU-2024-1130 на закрытую ошибку (source="ALTPU"). Могут также содержаться ссылки на закрываемые уязвимости CVE, BDU, VULN (source="CVE", source="BDU"). Цель ссылки — связать определение со множеством других источников, посвященных той же проблеме, что и определение OVAL;
- description — описание уязвимости;
Метаданные предназначены только для информационных целей и не являются частью критериев, используемых для оценки состояния машины.
ALT-PU-2021-1234-5
| | | |
| | | + версия записи (1..N)
| | + уникальный в рамках года порядковый номер записи (1000..N)
| + год (2000...2999)
+ тип записи (PU — package update, BU — branch update, и др.)
В теге criteria описываются, объединенные логическими условиями, критерии и проверки для определения этой уязвимости. Условием являются блоки criteria с параметром логического условия operator, которые могут быть вложенными. При необходимости, здесь можно описать условие любой сложности. Ссылками на тест является блок criterion, указывающий на уникальный элемент типа test, содержащийся в данном OVAL-файле.
tests
Элементы раздела tests связывают объекты и состояния вместе. При оценке системы тест считается пройденным, когда ресурс оцениваемой системы, обозначаемый данным элементом объекта, соответствует данному элементу состояния.
Тесты возвращают результаты логического типа (true/false), поэтому определения также будут возвращать результаты булева типа.
Главная задача теста — сопоставление текущего состояния объекта с требуемым.
В данном примере содержится три теста, которые в свою очередь ссылаются на три объекта ("oval:org.altlinux.errata:obj:2001", "oval:org.altlinux.errata:obj:20241130001", "oval:org.altlinux.errata:obj:20241130002") и два состояния ("oval:org.altlinux.errata:ste:2001", "oval:org.altlinux.errata:ste:20241130001"). Для получения результатов теста нужно проверить все указанные объекты (check="all").
<tests>
<textfilecontent54_test id="oval:org.altlinux.errata:tst:2001" version="1" check="all" comment="ALT Linux based on branch 'p10' must be installed">
<object object_ref="oval:org.altlinux.errata:obj:2001"/>
<state state_ref="oval:org.altlinux.errata:ste:2001"/>
</textfilecontent54_test>
<rpminfo_test id="oval:org.altlinux.errata:tst:20241130001" version="1" check="all" comment="alterator-net-eth is earlier than 0:5.2.6-alt1">
<object object_ref="oval:org.altlinux.errata:obj:20241130001"/>
<state state_ref="oval:org.altlinux.errata:ste:20241130001"/>
</rpminfo_test>
<rpminfo_test id="oval:org.altlinux.errata:tst:20241130002" version="1" check="all" comment="hostname-hook-hosts is earlier than 0:5.2.6-alt1">
<object object_ref="oval:org.altlinux.errata:obj:20241130002"/>
<state state_ref="oval:org.altlinux.errata:ste:20241130001"/>
</rpminfo_test>
</tests>
Первый тест на факт установленного дистрибутива версии 10.х, второй тест на наличие установленного пакета alterator-net-eth с версией до 5.2.6-alt1, третий тест на наличие установленного пакета hostname-hook-hosts с версией до 5.2.6-alt1.
Таким образом, сложив указанные в критериях условия по логическим цепочкам можно получить необходимые условия для определения наличия уязвимости и выполнения условий определения. В данном примере уязвимость присутствует в дистрибутивах Альт 10.х с пакетом alterator-net-eth или hook-hosts с версией меньший, чем 5.2.6-alt1.
objects
Каждый элемент раздела objects предоставляет сведения, определяющие уникальный набор совпадающих элементов, которые будут использоваться тестом OVAL.
states
Компонент states задает требуемое состояние объекта. Состояние может быть задано статически или определяться через переменную.
variables
Раздел variables определяет внешние переменные, которые можно использовать для настройки элементов из раздела states.
Ссылки
https://oval.mitre.org/language/ https://oval-community-guidelines.readthedocs.io/en/latest/getting-started.html