XCCDF — это спецификационный язык на основе XML для описания контрольных листов настроек безопасности (security configuration checklists) и других подобных документов. XCCDF является одним из языков Протокола автоматизации контента безопасности (Security Content Automation Protocol, SCAP). XCCDF — важный инструмент для специалистов, связанных с автоматизацией процессов информационной безопасности. На этом языке описаны, к примеру, обязательные требования по настройке рабочих станций федеральных агентств США и их контрагентов (программа FDCC/USGCB). В этой статье мы рассмотрим, каким образом описываются контрольные листы настроек безопасности на языке XCCDF — на примере USGCB-контента для RedHat Enterprise Linux.
Документ XCCDF состоит из одного или несколько правил XCCDF. Правило — это высокоуровневое представление технической проверки системы. Например: «Минимальная длина пароля пользователя поля должна составлять 12 символов». Рассмотрим это правило на языке XCCDF:
<Rule id="usgcb-rhel5desktop-rule-2.3.1.7.a" selected="false" weight="10.0"
prohibitChanges="false" abstract="false" hidden="false" role="full" severity="unknown">
<status date="2010-07-01">accepted</status>
<version update="1"/>
<title override="0">CCE-4154-1:Set password minimum length</title>
<description xml:lang="en-US" override="0">The password minimum length should be set
appropriately</description>
<ident system="cce.mitre.org">CCE-4154-1</ident>
<check system="oval.mitre.org/XMLSchema/oval-definitions-5" selector="">
<check-export value-id="usgcb-rhel5desktop-var-2.3.1.7.a"
export-name="oval:gov.nist.usgcb.rhel:var:20071"/>
<check-content-ref href="usgcb-rhel5desktop-oval.xml"
name="oval:gov.nist.usgcb.rhel:def:20071"/>
</check>
</Rule>
Правило XCCDF непосредственно не описывает, как именно должна проводиться проверка. Вместо этого в нем содержится ссылка на другие XML-документы (например, определения OVAL), которые, в свою очередь, содержат актуальные инструкции по выполнению этой проверки. Подробнее о языке OVAL мы рассказывали в статье «OVAL®, или «миф об идеальном сканере»».
В рассматриваемом примере правило XCCDF ссылается на определение OVAL c идентификатором oval:gov.nist.usgcb.rhel:def:20071. Передача требуемого значения проверяемого параметра осуществляется через переменные. Значение переменной XCCDF usgcb-rhel5desktop-var-2.3.1.7.a передается во внешнюю переменную OVAL oval:gov.nist.usgcb.rhel:var:20071 (передаваемое значение равно 12). Ниже мы покажем, каким образом происходит инициализация этой переменной XCCDF.
В заголовке правила XCCDF присутствует подстрока ССЕ-4154-1 — номер проверки в рамках Единой нумерации конфигураций (Common Configuration Enumeration, CCE). Эта нумерация позволяет вести единый реестр вопросов, связанных с конфигурированием систем.
Параметр weight (весовой коэффициент) характеризует важность правила XCCDF; по умолчанию его значение равно 1. Весовые коэффициенты используются при расчете итоговой метрики, определяющей соответствие состояния системы требованиям стандарта.
Стоит обратить внимание на способ нумерации правил ХCCDF (в нашем случае это номер 2.3.1.7.a). Нумерация правил XCCDF повторяет нумерацию пунктов «бумажного» стандарта. Кроме того, соответствие между стандартом на бумаге и его представлением в виде XCCDF достигается путем группировки правил XCCDF. Группы XCCDF могут содержать в себе одно или несколько правил или групп.
Группа, в которую входит правило usgcb-rhel5desktop-var-2.3.1.7.a будет иметь вид:
<Group id="usgcb-rhel5desktop-group-2.3.1.7" hidden="false" prohibitChanges="false"
abstract="false" selected="true" weight="1.0">
<title xml:lang="en-US" override="0">Set Password Expiration Parameters</title>
<description xml:lang="en-US" override="0"> Edit the file /etc/login.defs to specify
password expiration settings for new accounts.
…
</description>
<Value id="usgcb-rhel5desktop-var-2.3.1.7.a" type="string" operator="equals"
prohibitChanges="false" abstract="false" hidden="false" interactive="0">
<title xml:lang="en-US" override="0">minimum password length</title>
<description xml:lang="en-US" override="0">Minimum number of characters in
password</description>
<warning override="0" category="general">This will only check new
passwords</warning>
<value selector="">14</value>
<value selector="6">6</value>
<!-- NIST 800-53 requires 1 in a million using brute force which translates to six
numbers -->
<value selector="8">8</value>
<value selector="10">10</value>
<value selector="12">12</value>
<value selector="14">14</value>
</Value>
<Rule id="usgcb-rhel5desktop-rule-2.3.1.7.a" selected="false" weight="10.0"
prohibitChanges="false" abstract="false" hidden="false" role="full" severity="unknown">
<status date="2010-07-01">accepted</status>
<version update="1"/>
<title override="0">CCE-4154-1:Set password minimum length</title>
<description xml:lang="en-US" override="0">The password minimum length should be
set appropriately</description>
<ident system="cce.mitre.org">CCE-4154-1</ident>
<check system="oval.mitre.org/XMLSchema/oval-definitions-5" selector="">
<check-export value-id="usgcb-rhel5desktop-var-2.3.1.7.a"
export-name="oval:gov.nist.usgcb.rhel:var:20071"/>
<check-content-ref href="usgcb-rhel5desktop-oval.xml"
name="oval:gov.nist.usgcb.rhel:def:20071"/>
</check>
</Rule>
<Rule id="usgcb-rhel5desktop-rule-2.3.1.7.b" selected="false" weight="10.0"
prohibitChanges="false" abstract="false" hidden="false" role="full" severity="unknown">
…
</Rule>
<Rule id="usgcb-rhel5desktop-rule-2.3.1.7.c" selected="false" weight="10.0"
prohibitChanges="false"
...
</Rule>
<Rule id="usgcb-rhel5desktop-rule-2.3.1.7.d" selected="false" weight="10.0"
prohibitChanges="false"
...
</Rule>
</Group>
В этом примере следует обратить внимание на то, как группируются правила XCCDF, и на то, как инициализируются значения переменных XCCDF. В группу usgcb-rhel5desktop-group-2.3.1.7 помимо уже рассмотренного правила usgcb-rhel5desktop-rule-2.3.1.7.a входят также правила usgcb-rhel5desktop-rule-2.3.1.7.b, usgcb-rhel5desktop-rule-2.3.1.7.c, usgcb-rhel5desktop-rule-2.3.1.7.d. Конкретное значение переменной выбирается в зависимости от значения селектора, ассоциированного с переменной.
Правила XCCDF документа могут быть организованы в профили. Профили можно использовать для того, чтобы описать несколько политик внутри одного документа XCCDF. Профиль содержит список правил, которые применимы для данного стандарта, а также значения селекторов, которые необходимы для определения соответствия состояния системы требованиям стандарта.
Профиль для правила usgcb-rhel5desktop-var-2.3.1.7.a будет иметь вид:
<Profile id="united_states_government_configuration_baseline" abstract="false"
prohibitChanges="false">
<title xml:lang="en-US" override="0">United States Government Configuration
Baseline 1.0.5.0</title>
<description xml:lang="en-US" override="0">This profile represents guidance
outlined in United States Government Configuration Baseline for desktop
systems with Redhat Enterprise Linux 5 installed.</description>
…
<select idref="usgcb-rhel5desktop-rule-2.3.1.7.a" selected="true"/>
<refine-value idref="usgcb-rhel5desktop-var-2.3.1.7.a" selector="12"/>
…
</Profile>
Таким образом, в профиле «united_states_government_configuration_baseline» должно выполняться правило 2.3.1.7.a с селектором «12».
Общая структура документа XCCDF представлена на рис. 1.
Рисунок 1. Структура документа XCCDF
Итак, документ XCCDF представляет собой структурированный набор правил конфигурации безопасности для некоторого набора целевых систем.
Полная информация о структуре XCCDF содержится в спецификации XCCDF и спецификации SCAP.
Автор: avleonov