摘 要:针对静态可信度量系统难以检测软件运行过程中的异常行为,无法保证软件动态运行安全可信等问题,通过对软件序列行为模型进行分析,提出了一种基于 HMM-CBOW行为模型的软件动态可信度量系统设计方案。该方案采用软件行为静态分析与短序列动态划分相结合的方法,构建出细粒度的行为基线库,通过对运行行为的动态监控与可信评估,实现了对软件的动态可信度量功能,能够确保软件运行过程安全可信。最后,通过实验表明:相对于传统 N-gram 模型的可信度量系统,基于 HMM-CBOW 行为模型具有较高的可信评估准确率与较低的时延。

内容目录:

1 动态可信度量基本原理

2 动态可信度量行为模型

3 系统设计

3.1 系统结构设计

3.2 行为基线构建

3.3 行为动态监控

3.4 行为可信评估

4 实验分析

4.1 可信评估准确率

4.2 动态可信度量时延

5  结 语

随着信息技术广泛深入地应用于社会各个方面,信息网络给人们带来方便快捷的同时,也产生了众多的安全问题。例如,木马病毒、勒索程序、系统漏洞等安全威胁给人们带来了巨大的经济损失,引发隐私泄露等安全问题。当前,信息系统面临的安全威胁主要包括:以网络攻击为主的外部威胁和以系统设计漏洞利用为主的内部威胁。实际上,系统漏洞造成的安全事件非常常见,在电力、交通、民航、航天、证券等领域,往往造成严重的损失。而传统的信息安全以防外为重点,主要是应对复杂的网络攻击,对信息系统内部的防御能力有限。

为了解决信息系统内部的安全威胁,业界提出了可信计算的概念,其本质是通过在信息系统的计算平台上引入可信计算模块,将可信计算模块作为可信根,基于信任链的扩展,采用可信度量方法保证系统启动与运行过程的完整性与安全性,抵御系统内部安全威胁。当前,在工程应用中,通常采用静态可信度量方法保证系统启动与软件加载执行时的安全可信,但却难以确保运行过程中的软件状态可信;采用动态可信度量方法能够对运行过程中的软件实施可信度量与监控,保证软件运行状态可信,因此,探索软件动态可信度量方法,成为了业界研究的热点。目前,实现软件动态可信度量主要有两类方法:一类是基于系统内存空间的动态监控度量方法,通过定时监控并度量内存中软件代码段、系统调用的完整性,来保证软件运行状态可信;另一类是软件行为动态可信度量方法,通过构建软件行为基线模型,对实时采集到的软件运行行为序列进行度量,验证软件运行行为是否符合设计预期,来保证软件运行状态可信。本文采用软件行为动态度量方法,基于评估准确率高、时延较低的 HMM-CBOW软件行为模型 ,提出了一种动态可信度量系统设计方案。

1 动态可信度量基本原理

软件动态可信是指软件运行过程中的所有行为都与设计预期行为相符合。动态可信度量是判定软件是否动态可信的系统,能够有效地对软件运行行为与预期行为进行可信评估,并依据可信评估结果与管控策略实施动态管控。动态可信度量基本原理如图 1 所示。

图 1 动态可信度量基本原理

首先,对软件源码或目标码进行静态分析与动态分析,采集软件行为,划分软件的行为区间,得到软件预期行为序列,通过建模生成行为基线,作为可信度量判定的预期行为。其次,对运行过程中的程序行为实施动态采集,获得程序实时行为序列。最后,基于行为基线对采集到的实时行为序列进行可信评估,依据评估结果与控制策略对运行的软件实施动态管控,从而保证软件运行过程状态可信,防止软件非预期行为给系统带来潜在的安全威胁。

2 动态可信度量行为模型

动态可信度量行为模型主要有基于序列的行为模型、基于状态的行为模型和基于模糊集合的行为模型等。当前,由于基于序列的行为模型具有实时性、系统资源占用少、易工程实现等优点,在工程实现上较其他几类行为模型的应用更加广泛,因此,本文主要对典型的序列行为模型 N-gram 模型与改进后的  HMM-CBOW 模型进行对比分析,开展动态可信度量系统设计。

