基于业务数据变异的故障注入方法研究
2019-12-26丁冉丁峰周芳
丁冉 丁峰 周芳
随着我军信息系统正在向网络信息体系方向发展,系统结构由传统树状层次化向“云+端”模式转型,该使用模式在带来灵活、高效、便捷的同时,也带来了一些应用上的问题,云中资源一旦发生故障会影响网络上依赖此资源的系统运行.随着赛博对抗威胁日益严重,未来处于“云”端[1-2]的信息服务云环境,遭受赛博攻击、物理毁伤,发生节点失效、故障不可避免.因此,为了充分验证信息系统在复杂战场对抗环境下的自适应调整、自重构与任务持续保障等能力,亟需在试验环境下模拟云环境实际运行过程中可能出现的内部故障和外部威胁场景[2].
故障注入技术是信息系统可靠性验证中的关键技术,它是通过人为手段直接把故障引入目标系统中,加速目标系统发生故障和失效的过程[2].通过模拟强对抗战场环境,利用非法数据对军事信息系统进行攻击,从而检验系统能否在恶劣环境中持续稳定工作,进而不断完善抗毁顽存能力.非法数据生成的难点是: 构造的非法数据一方面要体现合法特征,能够通过软件输入进行校验,另一方面要保持足够非法特征,可以引发深层次缺陷.因此,如何高效生成“半合法数据”成为关键问题.
针对这一问题,提出了一种基于业务数据变异的故障注入方法,从已有功能测试脚本中自动提取业务系统输入数据的语法规格,结合能够体现特定威胁的变异特略,采用数据类型引导的自动生成算法从变异算子库中选择适合的变异算子,形成变异规则,最后将合法数据作为“种子”,逐一应用变异规则自动生成“半合法数据”,并将半合法数据自动注入系统.
1 基于业务数据变异的故障注入方法
从云环境故障注入的角度,从故障数据产生、故障注入[3-5]两方面,提出基于业务数据与环境变异的故障注入技术途径,向云环境与其他应用系统注入非法/异常业务数据,致使云环境中核心资源节点出现功能故障.技术途径如图1所示.
图1 基于业务数据变异的故障注入方法
业务数据变异是指将输入输出数据的内容变为非法/异常数据,环境变异是指改变被攻击对象的运行环境,包括服务器宕机或依赖服务失效等,从而造成被攻击对象故障.总体来说,业务数据变异和运行环境变异都是以变异算子库为核心的变异方法,具体实施过程分两步骤: 故障数据产生、故障注入.
1.1 故障数据产生
故障数据产生包括3 个阶段: 第1 阶段是从被测系统接口规格模型和测试数据中提取输入数据,生成数据模型,该数据模型能够严格反映被测系统的输入数据结构和取值约束; 第2 阶段是变异规则的生成,定义一系列接口变异算子及其相关的变异算子选择策略,变异规则的生成以数据模型为输入,在特定策略的指导下从变异算子库中选择适合的变异算子,从而生成变异规则集合;第3 阶段是变异数据,采用变异规则生成变异数据.图2展示了接口数据变异测试生成技术的完整过程.
图2 变异数据生成过程
在故障数据模型[6]生成方面,为了支持数据的提取,首先定义了基于树文法(Tree Grammar) 的数据模型[7],即TDM(Test Data Model).一个TDM 表示为一个文法G.语言L(G)是由所有符合文法G 的测试数据组成的集合,即合法数据的集合.{d|d∉L(G)}则是非法数据的集合.采用形式化方法定义数据模型可以更有效支持鲁棒性测试[8]数据的自动化生成.
在变异算子设计方面,借鉴变异测试的思想,针对故障注入目标和数据类型的特点,设计相应变异算子.变异算子的定义为:变异算子是一个利用转换函数进行变异测试的思想,进行故障注入的函数.该函数使用变异参数p,对种子数据td(td∈L(G))中由f指定的数据字段进行修改,从而产生一个非法数据td(td′∉L(G)或者td′∈L(G),但部分字段值处于约束边界).每个变异算子需要作用在一种数据类型之上.本文针对XSD 中数据类型设计了14 种变异算子,如表1所示.
表1 主要变异算子的定义
在变异算子参数选择策略方面,本文针对不同的数据类型和约束,定义相应变异算子参数选择函数,具体参数选择策略包括:
第1 种: 针对值域约束的选择策略.对于包含VAL(D)约束的产生式,PS 函数采用边界值原则选择参数.在约束VAL(D)中,D 有两种形式: 取值列表和取值区间.对于前者,随机选取一个列表内的值和一个列表外的值.对于后者,选取区间的边界值和略超出区间的值.
第2 种: 针对值长度约束的选择策略.对于包含LEN(L)约束的产生式,PS 函数通常会选择处于L 下限、L 上限,以及一系列超过L 上限的值作为串长度,以检测被测系统中与缓冲区溢出有关的缺陷.
第3 种: 针对可选性约束的选择策略.对于包含OPT(F)约束的产生式,PS 函数针对F 中的每个字段选择相关MO 改变字段值的存在状态.
第4 种: 针对序列类型的选择策略.XSD 数据类型中存在有序序列sequence 和无序序列group.对于前者,可采用两种策略打破原有的元素顺序关系:1)随机选择其中的元素,使用MO-DisorderField 变异算子改变其顺序; 2) 随机选择其中的元素,使用MODuplicateElement 和MO-DeleteElement 变异算子改变其数量.对于无序序列,则只能采用第2 种方式.
在变异规则生成方面,提出基于数据模型的变异规则生成算法.该算法以待变异的种子数据作为输入,遍历其中的每个字段,根据字段类型选择适合的变异算子和参数,产生相应变异规则.算法输出是变异规则集合(简称MRS),函数FindMOs 用来从变异算子库中搜索适用于该字段的所有变异算子,函数ChooseMO 则依据某种策略从中选择所使用的变异算子.所支持的选择策略包括: 顺序轮换、随机选择、基于权重的随机选择和基于反馈的选择.该算法将持续生成变异规则,直到其数量达到用户设定的期望值.基于数据模型的变异规则生成算法如下所示.
1.2 故障注入
有了非正常的数据,即可进行故障注入.本文针对威胁攻击的特点,提出了一种环境故障注入测试模型.该模型主要包括3 个组成部分: 故障注入配置模型[9]、交互过程模型[10]和环境故障模型[11].
故障注入配置模型: 定义了测试系统的静态结构,描述了故障注入器(FIE)、被测系统(SUT)和其他系统组件的逻辑连接关系.该模型以UML 2.0 部署模型[12-13]为基础,对其中的节点定义进行了扩展,划分为如下3 种类型: FIE、SUT 和普通节点(代表被测系统的通信对端,可以是一个测试组件,也可以是一个真实的系统组件).通过该模型,FIE 可以确定在测试中需要监控的哪些节点之间的通信过程.
交互过程模型: 定义了测试的动态行为,每一幅模型图对应一个测试用例,描述了被测系统与其他组件的一个消息交换过程,以及在这个过程中FIE 的故障注入活动.在该模型中,UML 顺序图中的异步消息[14]用来表示Web 服务的协议消息(如SOAP 消息[15]).从FIE 的角度来看,协议消息可进一步分为测试期望消息和测试动作消息.测试期望消息代表FIE 要接收的消息,顺序图中测试期望消息的序列确定了FIE 希望接收到的消息序列.如果收到的消息和这个序列不符,即可判定当前测试用例执行失败;测试动作消息代表FIE 要发出的消息,属于在收到某条测试期望消息后要执行的操作,既可以转发一条之前收到的消息,也可以构造并发送一条新的消息.
环境故障模型: 定义如何在交互过程中产生和注入故障.该模型中的每个故障都会关联到一条测试期望消息,称为“触发消息”[16].当收到这条消息后,相应的测试动作就会被触发,以对正常的交互过程进行干扰,从而模拟出相应的环境故障.
本方法针对Web 服务的运行环境特征和典型网络故障模式,设计并实现了消息丢失故障、消息重复故障、消息乱序故障、消息延时故障等环境,以消息丢失故障为例,从故障描述、故障原理、故障实现、故障处理方式等4 方面进行描述:
故障描述: 消息丢失是网络通信过程中的常见故障之一,主要是指在通信的两端中,一方向另一方发送消息后,接收方没有收到这一消息,即消息在传输过程中由于某种原因发生了丢失.
故障原因:1)在网络转发节点上丢失;2)在接收端被丢弃;3)被转发时发生地址段数据错误,消息未被发送到正确的地址.
模型描述: 如表2所示.
表2 模型描述
故障实现: 在收到消息PI 后,根据脚本将该消息丢弃.输出消息的集合为空.
故障处理方式: 被测系统在发送出消息后,对该消息维持一个计时器,当计时器超时后,如果仍未收到期望的回复消息,则将该消息重新发送.
2 故障注入工具设计
在现有商用云平台故障注入研究中,主要针对虚拟机管理器、云平台管理软件进行故障注入,缺乏一个完整针对云平台各个层次的故障注入方法.
本文针对上述存在问题,设计了针对信息服务云环境IaaS 层、PaaS 层、SaaS 层等多层次、可扩展的故障注入平台.该平台涵盖计算资源、通信网络、平台、数据、服务共5 类18 种故障,全面覆盖云环境3 层注入需求.同时,设计了14 种数据变异算子,提出了缓冲区溢出等3 类故障模拟手段,能够验证系统能否在强对抗环境下持续、稳定的工作.
表3 信息服务云环境故障类型
2.1 功能设计
该平台以模块化形式组成,包括5 个功能模块:故障注入控制模块、故障负载生成模块、故障分发模块、故障注入模块(含故障注入器)、故障注入统计分析模块.
故障控制模块: 用于为试验人员提供图形或脚本的方式进行控制,发送故障注入开始、暂停、恢复等控制命令.故障注入控制模块读取两种形式的输入: 一是读取故障注入脚本的输入,在设定的时间往预定的位置注入故障; 二是根据需要在特定时间点,通过图形界面的接口进行故障导调干预.
故障负载编辑模块: 为了统一、规范化描述云平台中各层故障类别,设计了5 元组的故障描述模型:<故障层次、故障工具、故障位置、故障时间、故障参数>,生成故障注入描述的脚本文件.
图3 故障注入平台功能设计
故障分发模块: 根据生成的故障负载的IP 地址等信息分发到各个具体物理服务器和虚拟主机节点的故障注入器.
故障注入模块: 接收故障分发模块下发的故障注入脚本,当故障注入任务满足发生的条件时,调用对应的故障注入模块,并传递对应参数,触发故障注入程序运行.
故障统计分析: 将收集故障注入信息并存储于数据库,用于后续的信息服务云环境能力评估与统计分析.
2.2 功能研制开发
故障注入平台能够完成故障模拟数据的自动化生成以及注入,主要包括变异规则配置、变异数据生成和故障注入3 个部分.
1)变异规则配置是为用户提供可视化的数据变异规则配置,针对用户实际使用需求,提供两类不同的配置方式: 普通模式和专家模式,其中普通模式旨在提供更容易的使用方式,用户只需选择变异算子即可完成配置,专家模式则主要面向领域知识较为丰富的使用者,为该类使用人员提供细粒度的配置能力.
变异规则配置界面如图4所示,从图4可知,普通模式下通过从左侧选择变异规则到右侧即可完成配置,专家模式下则需要为协议报文的字段选择合适的变异算子.
2)变异数据生成是指根据变异规则配置内容以及数据格式要求,在变异生成引擎的驱动下快速产生大量异常数据,从后续威胁注入提供支撑.
3) 故障注入是指利用生成的异常数据,通过被注入系统对外提供的接口(如网络接口、函数接口等),将异常数据自动化注入被测软件中,从而观测软件是否能在恶劣环境下正常工作.
图5显示了向服务注入故障的时序过程,该过程采用序列图进行展示.
3 故障注入仿真试验
为了能够对该故障注入方法进行验证,以某工程的实际态势处理软件为对象进行验证.试验环境如图6所示,由图可知,使用模拟器生成大量的态势测试数据,实时态势信息经过网络向资源管理服务中心上报态势信息,态势信息经过实时信息分发服务转发至态势服务,由态势信息服务进行信息的抽取、转换,最终投递到综合态势显示软件.在这一环境中使用故障注入工具向实时信息分发服务注入异常数据,如果实时信息分发这类较为成熟的软件发生问题,则证明了本方法研究的可行性和工具的实用性.
图4 变异规则配置界面
图5 变异数据注入过程序列图
采用本文研制的故障注入工具,并设置相关的变异规则,实现了对XX 报文的变异,具体变异规则设置如表4所示.
表4 变异规则设置
图6 业务数据变异试验场景
图7 实时信息分发服务崩溃效果图
图8 态势服务崩溃效果图
通过在实验室内部搭建实验环境,并设计了800组攻击数据.在上述场景下开展试验,发现了实时信息分发服务在部分情况下会发生崩溃问题,通过分析注入过程以及注入数据发现,如果频繁收到信息订阅报文时,实时信息分发的订阅关系会发生问题,进而导致软件崩溃,软件崩溃后无法自动重启,导致态势信息中断,无法顺利上报.
4 结论
本文提出了一种基于业务数据变异的故障注入方法,能够根据变异算子构建“半合法数据”来模拟产生云环境中各类资源故障与异常事件.同时,提供故障注入能力,依托仿真或云环境接口调用等手段实现故障注入.实验结果表明,该方法能够满足大部分通信网络、云环境原型等层面的故障注入需求,支撑云环境能力评估试验.