利用SCAP有效进行主机安全管理(二)
2013-10-25王珩诸葛建伟
文/王珩 诸葛建伟
上一期我们向大家介绍了什么是SCAP、与SCAP相关的开源工具,以及如何利用SCAP和开源工具对系统进行安全性扫描。但是,我们不能满足于使用现有的SCAP资源,如果想让SCAP发挥更大的作用,我们需要进一步了解SCAP,去开发适合自身需求的SCAP Content。本文将对SCAP进行深入的探索,了解其技术细节并指导大家如何利用开源工具开发SCAP。
表1 XCCDF Rule数据结构
图1 XCCDF文档层次结构
SCAP技术细节
SCAP给安全评估带来标准化的同时,也提供了一个开放的平台。任何人都可以按照SCAP Protocol所指定的规范开发新的SCAP Content。开发SCAP Content之前,我们需要对每一种SCAP Element的文件格式进行了解,并应当清楚它们如何在一个完整的SCAP Content中进行交互。SCAP的核心是语言类Element,即XCCDF和OVAL,对SCAP的深入探索过程中将把它们作为重点进行介绍。
XCCDF技术细节
XCCDF文档使用XML格式表述,由Benchmark、Profile、Group、Rule、Check、Value等元素构成,以树的方式进行组织,如图1所示。树的最底层为Rule和Value,这两个元素表达了XCCDF文档中最细节的内容,每个Rule为一个检查项,而Value指定了检查过程中可能需要使用到的可变参数。Group用于将Rule和Value按照一定的逻辑关系组合成多个类别,Group可以嵌套,形成多级的结构。Profile用于完成检查单的组合和裁剪工作,在Profile中使用select标记选择一个或多个Rule id,构成包含多个Rule的检查单,一个Profile对应一张检查单,根据需要,一个XCCDF文档可以包含多个Profile。树的根节点是固定的,为Benchmark,根节点的属性中保存了一些XCCDF文档的基本属性数据。
(1)XCCDF Rule(XCCDF规则)
Rule是XCCDF中描述检查项的最细节内容,但它并没有定义检查项与系统交互的技术细节,这些技术细节是在OVAL文档中定义的,XCCDF Rule中只是定义了一个指向OVAL文档特定部分的指针(即OVAL Definition id)。常见的Rule内容如表1所示。
通常,Rule ID会被多个Profile引用。这种机制使得在一个XCCDF基准测试(Benchmark)文档中能够描述多个检查单,而且检查内容能够根据需求方便地裁剪和组织,更加有利于上层规范(如FISMA、ISO27001等)到底层技术细节(OVAL定义)的落地。
(2)XCCDF Value(XCCDF取值)
XCCDF文档支持由用户自定义变量的值取值,使用Value元素来表达。表2是一个Value元素的示例数据,它定义了用户的最短口令长度策略,在Operator(操作)中定义了进行合规判定时使用的操作符,本例中为Greater than or equal(大于或等),也就是说如果系统现有值大于或等于测试时使用的标准值,那么判定结果是合规的。检查单的使用者可直接对这些值进行修改,或在Profile中使用refine-value定义一个新的值,以适应不同环境中的不同需求。
(3)典型的XCCDF文档片段
下面展示了FDCC 1.2.1.0版的关于Windows XP系统配置描述的XCCDF文档的整体结构,由于篇幅有限,我们只保留了能表明其整体架构的片段,并在其中加入了相关的说明性文字。通过这段XML代码,更能够加深我们对XCCDF文档结构的理解。
表2 XCCDF Value数据结构
图2 OVAL文档层次结构
图3 OVAL Definition层次结构
OVAL文档提供了一种机器可读的对系统进行安全评估的操作指南,它可用来描述系统的配置信息、分析系统的安全状态、报告评估结果等。典型的OVAL文件由Definition(定义)、Test(测试)、Object(对象)、State(状态)和Variable(变量)等要素构成,其文档结构相对XCCDF来说比较简单,主要是将各个要素以枚举的方式列出,如图2所示。
OVAL技术细节
Definition是OVAL中最重要的组成元素,它会引用一个或多个Test,根据Test的结果综合判定整体的结果,Test引用Object和State与系统交互并得出检查结果,State可以使用固定值或引用Variable中的变量。Definition、Test、State、Object和Variable各要素之间的逻辑关系如图3所示。在图3中,Definition1包含两个Test,假设其判定标准为如果两个Test均为True,那么整个Definition结果为True。例如,如果Test1测试结果为True,Test2测试结果为False,根据Definition1中的判定条件Test1=True AND Test2=True,整个Definition的测试结果为False。
(1)OVAL Definition(OVAL定义)
OVAL Definition用于描述如何对某一特定安全问题进行检查,通常一个OVAL文档中包含多个Definition。目前,主要有四类Definition: Vulnerability(漏洞),描述如何根据系统状态判定系统中是否存在某个特定漏洞;Patch(补丁),与Vulnerability类似,但它更关注如何判定系统中是否安装了某个特定补丁;Inventory(软件),描述如何对系统中是否安装了某个特定的软件进行判定;Compliance(合规),描述如何对系统是否满足某个特定的配置要求进行判定。表3 OVAL Definition数据结构是一个OVAL Definition的示例数据。
(2)OVAL Test(OVAL测试)
Test通过定义一组Object和State来执行测试,OVAL Test的数据结构如表4所示,而图3则较为清晰地表达了Test中Object和State是如何相互配合执行测试的。
(3)OVAL Object(OVAL对象)
Object指明系统中用于测试的对象,由于OVAL中的Object分为多种类型,每种类型的Object数据结构各不相同,如下面是一个passworkpolicy_object的定义,可以看出系统策略类的Object只需要指明一个id即可被解释器识别:
下面是一个registry_object的定义,可以看到注册表类Object需要指明注册表Hive、注册表路径和注册表项目名称:
表3 OVAL Definition数据结构
表4 OVAL Test数据结构
(4)OVAL State(OVAL状态)
State指明用于测试的对象的状态值,同Object类似,State也分为多种类型,每种类型的State数据结构不相同,下面是一个passwordpolicy_state的定义:
下面是一个registry_state的定义,用来识别注册表中获取的值能与字符串“Windows 7”相匹配,可以在Value中使用正则表达式以更好的完成字符串匹配工作。
可以看出,State中可以使得var_ref引用一个Variable对象表示State的值,或者直接将值写入到value节点中。
(5)OVAL Variable(OVAL变量)
Variable定义了执行测试时State所需的值,其有三种类型:constant_variable(常量)、local_variable(本地变量)和external_variable(外部变量)。Constant_variable定义一个不能在运行时改变的值,local_variable定义在OVAL中直接使用的值,而external_variable通常用于将XCCDF的Value值传递到OVAL中。下面是一个external类型的Variable定义:
(6)典型的OVAL文档片段
下面展示了USGCB 1.2.0.0版的用于Windows 7系统基线配置检查的OVAL文档的片段,通过这段XML代码,更能够加深我们对OVAL文档结构的理解。
其它标准在XCCDF与OVAL中的融合
(1)CVE/CCE/CPE
在每个XCCDF Rule中均可以包含一个或多个ident元素,可在其中指出CVE、CCE或CPE标识的参考数据。如果Rule中包含OVAL Definition的链接,那么ident中所指的CVE、CCE及CPE参考应当与OVAL Definition中的参考一致。在XCCDF Rule中,ident使用system属性指出参考数据的类型,如果Rule包含OVAL Definition的链接,那么OVAL Definition的类型应当与system属性相适应。表5列出了XCCDF中ident元素的使用方法。
下面是一段用于检查系统配置的XCCDF Rule中使用ident的示例:
(2)CVSS/CCSS
由于CVSS的基础评分(base score)经常会根据系统环境的不同而发生变化,因此XCCDF文档中并不直接引用CVSS。在CVE中,会包含对CVSS的引用。而CCSS则没有此类问题,因此在XCCDF中,可以直接在Rule节点的weight属性中引用CCSS的值(0到10)。下面是在XCCDF Rule中使用CCSS的示例:
eSCAPe开源项目
eSCAPe全称是Enhanced SCAP Editor(增强的SCAP编辑器)是一个基于Java的跨平台SCAP内容编辑器,可以从其官方网站http://www.g2-inc.com/escape下载最新版的eSCAPe。
eSCAPe支持XCCDF和OVAL两种语言,我们不需要了解过多的SCAP技术细节便能轻松地使用eSCAPe轻松地创建或编辑SCAP内容。
在使用eSCAPe之前,需要计算机上安装了JVM,我们可以从Oracle网站获取Java Runtime Environment程序。环境准备就绪后,Windows用户运行startEditor.bat,Linux用户运行startEditor.sh启动编辑器。
下面演示如何制作一个简单的SCAP Content。首先点击Wizard-Driven启动向导。第一步需要我们选择OVAL版本,定义OVAL命名空间标识,并选择创建的OVAL Definition类型。需要注意的是,不同版本的OVAL语言格式会有所差别,请根据你的OVAL解释器的版本选择,否则可能会造成OVAL解析错误。
点击Go!按钮后,会出现编辑OVAL的对话框。在Title处输入“To Test Windows Version is 6.1(测试Windows版本为6.1)”,在What is to be tested(测试对象)处选择“Value of hivekey ame(注册表值)”,在Registry Hive(注册表Hive)处选择“HKEY_LOCAL_MACHINE”,然后将内容填写完整后点击Next。
此时编辑器提示我们选择文件保存位置,这里可以指定一个新的oval文件,或使用已有的OVAL文件,如果是已有文件,刚刚编辑的OVAL Definition会自动添加到旧文件中。需要注意文件名的格式必须是*-oval.xml。
保存完成后,eSCAPe会为我们自动生成两个文件:winver-oval.xml和winver-xccdf.xml,下面我们便能使用OVALDi对刚刚创建的OVAL文件进行验证了,将生成的winveroval.xml文件复制到OVALDi的目录中,运行如下命令:
可以看到我们制作的OVAL文件被OVALDi成功地解析并执行了扫描。
使用Wizard-Driven模式能让我们在不了解SCAP技术细节的情况下轻松地生成 SCAP内容,不过如果想要对SCAP内容进行更加深入的调整,需要使用功能更加丰富的Standard模式,读者可自行尝试。
表5 XCCDF Rule中的XCCDF Ident
SCAP在中国
目前,国内一些机构也开始了对SCAP及相关标准的研究与采纳。目前各大安全厂商的产品开始了对诸如CVE、CVSS等标准的集成,国家信息中心在对FDCC等美国政府安全基线充分调研的基础上提出了我国政务终端桌面核心配置(CGDCC),期望能够借助SCAP提升政府终端计算机的安全防护能力。
清华大学网络与信息安全实验室亦对SCAP及其系列标准有较为深入的研究,并在SCAP协议的基础上提出了NetSCAP,即网络化的SCAP协议。NetSCAP充分利用SCAP标准化、自动化、资源丰富等优势,实现了基于开放分类的SCAP内容存储方案,将零散的SCAP资源有效组织成有机整体,能够灵活地生成适应不同防护需求的安全基线检查单。此外,NetSCAP在已有开源SCAP扫描工具的基础上,实现了一套网络化基线管理框架,实现了集中的SCAP内容分发、终端控制、检查结果上报分析等功能。
本文对SCAP的技术细节以及如何生成SCAP Content进行了详细的介绍。由于SCAP开放性、标准化的思想,其在信息安全分析、评估领域占有举足轻重的地位,希望有更多的人能够加入到SCAP研究、采纳和发展的工作中来,让它在我国的信息安全领域发挥更重要的作用。