(1)N-gram 模型。N-gram 模型是典型的序列行为模型,是 Hofmeyr 等人在 1998 年提出的基于系统调用的程序行为模型。在基于系统调用序列的软件行为模型中,N-gram 模型具有占用系统资源少、实时监测的优点 。N-gram 是指通过长度为 N 的系统调用短序列构建软件的行为,并且分析序列和软件之间的关系,为软件建立行为模型。短序列的构建采用滑动窗口机制,每个窗口内的系统调用都是软件的一个行为。如图 2 中的系统调用序列为fork write read chmod mmap accept read scoket send ioctl,使用大小为 5 的滑动窗口记录系统调用之间的关系,可得到图中所示的长度为N = 5 的系统调用短序列,每个短序列代表着程序的一个执行行为。

图 2 N-gram 滑动窗口序列

目前,基于系统调用序列行为模型面临的主要问题是如何在评估准确率、评估性能与资源开销上达到平衡。N-gram 模型是通过采取定长系统调用短序列而得到表示行为的序列集的,虽然能够提高评估性能,但降低了评估准确率,这也是 N-gram 模型的一大缺陷。另外,N-gram模型只考虑序列之间的位置关系,没有考虑序列之间的相似度,存在数据稀疏的问题。后续对 N-gram 模型有很多的改进,如 Wespi 提出的不定长序列模型 Var-gram,以及引入系统调用频率特性、数据挖掘理论和隐马尔可夫链理论的模型等。

