刘迎龙 郭荣华 吴 迪 苗泉强
(中国人民解放军63891部队 河南洛阳 471003)
在针对信息系统开展信息安全测试的过程中,信息安全测试用例是对测试活动的科学化组织与归纳,体现了测试的方案、方法、技术和策略.由于在测试组织、过程和技术等方面存在一定的不确定性、测试设计人员能力和水平也不同等原因,导致设计的信息安全测试用例优劣程度参差不齐,直接影响了系统信息安全测试结果的客观性和有效性.信息安全测试用例库是网络安全测试用例的集合,是以测试用例的形式对系统信息安全测试知识进行组织,可为测试过程、测试方法和测试用例的复用提供支撑,进而减缓组织、过程、技术及人员能力水平等方面的不确定性对网络安全测试结果的影响.
因此,本文旨在研究信息安全测试用例的知识表示形式,实现系统信息安全测试知识集合的有效表示,进而构建系统信息安全测试用例库模型,为系统信息安全测试用例库的构建与应用提供指导方法.本体是实现知识共享的有效工具之一,是对领域内共享概念模型的形式化规范说明[1].在系统信息安全测试知识表示中引入本体理论,可统一领域内概念和概念关系层次结构,增强测试用例知识表示的规范性、一致性和扩展性,进而实现测试用例库的共享、重用和互操作[2].
目前,还没有一个完善的系统信息安全测试用例库.文献[3-4]主要从攻击角度出发,分别构建了攻击案例库模型和网络攻击知识库模型.文献[5]围绕漏洞信息建立了漏洞库,但知识库内容单一.文献[6]从防御角度出发,针对网络威胁情报的不同描述规范,建立了基于结构化威胁情报表达(structured threat information expression, STIX)V2.0[7]的本体模型,并对其领域本体、应用本体和原子本体进行详细划分.但在系统信息安全测试活动中,需要从第三方角度对测试相关要素进行组织,而攻击知识、威胁情报等只与测试用例的部分要素相关,其构建的模型不能体现测试用例知识的全部要素与特点.在文献[8]建立的抗攻击能力测评模型中,从攻击组织、攻击组织能力、被保护对象出发给出系统威胁测试用例的定义,但该定义偏重于威胁,没有涵盖安全测试的全部要素.文献[9]围绕软件测试用例复用,建立了软件测试用例库,在一定程度上提高了测试用例复用的质量.但由于软件测试与系统信息安全测试在目的、方法、领域上存在较大差异,该构建方法不适用于系统信息安全测试用例库的构建.
本文在深入研究信息系统信息安全测试理论技术基础上,对信息安全测试用例进行形式化表示,并结合本体在知识共享方面的应用特点,构建基于本体的信息安全测试用例库模型.最后根据信息安全测试用例实例,分析如何基于本文模型进行信息安全测试知识的获取与表示.
信息安全测试用例表示就是把以往的信息安全测试用例以一定的逻辑结果进行表述,并存储在测试用例库中,构成信息系统信息安全测试用例库.本文将信息安全测试用例库形式化定义为
(1)
其中,C1,C2表示信息安全测试用例之间的关系,R1,R2表示信息安全测试用例库索引规则.
一个信息安全测试用例是对一个信息安全测试科目的完整表示.一个基本的信息安全测试用例主要由用例名称、用例描述(测试对象、测试目标)、参试设备、测试环境、方法步骤、测试数据和结果判定等要素组成.因此,本文将信息安全测试用例形式化定义为
(2)
其中,CN表示测试用例名称,作为测试用例在测试用例库的唯一标识;CDesc表示测试用例描述,包括测试用例的各种描述信息,如测试对象、测试目标、测试内容、测试类型等;TEquip表示参试装备,包括该测试科目所需的测试设备、被试系统、测试设备和环境构建系统等;TEnv表示测试环境,描述了各参试装备如何连接、布局,系统、软件如何部署安装等;TStep表示测试步骤,为该用例的执行步骤,以分步形式描述了测试的过程,在每个步骤描述了具体的配置、操作,包括操作的主体、客体和内容等信息;TData表示测试数据,主要指测试环境配置数据及测试过程中需要记录的用作最后结果评判的数据;EResult表示期望结果,用作与实际结果进行对比的基准.
依据上述定义,系统信息安全测试用例的组成要素可分为对象域、方法域和数据域,其组成结构关系如图1所示:
图1 系统信息安全测试用例结构
对象域主要描述安全测试用例中的角色,包括测试主体、测试对象和测试环境3个组件.
1) 测试主体.
测试主体是指在系统信息安全测试活动中针对测试对象开展安全测试活动的主体,是测试用例的发起者,包括发起测试活动的测试人员、测试设备/软件、采集设备等.
2) 测试对象.
测试对象是指在系统信息安全测试中被试系统内部被测试的部分,是测试用例的作用对象,包括被试系统的硬件、软件、链路和数据等.
3) 测试环境.
测试环境是指在系统信息安全测试中执行测试用例的环境,包括测试主体运行支撑环境和测试场景等.
方法域主要描述测试用例中的方法类元素,主要包括测试主体操作和测试对象操作,通过测试操作刺激测试主体、测试对象和测试环境产生响应,生成测试数据.
1) 测试主体操作.
测试主体操作是指测试人员、测试设备/软件等针对测试对象及测试环境采取的方法、技术和过程.
2) 测试对象操作.
测试对象操作主要指被试装备在测试用例执行过程中,针对测试主体的测试行为所采取的方法、技术和过程,其作用对象为测试主体与测试环境.
测试数据域主要描述测试用例执行过程中测试主体、测试对象、测试环境状态属性及相应的变化情况,测试数据域主要包括测试数据和测试结果2个组件.
1) 测试数据.
测试数据是测试用例执行过程中能够反映测试主体、测试对象、测试环境状态属性及其变化的数据、事件等,包括场景数据、过程数据、结果数据等.
2) 测试结果.
测试结果是对测试用例的测试目标是否达到的判定,测试结果以测试数据为依据,结合结果判定规则生成测试结果.本文从测试用例达成的测试效果出发,将测试结果分为2类,即安全防护功能测试结果和安全防护性能测试结果.
在上述定义的信息安全测试用例形式化表示的基础上,本文通过应用本体这一知识共享工具,构建信息安全测试用例本体模型,实现信息安全测试用例知识的共享.
在计算机及相关领域,本体指应用本体论的基本方法,即通过概念分析、建模,把现实世界中的实体抽象为一组概念与概念之间关系的理论和方法.本体的构建[10-14]是指对某个特定领域的概念和关系按某种层次结构进行分层刻画,通过基于本体的知识表示方法来组织和表达不同类型的知识,利用形式化的知识表示方法获取知识语义信息的过程.本体建模首先要确定本体的应用领域,然后针对该领域抽象出领域概念,确立概念间的层次关系,进而构建领域知识本体模型.
本文围绕系统信息安全测试用例相关概念,利用本体技术构建信息安全测试用例概念模型,实现信息测试用例知识的共享.信息安全测试用例本体构建流程如图2所示.
图2 信息安全测试用例本体构建流程
针对系统信息安全测试用例领域知识本体表述局部层次化的特点,本文从领域本体、应用本体和原子本体3个层次对信息安全测试用例本体进行建模,三者之间的关系如图3所示:
图3 信息安全测试用例本体层次关系
信息安全测试用例领域本体主要用于描述信息安全测试用例所需的概念和关系,信息安全测试用例领域本体包含7个子类:测试主体、测试环境、测试对象、测试数据、测试结果、测试主体操作、测试对象操作.信息安全测试用例概念之间的关系包括7种:执行、刺激、响应、生成、表征、支撑、影响,如图4所示.
图4 信息安全测试用例领域本体
应用本体是对领域本体的进一步描述,根据上述对信息安全测试用例领域子类的划分,可对各领域的子本体作进一步的表述:
1) 测试主体子领域应用本体包括测试人员、测试设备、采集设备等;
2) 测试对象子领域应用本体包括硬件、软件、链路、数据等;
3) 测试环境子领域应用本体包括测试支撑环境和测试业务场景等;
4) 测试主体操作子领域应用本体包括操作目标、操作条件、操作过程等;
5) 测试对象操作子领域应用本体包括网络防护、节点防护、数据防护等;
6) 测试数据子领域应用本体包括流量数据、事件数据、场景信息等;
7) 测试结果子领域应用本体包括安全防护功能测试结果、安全防护性能测试结果.
信息安全测试用例领域本体与应用本体之间为包含关系,其应用本体如图5所示:
图5 信息安全测试用例应用本体
信息安全测试用例原子本体是可以直接用于描述测试用例实体概念的声明,是对应用本体实例化,是本体论中最小的不可分割的概念,因测试人员不可再分,所以没有原子本体.
1) 测试主体原子本体.
测试主体原子本体是测试用例的发起者,本文将测试主体分为测试人员、测试设备和采集设备.其中:测试人员应用本体不可再分,其原子本身即为测试人员本身;测试设备包括基础测试设备、应用安全测试设备、协议安全测试设备和硬件安全测试设备;采集设备包括网络信息采集设备、节点信息采集设备.
2) 测试对象原子本体.
测试对象原子本体是被试系统中测试用例作用的对象,本文将安全测试对象分为硬件、软件、链路和数据.其中硬件包含安全设备(如IDS、防火墙等)、交换设备(如路由器、交换机等)、计算存储设备(如主机、服务器等)等;软件包括操作系统、通用平台软件(如数据库平台、网络服务软件、办公软件等)、业务软件等;链路包括链路的功能、性能等;数据包括系统数据和业务数据.
3) 测试环境原子本体.
测试环境原子本体是信息安全测试用例执行所需的环境,本文将测试环境分为测试支撑环境和测试业务环境.其中测试支撑环境主要包括网络环境、主机环境;测试业务环境主要包括测试应用业务环境和测试背景业务环境.
4) 测试主体操作原子本体.
测试主体操作原子本体是信息安全测试用例执行过程中测试主体对测试对象及测试环境采取的方法、技术和过程.本文将测试主体操作分为测试目标、测试条件和测试过程.其中测试目标为测试最终所要达到的效果,包括权限获取、服务窃取、服务增加、拒绝服务、系统错误、信息欺骗、口令窃取、信息泄露和信息篡改;测试条件为操作执行的前提,包括权限(指操作成功执行时,需要获取的目标系统权限)、环境(指操作成功执行时目标对象环境应满足的条件)和情报(指操作成功执行时需要掌握的目标系统情报信息);操作过程包括安全检查(主要指安全配置、安全预案等内容的检查)、信息收集(主要指主动/被动收集环境与对象的信息,包括扫描、监听等手段)、概率攻击、非法注入、突破访问控制、欺骗攻击、滥用攻击、操控数据和操控系统资源等.
5) 测试对象操作原子本体.
测试对象操作原子本体主要指被试系统在测试用例执行过程中,针对测试主体的测试行为采取的方法、技术和过程.本文将测试对象操作分为网络防护、节点防护、数据防护.其中网络防护包括网络隔离、网络安全审计、网络访问控制、网络入侵防护、网络接入控制等;节点防护包括系统安全配置、主机防病毒、应用安全配置、节点访问控制等;数据安全防护操作包括加密存储、加密传输、备份恢复等.
6) 测试数据原子本体.
测试数据原子本体主要指测试用例执行过程中能够反映测试主体、测试对象、测试环境状态属性及其变化的数据和事件等.本文将测试数据分为场景数据、过程数据和结果数据.其中:场景数据指测试用例执行过程中的静态数据,包括外部场景数据(如情报、知识信息等)、内部场景数据(包括配置信息、漏洞信息、资产数据等);过程数据主要是测试用例执行过程中对象的状态、各类事件、流量等信息,包括流量统计信息、网络数据包、节点状态、安全防护事件、系统事件、应用服务事件等;结果数据为测试设备的检测结果数据,包括基础测试结果(如网络基准性能、极限性能检测结果等)、安全配置核查结果、代码审查结果、漏洞扫描结果、漏洞挖掘结果等.
7) 测试结果原子本体.
测试结果原子本体是对测试用例的测试目标是否达到的判定.本文将测试结果分为安全防护功能测试结果和安全防护性能测试结果.其中安全防护功能失效测试结果包括身份认证功能失效、访问控制功能失效、数据完整性功能失效、数据保密性功能失效、抗抵赖性功能失效、安全审计功能失效;安全防护性能测试结果包括准确性降低和效率降低等.
本节以某Web应用系统对SQL注入的防护能力测试为例,根据上述定义的基于本体的测试用例模型,对该实例进行案例化表示,以验证模型的有效性.
由于SQL注入有可能造成信息泄露,严重情况下(根据使用的数据库而定)甚至可能造成数据修改、删除,从而导致业务中断[15].因此必须发现所有已存在的注入点.针对SQL注入防护的测试可以采用手工注入测试和工具自动化注入测试.在测试过程中,构建如图6所示的测试环境,其中Web应用运行正常,用户能够正常访问Web应用提供的服务,测试人员利用Pangolin工具,对存在参数输入的待测目标URL执行SQL注入测试,并通过Web代理和测试工具检查目标页面响应结果,查看是否存在SQL注入漏洞.
图6 SQL注入测试环境布局
根据构建的信息安全测试用例本体模型,从测试主体、测试对象、测试环境、测试主体操作、测试客体操作、测试数据、测试结果7个方面对上述案例进行描述,如图7所示.
图7 SQL注入测试用例描述
从上述信息安全测试用例表示过程可知,通过利用本体表示模型能够对测试用例知识进行统一规范的表示,可有效支撑测试案例的扩展与复用.如果将测试主体中的Pangolin测试工具替换为Google Chrome浏览器,则可以执行手工注入测试.
本文从测试用例的角度对系统信息安全测试用例进行了研究,结合测试用例表示的通用方法,给出了信息安全测试用例的形式化定义,继而构建了信息安全测试用例领域知识本体模型,为构建一个共享、重用、可扩展的信息安全实验测试用例库,实现信息安全测试用例自动化生成提供支撑.最后,通过对Web应用安全测试用例进行测试知识获取,验证了基于本体的信息安全测试用例库模型的正确性与有效性.