6.2. 典型的合规策略

安全策略或者合规策略很少从头开始编写。ISO 27000系列标准,衍生产品,以及其他来源提供的安全策略模板和实践建议应该对启动编写有所帮助。然而,各机构组织在建立自己的安全程序时,需要对策略模板做修改,以便与他们自己的需求相匹配。策略模板选择的依据应该是挑选那些与企业环境相关联的模板,然后必须针对该模板进行调整,因为该模板要么包含了一些不能被应用于组织中的内置假定,要么明确的要求必须做出某些决定。
红帽企业版 Linux 的审核功能是基于 SCAP (安全内容自动化协议)标准的。SCAP 是一种综合的可互操作的规范,这种规范对格式与术语进行了标准化,通过这种标准化的规范向人类和机器传达软件缺陷以及安全配置信息。SCAP 是一种多用途的框架规范,它支持自动化配置、漏洞和补丁检查、技术控制达标活动以及安全性度量。
换句话说,SCAP 是一个独立于供应商外用于表达安全策略的方式,因此它被广泛的应用于现代企业中。 SCAP 的规格打造了一个生态系统,其中安全性内容的格式著名且标准,同时扫描或者策略编辑的执行也不是强制性的。这种状态使得企业或者机构一旦建立起他们自己的安全策略(含SCAP内容),就无需在意他们究竟雇佣了多少安全提供商。
SCAP 的最新版本包含了几个基本标准。这些组件根据他们自身的功能在 SCAP 内部被整理成组,如下所述:

SCAP 组件

  • 语言 — 这组由 SCAP 语言组成,为表达合规策略定义了标准的词汇和约定。
    • 拓展配置清单描述格式 (XCCDF) — 一种为表达、组织和管理安全指导的语言。
    • 开放脆弱性和评估语言 (OVAL) — 一种被开发出来为已经过扫描的系统执行逻辑声明的语言。
    • 开放清单互动语言 (OCIL) — 一种被设计用来为查询用户提供标准方法,解读用户对于给定问题的反馈的语言。
    • 资产识别 (AI) — 一种被开发用于提供数据模型、研究方法以及引导鉴别安全资产的语言。
    • 资产报告格式 (ARF) — 一种经过设计的语言,主要用来表达信息的传输格式,而这些信息则包含了收集好的安全资源,以及资源和安全报告之间的关系。
  • 列举 — 本组包含 SCAP 标准定义的命名格式,以及从某些与安全相关领域利益相关而产生的项目的官方清单或者字典。
    • 普通参数列举 (CCE) — 一种为应用程序和操作系统的安全相关的配置元素所列出的枚举。
    • 普通平台列举 (CPE) — 一种结构化的命名方案,通常用来识别信息技术(IT)系统、平台以及软件包。
    • 普通漏洞与危险性 (CVE) — 一种可用于参考公开的软件漏洞与风险集的方法。
  • 度量 — 这组由一系列框架组成,用于识别和评估安全风险。
    • 普通参数划分系统(CCSS) — 一种用于评估与安全相关的配置元素的度量系统,同时它也可以以打分的方式帮助用户优先考虑适当的应对措施。
    • 普通漏洞划分系统 (CVSS) — 一种用于评估软件安全隐患的度量系统,同时它也可以以打分的方式帮助用户优先应对安全风险。
  • 完整性 — 一种维护 SCAP 内容与扫描结果完整性的 SCAP 规范。
    • 信任模型的安全自动化数据 (TMSAD) — 一组建议,这些推荐解释了现有规范的使用方法,在安全自动化领域里的 XML 文件上下文环境中,用来代表签名、哈希值、关键信息以及身份信息。
每个 SCAP 组件都有自己的基于 XML 的文档格式及 XML 名称空间。一个 SCAP 中所表达的合规策略既可以采用单个 OVAL 定义的 XML 文件、数据流文件和单个 zip 档案的方式,又可以采用一组各自包含表示策略清单的 XCCDF 文件的 XML 文件集这样的方式。

6.2.1. XCCDF 文件格式

