什么是开放式漏洞与评估语言(OVAL)

OVAL全称是Open Vulnerability and Assessment Language(开放式漏洞与评估语言)。本文介绍了什么是OVAL语言、OVAL语言的结构、组成OVAL文档各个元素的技术细节等内容。本文为原创内容,如果需要转载请注明出处。

本文原文链接地址为:http://oval.scap.org.cn/article_oval_about-oval.html
SCAP中文社区包含大量OVAL定义的解析,详细内容见:http://oval.scap.org.cn/index.html

OVAL由MITRE公司开发,是一种用来定义检查项、脆弱点等技术细节的一种描述语言。OVAL同样使用标准的XML格式组织其内容。它提供了足够的灵活性,可以用于分析Windows、Linux、Unix以及各种嵌入式操作系统的系统状态、漏洞、配置、补丁等情况,而且还能用于描述测试报告。OVAL能够清晰地对与安全相关的检查点作出描述,并且这种描述是机器可读的,能够直接应用到自动化的安全扫描中。OVAL的核心是“公开”(Open),这就意味着任何人都可以为OVAL的发展作出自己的贡献,共享知识和经验,避免重复劳动。 实际上XCCDF设计的目标是能够支持与多种基础配置检查技术交互。其中推荐的,默认的检查技术是MITRE公司的OVAL。在实际的SCAP应用中,XCCDF和OVAL往往是成对出现,XCCDF定义检查单,而OVAL定义每个检查项的具体实施细节。

OVAL以XML格式描述,包含如下几种XML格式(Schema):OVAL定义格式(OVAL Definition Schema),OVAL系统特性格式(OVAL System Characteristics Schema)与OVAL结果格式(OVAL Result Schema)。OVAL系统特性格式用于描述系统信息快照,该快照可用于和OVAL定义文件进行匹配以得出评估结果,OVAL结果格式用于描述评估结果。

在三种OVAL格式中,OVAL定义格式占有较为重要的位置,OVAL定义格式提供了一种机器可读的对系统进行安全评估的操作指南,它可用来描述系统的配置信息、分析系统的安全状态、报告评估结果等。典型的OVAL定义格式的XML文档由定义(Definition)、测试(Test)、对象(Object)、状态(State)和变量(Variable)等要素构成,其结构比较简单,主要是将各个要素以枚举的方式列出,如图1所示。

 

OVAL语言架构示意图​​
​图1 OVAL语言架构示意图

 

 

“定义”是最重要的构成元素,它会引用一个或多个“测试”,根据“测试”的结果综合判定整体的结果,“测试”使用“对象”和“状态”与系统交互并得出检查结果,“状态”可以使用固定值或引用“变量”中的值。OVAL各组成要素之间的逻辑关系如图 2。在图 2中,Definition1包含两个“测试”Test1和Test2,假设其判定标准为AND的逻辑关系,那么如果两个Test均为True,整个Definition1结果为True。举例来说,如果Test1测试结果为True,Test2测试结果为False,根据Definition1中的判定条件Test1=True AND Test2=True,整个Definition的测试结果为False。

 

OVAL定义层次结构​​
​图2 OVAL定义层次结构
  • OVAL定义

“定义”(Definition)用于描述如何对某一特定安全问题进行检查,通常一个OVAL文档中包含多个“定义”。主要有四类定义,分别是漏洞(Vulnerability):描述如何根据系统状态判定系统中是否存在某个特定漏洞;补丁(Patch):与漏洞定义类似,但它更关注如何判定系统中是否安装了某个特定补丁;软件(Inventory):描述如何对系统中是否安装了某个特定的软件进行判定;合规(Compliance):描述如何对系统是否满足某个特定的配置要求进行判定。表1是一个OVAL定义的示例数据。

表1 “OVAL定义”示例数据

规则字段

释义

示例数据

id

Definition的标识,必须是全局唯一的

oval:gov.nist.usgcb.winseven:def:7

version

Definition的版本

2

class

指定Definition的类别(漏洞、补丁、软件、合规等)

Compliance

metadata(元标记):

title

Definition的标题

Minimum Password Length

affected

会受到影响的操作系统或应用程序名称及版本

Microsoft Windows 7

references

此Definition与其它检查单或文档的映射关系

NIST SP800-68 Appendix A,1.4b

http://cce.mitre.org CCE-9357-5

description

Definition的描述

Minimum Password Length

Criteria(判定标准):

extend_definition definition_ref

另一个Definition的标识(当此Definition需要协同使用另一个Definition时)

oval:gov.nist.cpe.oval:def:1

extend_definition comment

一般用于指出协同使用上述Definition的原因,本例中是用于判定目标操作系统是否符合要求

Windows 7 is installed

criterion test_ref

此Definition所使用的Test的标识

oval:gov.nist.usgcb.winseven:tst:36

criterion comment

通常是一段人工可读的语言用于描述出上述Test的检测行为

Minimum Password Length is greater than or equal to the prescribed value

 

  • OVAL测试

