system: [SYSTEM]

user: 2. 检测模型结构 2.1. 整体框架结构 检测模型的整体框架结构如图1所示，主要包括行为提取引擎、检测引擎、行为特征数据库以及其 图1. 检测模型整体框架 它几个部分。 1) 行为特征是根据大量实验和专家经验总结而来，除此之外还要利用信息增益理论对行为特征进行降维以提高检测的准确度和降低开销，最终选取出的行为特征将作为行为提取服务器的分析提取依据。 2) 行为提取引擎主要由行为提取服务器以及沙盒工具组成，负责对训练和检测样本进行行为分析和提取。样本在虚拟环境中运行，可以防止其对真实的计算机系统造成损害，同时利用沙盒工具的监控脚本对软件的运行过程进行监控，沙盒工具将分析结果(报告文件)输出到行为提取服务器上。 3) 对于训练样本而言，其行为提取结果会被放入行为特征数据库中，用于训练KNN分类器模型(二分类)。对于检测样本而言，其行为特征成为了检测的重要依据，最终将被输入检测引擎中进行检测样本的识别。 4) 检测引擎主要包括检测服务器和KNN分类器等部分。检测服务器负责将输入数据转交给分类器，分类器接受行为特征数据库和检测样本行为特征的输入，利用改进的KNN算法进行最后的检测，并得到最终判别结果。 2.2. 行为特征的确定 行为特征确定的方法如下： 1) 首先收集大量的恶意软件样本，在虚拟环境中让恶意软件得到充分地运行，并对其动态行为进行监控。利用常规知识和经验分辨出与正常软件区分性较大的行为，记录下来并进行汇总，以此作为恶意软件的行为特征。 2) 如果仅仅是利用上述方法，可能会出现遗漏和错误的情况，因此还有很重要的一点就是翻阅文献资料，同时结合信息安全领域专家的经验，共同确定恶意软件通用的行为特征 [ 4 ] 。 2.3. 基于信息增益的行为特征降维 由于恶意软件行为特征的维数很大，因此会导致检测的计算复杂度增加，所以必须对于这些行为特征进行有效性筛选。 将恶意软件检测模型视为一个系统，那么对于这个系统而言，其类别变量集合表示为 ，其中 表示恶意软件类别， 表示正常软件类别。系统的熵定义为 (1) 假设行为特征向量表示为 ，考虑到如果该系统中某行为特征 没有出现，或者 被确定下来了，那么此时的系统熵被表示为该行为特征对系统的条件熵，也就是： (2) 其中 表示特征向量 的概率。 信息量期望值或者说信息熵的减少量用信息增益IG来表示，它反映了某项行为特征的出现对整个系统熵值的影响，或者说是为整个系统带来了多少信息量 [ 5 ] 。对于某项行为特征，其信息增益可以用该特征确定前的系统熵与确定后的条件熵之差来表示，表达公式如下： (3) 根据信息增益的公式可知，某一行为特征相对系统的条件熵越小，则最后的信息增益值越大。因此只需要计算每个行为特征相对于系统的条件熵，然后按照“条件熵大信息增益小”的原则 [ 6 ] ，将所有行为特征的条件熵按照由小到大的顺序进行有序排列，即得到行为特征的排列序列。门限阈值的确定根据检测模型的实际要求来定，最后依照阈值对恶意软件的行为特征进行筛选，实现基于信息增益的行为特征降维。 最终经过降维的恶意软件行为特征及完成相应行为需要用到的API函数如表1所示。 2.4. 开源沙盒工具Cuckoo Sandbox Cuckoo Sandbox是一款基于GPLv3开源协议的沙盒工具，可以用于对恶意软件进行初步分析，其主要功能包括： 1) 追踪恶意代码进程的调用情况； 2) 监测恶意代码执行过程中删除、下载或者新建的文件； 3) 以PCAP格式保存恶意代码的网络通信； 4) 获取恶意代码的内存镜像； Cuckoo Sandbox的结构如图2所示，主要包括Host Machine和Guest Machine两大部分，Host Machine和Guest Machine之间通过虚拟网络进行通信。 Host Machine即中央管理模块，包括Cuckoo Sandbox本体、各类分析组件以及虚拟机软件Virtual Box，主要负责启动分析，行为监控以及报告文件的产生等等。 Guest Machine即虚拟机环境，主要负责执行恶意代码并向中央管理模块汇报分析结果，值得注意的是，Cuckoo Sandbox在Guest Machine中注入的有一个监控脚本。 Cuckoo Sandbox的工作流程为： 1) 首先Cuckoo Sandbox执行主程序脚本，同时开启Guest Machine虚拟机。 2) 通过上传功能脚本和监控脚本，将样本送入Guest Machine中，准备执行。 3) 样本在Guest Machine中执行，同时监控脚本对样本的各种信息进行记录。 Table 1 Behavior characteristics of malwar 行为特征类别 行为特征描述 调用API 文件行为 创建文件 CreateFile 读取文件 ReadFile 写入文件 WriteFile 删除文件 DeleteFile 复制文件 MoveFile 移动文件 CopyFile 更改文件属性 SetFileAttributes 磁盘行为 获取系统路径 GetSystemDirectory 磁盘剩余空间 GetDiskFreeSpace 获取磁盘类型 GetDriveType 遍历磁盘文件 FindFirstFile， FindNextFile 网络行为 打开网络链接 InternetOpenUrl 远程下载文件 UrlDownloadToFile 从远程主机接收数据 Accept， Recv 远程发送数据 Send 服务行为 连接服务管理器 OpenSCManager 打开服务 OpenService 枚举服务 EnumServicesStatus 检索服务 QueryServiceConfig 控制服务 ControlService 注册表行为 创建注册表项 RegCreateKey 修改注册表项 RegSetValue 查找注册表项 RegQueryValue 删除注册表项 RegDeleteKey， RegDeleteValue 进程行为 创建进程 CreateProcess 加载动态库 LoadLibrary 获取进程信息 GetCurrentProcess， GetPriorityClass 关闭或释放进程 ExitProcess， TerminateProcess 表1. 恶意软件行为特征 图2. Cuckoo sandbox结构 4) 样本执行完毕，监控脚本通过虚拟网络以及虚拟机软件的共享功能将记录发送给虚拟机软件所在的Host Machine。 5) 虚拟机软件利用快照将Guest Machine虚拟机恢复到初始状态。 6) 记录结果通过分析组件生成报告文件。 报告文件中包含了恶意代码的行为信息，至此，恶意代码的行为通过行为提取引擎被成功地提取出来。 2.5. 基于行为特征的KNN检测算法 假定样本集合S被划分为训练样本集合和测试样本集合。训练样本集合表示为 ，测试样本集合表示为 ，样本类别集合 。 假设经过降维后的行为特征，其维数为n。那么对于S中的每个样本x而言，将其投射到n维特征空间中用行为特征向量表示，即 。 KNN算法基于一定的假设前提 [ 7 ] ，即特征空间中某样本的类别与其附近的其它样本类别更为相似，且样本间的距离越小，其相似程度越高。对于n维特征空间中的实例而言，将两个样本实例之间的距离度量表示为欧氏距离 (4) 对于测试样本集合S T 中的任一样本x T ，计算出其与q个训练样本的距离，用集合表示为 ，选取其中距离最小的k个训练样本用于测试样本的类别判断。 假定这k个近邻样本中，属于 类的样本数量为 (其中i的取值为1或2)，判别函数表达式为 ，则最终决定测试样本分类的决策函数表达式为 若 ，则 (5) 2.6. KNN检测算法的改进 对于基于行为特征的KNN检测算法而言，不同的行为特征对于检测结果的贡献值是存在着差别的，有的行为特征可以起到决定性作用，有的行为特征起次要作用。 然而从式(4)可以看出样本的各项行为特征对于样本之间的距离的影响是均等的，这对恶意软件的检测并无好处，因为各项行为特征对应的可疑级别并不相同。 为了使 能更准确地反映出样本之间的距离，我们根据恶意软件行为特征的特点对各项行为特征 授予不同的权值 。由此样本间的距离度量公式改为 (6) 如果测试样本x T 的周围的样本点的个数较少，那么该k个点所覆盖的区域将会很大，反之则小。因此最近邻算法易受样本空间中孤立点的影响。其根源在于基本的KNN算法中，测试样本x T 的k个最近邻样本的地位是平等的。 在自然社会中，一个对象受其不同近邻的影响是不同的，通常是距离越近的对象对其影响越大 [ 8 ] 。在实际应用中我们也发现，测试样本x T 距它的k个近邻距离不同，对决策的贡献也不同。样本之间不同的距离拥有不同的贡献度，距离越近的样本越相似。所以我们用近邻的距离加权 来体现近邻的贡献程度。这里取样本间距离度量平方的倒数为其距离的权值，即 (7) 由此，决策规则改进为二维判定，不仅要比较不同类别中样本的个数，而且要比较不同种类的r个样本距离加权的和。最终改进后的决策函数表达式为： 若 ，则 ，否则 (8)