XCCDF 语言被设计为支持信息交换、文档生成、组织化和情境化调整、自动一致性测试以及符合性评分。该语言主要是描述性质的,并不包含任何用来执行安全扫描的命令。然而,XCCDF 文档可以作为其他 SCAP 组件的参考,而且就其本身而言,它也可以被用于制作合规策略,移植到除相关的评估文档(OVAL、 OCIL)以外的所有目标平台。
通常,可以用一组 XML 文件中包含一个 XCCDF 清单的方法来表示合规策略。该 XCCDF 文件通常指向了评估资源、多重 OVAL,OCIL 以及脚本检查引擎(SCE)文件。此外,该文件集可以包含有 CPE 字典文件和为此字典定义了对象的 OVAL 文件。
作为一种基于 XML 的语言,XCCDF 定义并使用了大量可供选择的 XML 元素以及特性。下表简要介绍了主要的 XCCDF 元素;有关 XCCDF 更多的细节,请查阅 NIST跨机构报告7275 第 4修订版.

XCCDF 文档中的主要 XML 元素

  • <xccdf:Benchmark> — 这是一个涵盖整个 XCCDF 文档的根元素。它也可以包含清单的元数据,例如标题、描述、作者列表、最近修改日期以及清单验收状态。
  • <xccdf:Rule> — 这是一个关键元素,这个元素代表了清单的需求,同时保留了它的描述。它可以包含子元素,这些子元素定义了使用给定的规则验证或者执行合规性的动作,或者干脆修改这条规则自身。
  • <xccdf:Value> — 该关键元素被用于表达其他 XCCDF 元素处于基准范围内的属性。
  • <xccdf:Group> — 该元素被用于整理成一个XCCDF 文档,在相同环境下或者需求领域内,通过收集 <xccdf:Rule><xccdf:Value><xccdf:Group> 元素的方式,该元素将整理生成的 XCCDF 文档组合成架构。
  • <xccdf:Profile> — 该元素为 XCCDF 基准的一个指定的调整服务。它允许基准保留数个不同的调整。<xccdf:Profile> 利用多个选择器元素,例如 <xccdf:select> 或者 <xccdf:refine-rule>,去判断即将修改和处理哪些正处于生效状态的元素。
  • <xccdf:Tailoring> — 该元素允许从基准外部定义基准档案,这在某些时候是很理想的合规策略手工调整。
  • <xccdf:TestResult> — 该元素用于记录目标系统上对于给定基准的扫描结果。每一个 <xccdf:TestResult> 都应该参考特定的资料,这些资料被用来定义为特定的扫描而制定的合规策略,而且它也包括与扫描密切相关的目标系统的重要信息。
  • <xccdf:rule-result> — 这是 <xccdf:TestResult> 的一个子元素,用于保存从基准到目标系统应用特定规则的结果。
  • <xccdf:fix> — 这是 <xccdf:Rule> 的一个子元素,用于修复那些不符合给定规则的目标系统。它可以包含一个运行在目标系统中的命令或者脚本,这个命令或脚本为了使系统符合规则而设计。
  • <xccdf:check> — 这是 <xccdf:Rule> 的一个子元素,是一个外部来源,这个外部来源定义了如何评估给定的规则。
  • <xccdf:select> — 这是一个选择器元素,用于包括或者排除选定的规则或者策略中的规则组。
  • <xccdf:set-value> — 这是一个选择器元素,用于重写指定<xccdf:Value> 元素的当前值,而并不修改该元素的其他属性。
  • <xccdf:refine-value> — 这是一个选择器元素,用于在策略调整过程中具体说明特定 <xccdf:Value> 元素的约束。
  • <xccdf:refine-rule> — 这个选择器元素允许重写选定规则的属性。