“测试”(Test)通过定义一组OVAL对象(Object)和OVAL状态(State)执行,OVAL 测试的数据结构如表2所示,而图2则较为清晰地表达了OVAL测试中OVAL对象与OVAL状态是如何相互配合执行测试。

表2 “OVAL测试”数据结构

规则字段

释义

示例数据

测试类型

通过不同的节点名字表达不同的测试类型,如文件、注册表、策略等

passwordpolicy_test

id

此Test的唯一标识

oval:gov.nist.usgcb.winsseven:tst:36

version

Test的版本

2

check_existence

是否要求必需存在(如注册表键值)

at_least_one_exists

object_ref

此Test使用的Object的id

oval:gov.nist.usgcb.winseven:obj:27

state_ref

此Test使用的State的id

oval:gov.nist.usgcb.winseven:ste:33

 

  • OVAL对象

“对象”(Object)用来描述测试主体,由于测试主体类别众多(如注册表、组策略、文件、软件包等),因此Object的类型也很多,且每种类型的数据结构各不相同。下面是一个passworkpolicy_object的定义,可以看出系统策略类的OVAL对象只需要指明一个id即可被解释器识别:

<passwordpolicy_object id="oval:gov.nist.usgcb.windowsseven:obj:27" version="2"/>

下面是一个registry_object的定义,可以看到注册表类OVAL对象需要指明注册表Hive、注册表键和注册表项的名称:

<registry_object id="oval:gov.nist.usgcb.winseven:obj:16" version="2">
<hive>HKEY_LOCAL_MACHINE</hive>
<key>SOFTWARE\Policies\Microsoft\PCHealth\ErrorReporting\DW</key>
<name>DWAllowHeadless</name>
</registry_object>

 

  • OVAL状态

“状态”(State)用来描述测试主体的参考状态值,同OVAL对象类似,State也分为多种类型,每种类型的数据结构不相同,下面是一个passwordpolicy_state的定义:

<passwordpolicy_state id="oval:gov.nist.usgcb.winseven:ste:33" version="2">
<min_passwd_len operation="greater than or equal" datatype="int" var_ref="oval:gov.nist.usgcb.winseven:var:22"/>
</passwordpolicy_state>

可以在Value中使用正则表达式以更好的完成字符串匹配工作。下面是一个registry_state的定义,用来识别注册表中获取的值能与字符串“Windows 7”相匹配。

<registry_state id="oval:org.mitre.oval:ste:5027" version="4" comment="Matches with Windows 7">
<value operation="pattern match">
^[a-zA-Z0-9\(\)\s]*[Ww][Ii][Nn][Dd][Oo][Ww][Ss] 7[a-zA-Z0-9\(\)\s]*$
</value></registry_state>

可以看出,OVAL状态中可以使用var_ref引用一个OVAL变量表示OVAL状态的值,或者直接将值写入到value节点中。

 

  • OVAL变量

“变量”(Variable)定义了执行测试时State所需的值,其有三种类型:常量(constant_variable)、本地变量(local_variable)和外部变量(external_variable)。常量定义一个不能在运行时改变的值,本地变量定义在OVAL中直接使用的值,而外部变量通常用于将XCCDF的Value值传递到OVAL中。下面是一个外部变量的定义:

<external_variable comment="Minimum Password Length is greater than or equal to the prescribed value" datatype="int" id="oval:gov.nist.usgcb.winseven:var:22" version="2"></external_variable>

 

  • 典型的OVAL文档片段

下面展示了USGCB 1.2.0.0版的用于Windows 7系统基线配置检查的OVAL文档的片段。

<oval_definitions>
<!-- OVAL Definitions列表 -->
<definitions>
<definition id="oval:gov.nist.usgcb.windowsseven:def:1" version="2" class="compliance">
<metadata><title>Account Lockout Duration</title>……</metadata>
<criteria operator="AND">
<extend_definition comment="Windows 7 is installed" definition_ref="oval:gov.nist.cpe.oval:def:1"/>
<criteria operator="OR">
<criterion comment="Account Lockout Duration is set to …" test_ref="oval:gov.nist.usgcb.windowsseven:tst:60070"/>
……
</definition>
……
<!-- 以下是Test列表 -->
<tests>
<registry_test id="oval:org.mitre.oval:tst:10792" version="4" comment="Windows 7 is installed" check_existence="at_least_one_exists" check="at least one">
<object object_ref="oval:org.mitre.oval:obj:5590"/>
<state state_ref="oval:org.mitre.oval:ste:5027"/>
</registry_test>
......
<!-- 以下是Object列表 -->
<objects>
<registry_object id="oval:org.mitre.oval:obj:219" version="1" comment="Identifies the system root.">
<hive>HKEY_LOCAL_MACHINE</hive>
<key>SOFTWARE\Microsoft\Windows NT\CurrentVersion</key>
<name>SystemRoot</name>
</registry_object>
......
<!-- 以下是States列表(略) -->
<states>......</states>
<!-- 以下是Variable列表(略) -->
<variables>…</variables>

</oval_definitions>

希望了解更多OVAL语言的详细情况,请访问SCAP中文社区的OVAL分站: http://oval.scap.org.cn/index.html​
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值