(2)HMM-CBOW 行为模型。HMM-CBOW行为模型是王焱济在 2019 年提出的一种改进型序列行为模型。HMM-CBOW 行为模型是在N-gram 序列行为模型的基础上,引入了隐马尔可夫模型(Hidden Markov Model,HMM 和连续 词 袋 模 型(Continuous Bag-of-Words Model,CBOW),对行为序列进行细粒度的划分,并对序列关系进行建模,既继承了序列行为模型检测简单快速的优点,又兼顾了行为序列之间的关联关系,能够分析出程序的分支、循环、递归结构、函数输入输出参数、返回值等信息,解决了数据稀疏的问题,进一步提高了行为判决的准确率。基于 N-gram 模型与 HMM-CBOW行为模型的优缺点分析,采用改进后的  HMM-CBOW行为模型,开展动态可信度量系统设计。HMM-CBOW 行为模型如图 3 所示。

图 3 HMM-CBOW 行为模型

HMM-CBOW 行为模型主要对软件运行过程中的系统调用序列、参数及返回值等进行细粒度的刻画,将序列进一步划分为方便存储、处理与查找的若干不同长度的短序列。一个 HMM-CBOW 行为模型可定义为其中 S 为状态集合,状态集合是已知的确切的值或者猜测的值;O 为观察集合;A 为状态转移概率矩阵;B 为观测概率矩阵;π 为初始状态的概率分布。

3 系统设计

基于 HMM-CBOW 行为模型,给出了软件行为表示方法,开展了动态可信度量系统设计,将动态可信度量系统划分为行为基线构建、行为动态监控、行为可信评估 3 个子系统。动态可信度量系统设计的具体内容如下所述。

3.1 系统结构设计

行为基线构建子系统从软件应用行为、系统调用交互行为两个维度,通过静态分析,采集软件的预期行为数据,构建行为基线库。行为动态监控子系统在软件实际运行过程中,实时采集应用与系统调用的行为数据,通过变换得到运行过程中的普通函数与系统调用行为序列。行为可信评估子系统,基于采集到的行为序列,查询行为基线库,通过分析评估,最后判定运行行为是否符合行为基线,完成软件的动态可信度量过程。动态可信度量系统结构如图 4 所示。

图 4 动态可信度量系统结构

3.2 行为基线构建

行为基线构建子系统采用编译器静态分析方法,收集面向软件应用层行为的原始数据与操作系统交互的系统调用数据,基于软件应用行为与系统调用行为基线构建模块,共同生成行为基线库。首先,利用编译器静态分析方法对软件基本块及控制流进行分析;其次,根据行为建模与检测的需求对控制流进行重构,得到以基本块为节点,以系统调用为边的控制流图;最后,对软件基本块进行数据流分析,提取出普通函数与系统调用的返回值和参数信息,生成数据流图,再与控制流图共同构建为软件的行为基线库。行为基线构建过程如图 5 所示。

图 5 行为基线构建过程

(1)通过编译器对源代码进行静态分析,生成普通函数调用控制流图。

(2)读取控制流图并依次读入图中的每个元素;依次遍历其中的节点,判断该节点是否含有系统调用,若有,则将该节点的所有子节点添加到其父节点的子节点集中,并删除该节点,最后生成系统函数调用的控制流图。

(3)将步骤(2)生成的系统函数调用控制流图插入普通函数调用控制流图中,得到完整的普通函数和系统调用函数混合调用的控制流图。

(4)提取出普通函数和系统调用函数的返回值与参数信息,生成数据流图。

(5)将混合调用的控制流图与数据流图转化为有限状态机、执行路径的 Hash 集合与HMM-CBOW 模型,完成行为基线库的构建。

3.3 行为动态监控

行为动态监控子系统主要实现软件运行行为的动态采集。基于插装和系统调用钩子(Hook)的行为监控技术,分别采集软件应用层、系统调用层与操作系统交互过程中的运行行为信息,得到软件运行过程中的普通函数与系统调用行为序列,为后续的软件行为可信评估提供实时的行为数据。行为动态监控过程如图 6 所示。

图 6 行为动态监控过程

(1)行为监控配置管理模块用于配置需要被监控的软件业务列表、行为监控的粒度等信息。

(2)应用层函数自动插桩模块根据用户配置的被监测的软件业务列表,自动分析与被监测的业务列表相关联的应用层函数,在软件源代码上自动生成插桩代码。

(3)系统层函数 Hook 模块根据用户配置的被监测的软件业务列表,自动分析与被监测的业务列表相关联的系统层函数、系统调用与传入的参数值。

(4)应用层函数与系统调用监控模块对应用层函数和系统调用进行处理,利用应用层代码插桩和系统调用钩子,采集应用内部、应用和操作系统交互过程中的行为序列。

(5)普通函数序列与系统调用序列融合模块基于软件业务功能与应用层入口函数映射关系,对普通函数和系统调用序列按照业务功能进行切割清理,采用对应的软件行为表示方法处理后,生成运行行为序列。

3.4 行为可信评估

行为可信评估子系统是基于行为基线库,快速判断运行行为是否与行为基线库的预期行为相符合,并输出可信评估结果。为了快速准确地评估运行行为是否可信,需要针对普通函数行为序列与系统调用行为序列的特点,分别采用不同的可信评估方法。

(1)普通函数行为序列评估方法。首先对采集到的普通函数行为序列按照执行路径进行编码,并计算行为序列编码对应的累积哈希集合,再通过查询行为基线库,判断该哈希集合是否在基线库中,若在,则判定行为可信;若不在,则判定行为异常。评估过程如图 7 所示。

图 7 普通函数行为序列评估过程

(2)系统调用行为序列评估方法。首先采用 HMM 模型将系统调用序列划分为功能片段的短序列。其次将短序列变换为 CBOW 数据模型。最后与 CBOW 数据模型的行为基线库进行匹配,若匹配成功,则表示行为可信;否则,表示行为异常。与传统只利用系统调用名称的异常行为评估方法相比,系统调用行为序列评估方法可以捕获更多的行为信息,能够更加准确有效地进行可信评估。评估过程如图8 所示。

图 8 系统调用行为序列评估过程

4 实验分析

基于上述动态可信度量系统设计方案,实现了软件动态可信度量原型系统软件,该软件由行为基线构建模块、行为动态监控模块和行为可信评估模块 3 个软件模块组成,可部署在 Linux 操作系统与国产银河麒麟操作系统的计算机平台中,实现对应用软件的动态可信度量。为了验证其有效性,采用国产飞腾 2000/4 计算机环境(CPU为 2.6 GHz,操作系统为银河麒麟 4.0.2-SP2,内核版本为 4.4.131,内存为 32 GB),实验样本数据来源于恶意样本数据库 VX Heaven,验证了该原型系统的行为基线构建、动态监控和可信评估等功能的正确性。同时,本文针对信评估准确率和动态可信度量时延这两项能够直接反映系统性能优劣的关键指标进行了实验分析。

4.1 可信评估准确率

可信评估准确率直接关系到动态可信度量系统设计的有效性,可信评估准确率越高,表明系统对异常行为的可信评估能力越强。可信评估准确率与动态可信度量系统所采用的行为模型、滑动窗口大小是密切相关的。因此,本文基于不同序列行为模型与滑动窗口大小,对系统的可信评估准确率进行测试,其测试结果如图 9 所示。

图 9 可信评估准确率

由于滑动窗口大小对软件行为的可信评估准确率的影响较大,因此,实验通过使用不同大小的窗口分别采用 HMM-CBOW 序列行为模型与 N-gram 行为模型建立正常的行为模型,然后使用相同的测试样本数据集进行检测。从图9 中可以看出,窗口的大小对于正常样本的可信评估准确率影响较大,可信评估准确率随着窗口大小的增加而逐级降低。同时可以看出,HMM-CBOW 序列行为模型的可信评估准确率高于 N-gram 行为模型。

4.2 动态可信度量时延

动态可信度量系统需要对运行中被度量的软件执行动态采集、序列处理、基线查询和可信评估等一系列的操作,不可避免地会给软件运行带来时延,当采用不同的行为模型时,带来的时延也不相同,因此,时延的大小会直接影响被度量软件的运行性能和用户体验。只有将可信度量时延控制在合理的范围内,才能够满足业务软件对运行时间性能的要求。本文通过在动态可信度量验证原型系统的动态采集、序列处理、基线查询和可信评估等关键部件上设置计时器,分别基于 N-gram 与 HMM-CBOW行为模型,对同一个样本程序执行 1 000 次动态可信度量后,计算各度量阶段的平均执行时延,从而获得系统总的平均值时延,测试结果如表 1所示。

表 1 动态可信度量时延

从表 1 的测试结果中可以看出,原型验证系统平均总时延小于 0.09 ms。由于  HMM-CBOW 行为模型采用了高效的短序列变换,与 N-gram 行为模型相比,在序列处理阶段时延较高,在基线查询和可信评估阶段时延较低,因此,在总体时延性能方面,采用  HMM-CBOW模型比 N-gram 模型的系统总体时延性能好。同时,由于在序列处理、基线查询和可信评估这 3 个阶段需要处理的行为序列数量大、行为基线库查询耗时多、评估算法执行时间长,导致时延较大。因此,在实时系统中或对时间性能要求较高的应用场景中,为了降低总时延,提升可信度量性能,需要进一步探索更高效的动态采集、序列处理、基线查询和可信评估的方法。

5 结 语

本文基于 HMM-CBOW 行为模型,给出了具备行为基线构建、行为动态监控、行为可信评估功能的软件动态可信度量系统设计方案。该方案通过对软件行为实施静态分析,构建了行为基线库,采用了 HMM-CBOW 模型将连续的系统调用序列划分成若干短序列片段,每个短序列片段作为软件中一个代码块的执行映射,这种划分方式能够更准确地表示出软件的实际运行行为,能够有效地提高可信评估准确率,降低动态可信度量时延。通过实验表明:该设计方案能够满足分时系统软件动态可信度量的应用需求,与采用N-gram 模型的可信度量系统方案相比,具备较高的可信评估准确率和较低的时延。同时,为了进一步提升系统的可信评估准确率,降低动态可信度量时延,满足实时系统的应用需求,后续还需进一步研究更加高效的动态可信度量模型与设计方法。