例 6.1. XCCDF 文件示例

        
<?xml version="1.0" encoding="UTF-8"?>
<Benchmark xmlns="http://checklists.nist.gov/xccdf/1.2"
    id="xccdf_com.example.www_benchmark_test">
  <status>incomplete</status>
  <version>0.1</version>
  <Profile id="xccdf_com.example.www_profile_1">
    <title>Profile title is compulsory</title>
    <select idref="xccdf_com.example.www_group_1" 
        selected="true"/>
    <select idref="xccdf_com.example.www_rule_1" 
        selected="true"/>
    <refine-value idref="xccdf_com.example.www_value_1"
        selector="telnet service"/>
  </Profile>
  <Group id="xccdf_com.example.www_group_1">
    <Value id="xccdf_com.example.www_value_1">
      <value selector="telnet_service">telnet-server</value>
      <value selector="dhcp_servide">dhcpd</value>
      <value selector="ftp_service">tftpd</value>
    </Value>
    <Rule id="xccdf_com.example.www_rule_1">
      <title>The telnet-server Package Shall Not Be Installed </title>
      <rationale>
        Removing the telnet-server package decreases the risk
        of the telnet service’s accidental (or intentional) activation
      </rationale>
      <fix platform="cpe:/o:redhat:enterprise_linux:6" 
          reboot="false" 
          disruption="low" 
          system="urn:xccdf:fix:script:sh">
        yum -y remove 
        <sub idref="xccdf_com.example.www_value_1"/>
      </fix>
      <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
        <check-export value-id="xccdf_com.example.www_value_1" 
            export-name="oval:com.example.www:var:1"/>
        <check-content-ref href="examplary.oval.xml" 
            name="oval:com.example.www:def:1"/>
      </check>
      <check system="http://open-scap.org/page/SCE">
        <check-import import-name="stdout"/>
        <check-content-ref href="telnet_server.sh"/>
      </check>
    </Rule>
  </Group>
</Benchmark>        

6.2.2. OVAL 文件格式

OVAL(开放式漏洞评估语言)是 SCAP 中必不可少的和最初始的组成部分。OVAL 标准的主要目标是开启安全产品之间的互通互用能力。这由下面三个领域的标准化实现:
  1. 目标系统配置的表现。
  2. 为特定机器状态的存在而对目标系统所做的分析。
  3. 报告指定机器状态和受观测机器状态之间的比较结果。
有别于其他工具或者自定义脚本,OVAL 语言以声明的形式描述了资源的理想状态。OVAL 语言代码不能被直接执行,而是依靠一个叫做 扫描软件的 OVAL 解释工具去执行。OVAL 所具备的声明性质保证了受评估系统的状态不会被意外地改变,这一点是非常重要的,因为安全扫描工具通常运行在可能获取的最高权限上。
OVAL 规范对公众意见与贡献、各类与 MITRE 合作的 IT 公司,以及由联邦政府资助的非营利组织开放。OVAL 规范一直在持续地进化中,不同版本间通过版本号进行区分。当前版本5.10.1发布于2012年1月。
类似所有其他的 SCAP 组件,OVAL 基于 XML 。OVAL 标准定义了几种文档格式。它们各自包含了不同种类的信息,服务于不同的目的。

OVAL 文档格式

  • OVAL Definitions 格式是最常见的 OVAL 文件格式,直接用于系统扫描。OVAL定义文档描述了目标系统的理想状态。
  • OVAL Variables 格式定义了一些变量用于修改 OVAL 定义文档。OVAL 变量文档通常与 OVAL 定义文件一起使用,以调整目标系统在运行时的安全内容。
  • OVAL System Characteristics 格式保存有关评估系统的信息。OVAL 系统特性文档通常用于实际系统状态与 OVAL 定义文档中所定义的预期状态进行比对。
  • OVAL Results 是用来报告系统评估结果的最全面的 OVAL 格式。OVAL 结果文档通常包括受评估 OVAL 定义的副本、受约束的 OVAL 变量、OVAL 系统特性以及经过计算的基于系统特性和定义的测试结果。
  • OVAL Directives 格式通过包括或者排除某些细节的方式对 OVAL 结果文档中的冗余部分加以调整。
  • OVAL Common Model 格式包含了用于其他几种 OVAL 方案中的构造和枚举的定义。它被用来再次利用 OVAL 定义,这样就可以避免在多个文档中发生重复的现象。
OVAL定义文档由一组配置需求所组成,每组需求在以下五个基本层面做了定义:定义测试目标声明, 和 变量。 定义部分内的元素描述了哪些测试应该被实现以便满足给定的定义。测试元素将对象与状态联系在了一起。在系统评估过程中,当一个受评估系统的资源可以用给定对象元素符合给定状态元素来表示,那么这个测试就会被认为是通过的。 变量部分定义了外部变量,这些外部变量可能被用于调整来自状态部分的元素。除了这些部分以外, OVAL 定义文档通常也包括 发生器签名 部分。发生器 部分保存有关文档来源的信息以及各种与自身内容相关的额外信息。
每一种 OVAL 文档基础部分中的元素都可以明确地通过下表中的标识符进行识别:
oval:namespace:type:ID
namespace 是一个由命名空间定义的标识符 type 要么是定义元素 def ,要么是测试元素的 tst ,要么是对象元素 obj ,要么是状态元素 ste ,要么是变量元素 var ,而且ID 是标识符的一个整数值。

例 6.2. OVAL 定义文档示例

          
<?xml version="1.0" encoding="utf-8"?>
<oval_definitions
    xmlns:lin-def="http://oval.mitre.org/XMLSchema/oval-definitions-5#linux"
    xmlns:oval="http://oval.mitre.org/XMLSchema/oval-common-5"
    xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <generator>
    <oval:product_name>vim</oval:product_name>
    <oval:schema_version>5.10.1</oval:schema_version>
    <oval:timestamp>2012-11-22T15:00:00+01:00</oval:timestamp>
  </generator>
  <definitions>
    <definition class="inventory" 
        id="oval:org.open-scap.cpe.rhel:def:7" 
        version="1">
      <metadata>
        <title>Red Hat Enterprise Linux 7</title>
        <affected family="unix">
          <platform>Red Hat Enterprise Linux 7</platform>
        </affected>
        <reference ref_id="cpe:/o:redhat:enterprise_linux:7" 
            source="CPE"/>
        <description>
          The operating system installed on the system is Red Hat Enterprise Linux 7
        </description>
      </metadata>
      <criteria>
        <criterion comment="Red Hat Enterprise Linux 7 is installed" 
            test_ref="oval:org.open-scap.cpe.rhel:tst:7"/>
      </criteria>
    </definition>
  </definitions>
  <tests>
    <lin-def:rpminfo_test check_existence="at_least_one_exists" 
        id="oval:org.open-scap.cpe.rhel:tst:7" 
        version="1" 
        check="at least one" 
        comment="redhat-release is version 7">
      <lin-def:object object_ref="oval:org.open-scap.cpe.redhat-release:obj:1"/>
      <lin-def:state state_ref="oval:org.open-scap.cpe.rhel:ste:7"/>
    </lin-def:rpminfo_test>
  </tests>
  <objects>
    <lin-def:rpmverifyfile_object id="oval:org.open-scap.cpe.redhat-release:obj:1" 
        version="1">
      <!-- This object represents rpm package which owns /etc/redhat-release file -->
      <lin-def:behaviors nolinkto='true' 
          nomd5='true' 
          nosize='true' 
          nouser='true' 
          nogroup='true' 
          nomtime='true' 
          nomode='true' 
          nordev='true' 
          noconfigfiles='true' 
          noghostfiles='true' />
      <lin-def:name operation="pattern match"/>
      <lin-def:epoch operation="pattern match"/>
      <lin-def:version operation="pattern match"/>
      <lin-def:release operation="pattern match"/>
      <lin-def:arch operation="pattern match"/>
      <lin-def:filepath>/etc/redhat-release</lin-def:filepath>
    </lin-def:rpmverifyfile_object>
  </objects>
  <states>
    <lin-def:rpminfo_state id="oval:org.open-scap.cpe.rhel:ste:7" 
        version="1">
      <lin-def:name operation="pattern match">^redhat-release</lin-def:name>
      <lin-def:version operation="pattern match">^7[^\d]</lin-def:version>
    </lin-def:rpminfo_state>
  </states>
</oval_definitions>

6.2.3. 数据流格式

SCAP 数据流是一种文件格式,自 SCAP 1.2 版本起开始使用,它代表了 XCCDF、OVAL 还有其他组件文件组成的包,可以被用来定义一个由 XCCDF 清单所表达的合规策略。它还包含一个索引和目录,允许按照 SCAP 组件把已知数据流分解成为文件。
数据流使用 XML 格式,包含了一个由一整个表的内容所构成的数据头以及一系列 <ds:component> 元素。每一个元素均包含一个 SCAP 组件,例如 XCCDF、OVAL、CPE 以及其他。数据流文件可以包含相同类型的多个组件,并且因此可以覆盖到所有您您的企业所需要的安全策略。

例 6.3. 一个数据流头示例

        
<ds:data-stream-collection xmlns:ds="http://scap.nist.gov/schema/scap/source/1.2" 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
    xmlns:cat="urn:oasis:names:tc:entity:xmlns:xml:catalog" 
    id="scap_org.open-scap_collection_from_xccdf_ssg-rhel7-xccdf-1.2.xml"
    schematron-version="1.0">
  <ds:data-stream id="scap_org.open-scap_datastream_from_xccdf_ssg-rhel7-xccdf-1.2.xml" 
      scap-version="1.2" use-case="OTHER">
  <ds:dictionaries>
    <ds:component-ref id="scap_org.open-scap_cref_output--ssg-rhel7-cpe-dictionary.xml" 
        xlink:href="#scap_org.open-scap_comp_output--ssg-rhel7-cpe-dictionary.xml">
      <cat:catalog>
        <cat:uri name="ssg-rhel7-cpe-oval.xml" 
            uri="#scap_org.open-scap_cref_output--ssg-rhel7-cpe-oval.xml"/>
      </cat:catalog>
    </ds:component-ref>
  </ds:dictionaries>
  <ds:checklists>
    <ds:component-ref id="scap_org.open-scap_cref_ssg-rhel7-xccdf-1.2.xml" 
        xlink:href="#scap_org.open-scap_comp_ssg-rhel7-xccdf-1.2.xml">
      <cat:catalog>
        <cat:uri name="ssg-rhel7-oval.xml" 
            uri="#scap_org.open-scap_cref_ssg-rhel7-oval.xml"/>
      </cat:catalog>
    </ds:component-ref>
  </ds:checklists>
  <ds:checks>
    <ds:component-ref id="scap_org.open-scap_cref_ssg-rhel7-oval.xml" 
        xlink:href="#scap_org.open-scap_comp_ssg-rhel7-oval.xml"/>
    <ds:component-ref id="scap_org.open-scap_cref_output--ssg-rhel7-cpe-oval.xml" 
        xlink:href="#scap_org.open-scap_comp_output--ssg-rhel7-cpe-oval.xml"/>
    <ds:component-ref id="scap_org.open-scap_cref_output--ssg-rhel7-oval.xml" 
        xlink:href="#scap_org.open-scap_comp_output--ssg-rhel7-oval.xml"/>
  </ds:checks>
</ds:data-stream>
<ds:component id="scap_org.open-scap_comp_ssg-rhel7-oval.xml"
    timestamp="2014-03-14T16:21:59">
  <oval_definitions xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5" 
      xmlns:oval="http://oval.mitre.org/XMLSchema/oval-common-5" 
      xmlns:ind="http://oval.mitre.org/XMLSchema/oval-definitions-5#independent" 
      xmlns:unix="http://oval.mitre.org/XMLSchema/oval-definitions-5#unix" 
      xmlns:linux="http://oval.mitre.org/XMLSchema/oval-definitions-5#linux" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://oval.mitre.org/XMLSchema/oval-common-5 
      oval-common-schema.xsd 
          http://oval.mitre.org/XMLSchema/oval-definitions-5 
      oval-definitions-schema.xsd
          http://oval.mitre.org/XMLSchema/oval-definitions-5#independent 
      independent-definitions-schema.xsd
          http://oval.mitre.org/XMLSchema/oval-definitions-5#unix 
      unix-definitions-schema.xsd
          http://oval.mitre.org/XMLSchema/oval-definitions-5#linux 
      linux-definitions-schema.xsd">