恶意应用检测

2024-08-26

恶意应用检测(精选七篇)

恶意应用检测 篇1

为了应对大规模的恶意程序,提高检测时效性和准确度,最近许多国外学者将数据挖掘技术应用于对抗恶意程序的研究中,恶意程序检测是分类过程,即将样本数据分为正常程序和恶意程序。当前用于恶意程序检测的分类技术种类繁多,目前研究的比较多,综合性能较好的分类技术包括神经网络、贝叶斯、SVM(支持向量机)、决策树和关联规则等几种。

1 恶意程序的检测方法

1)基于神经网络的恶意程序检测方法:神经网络近年来越来越受到人们的关注,其本身良好的联想存储、并行处理、自组织自适应性、高度容错等特性非常适合解决数据挖掘的问题。IBM公司提出使用单层神经网络分类器来检测引导型恶意程序的方法,分类器的训练采用了反向传播算法,通过测试样本集测试,误报率为0.02%,漏报率为10-15%,结果比较理想。结合Bagging算法,将扰动训练数据和绕的那个输入属性结合起来,生成了更为精确并且差异度大的个体神经网络,实验使用了209个恶意程序文件和423个正常程序,取得了较好的检测效果。

2)基于贝叶斯分类的恶意程序检测方法:贝叶斯决策理论与数据挖掘的其他分类方法相比具有最小的误差率,在处理模式分类问题中应用十分广泛,它在类别先验概率和类条件概率密度已知的情况下,可以得到错误率最小的分类结果。实验结果表明,贝叶斯分类能够有效检测出未知恶意程序,并保持较低的误报率。

3)基于决策树的恶意程序检测方法:决策树一般都是自上而下的来生成的。每个决策或事件(即自然状态)都可能引出两个或多个事件,导致不同的结果,把这种决策分支画成图形很像一棵树的枝干,故称决策树。决策树判定速度快、判断流程直观等优点使其有着广泛的应用。建立一种基于决策树的恶意程序判定方法,其实验中使用可执行文件结构作为分类特征,首先从大量已知数据中学习并建立决策树模型,在未知样本的分类中得到了91.2%的准确率,取得了较为显著的判定效果。

4)基于SVM的恶意程序检测方法

SVM的主要思想可以概括为两点:(1)它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能;(2)它基于结构风险最小化理论之上在特征空间中建构最优分割超平面,使得学习器得到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。提出一种基于支持向量机恶意程序检测模型,检测算法采用的特征为程序执行过程中使用的Windows API函数序列,检测系统在虚拟机中监视程序的行为并进行分析,能有效地检测未知恶意程序和各种多念与变形恶意程序,而且该法所需训练样本量也较少,实验结果表明该算法在恶意程序样本较少的情况下对未知恶意程序检测有较好效果。

5)基于关联规则分类的恶意程序检测方法

利用关联规则进行分类是分类挖掘的一种重要方法,提出了一种在Windows平台下检测变形恶意程序及未知恶意程序的新方法——以PE文件调用的Windows API函数序列为特征,结合数据挖掘技术中的OOA挖掘方法来实现对恶意程序的主动防御,对未知恶意程序检测准确率达到92%,但是其仅仅使用了Windows API函数序列作为特征,对于动态调用和以资源形式存在的释放型恶意程序检测能力不足,另外在检测过程中使用脱壳引擎并不能检测所有的壳,并且脱壳时间会影响整个检测的实时性。

2 现有研究的缺陷

综合上文中的研究人员的研究成果来看,这些研究人员关注数据挖掘算法的使用和改进,在恶意程序检测中取得了较好的效果,但是仍然存在以下缺陷:

1)忽视筛选恶意程序特征方法的研究,高质量的数据是影响挖掘结果准确度的重要因素,许多数据挖掘专家都认为在数据挖掘过程中一个最关键的步骤是对初始数据集的预备和转换,这一步骤在以往恶意程序检测的相关研究中并没有引起人们的注意;

2)无法适用于客户端检测,研究人员只重视检测率而忽视客户端检测恶意程序的可行性;

3)检测效率低。以往的研究中由于检测壳和脱壳时间消耗较多,另外基于二进制特征码查杀方式匹配特征时问长,所以检测效率较低。

3 系统的解决方案

1)鉴于现有研究的不足,本文提出筛选恶意程序新型特征的方法,并在此基础上提取恶意程序检测的智能规则,本文的智能规则是相对于传统检测方式而言的智能,传统二进制检测方式查杀方式一个特征码往往只能针对一个恶意程序或一个家族的恶意程序,而本文中的智能规则可以检测一类甚至几类恶意程序,相对传统的特征码而言更具有通用性。图1展示了本文的研究过程。

首先提取样本源特征,并对提取的数据进行预处理,在此基础上筛选恶意程序新型特征和评估新型特征,然后提取智能化检测规则,最后还将设计并实现客户端检测系统,通过系统测试评估智能化规则在客户端检测的效果。

2)客户端设计

将分类器的决策结果语义化形成恶意程序智能检测规则,并根据此规则构造知识库,最终实现了基于智能规则知识库的恶意程序判定系统,包括知识库、推理机、用户界面、程序数据收集和事实表五个部分,客户端各部分的逻辑关系。

主程序加载并初始化推理机,启动程序数据收集模块收集系统中的各类信息数据,并将这些数据转换成事实的表示形式添加到事实表中,然后推理引擎加载知识库和事实表并开始推理,最后给出判断被检程序是否为恶意程序。其中,知识库和数据采集是HMDS中最重要的两个功能。

原型系统的客户端关键功能是知识库。规则库为基础设计专家系统的知识库。知识库的文件格式设计包括:规则文件头、规则数量、规则长度、规则,以下定义了规则文件的格式。

每条规则被定义为包含44个整数的数组,知识库以文件形式存储在磁盘上,每次运行时加载到内存。本文采用动态规则集方式提高检测效率,即在检测系统启动之后统计每条规则的使用频率,并把根据使用频率将规则降序排列、调整规则匹配顺序。基于动态规则集的模式匹配方法,能缩短规则匹配的时间,极大地提高了恶意程序检测效率。

3)实验及结果分析

根据本文的设计目标:提取主要测试实时性和检测率,以证明用于客户端检测的可行性。本文选取商用杀毒软件瑞星、金山、Nod32、卡巴斯基]中的检测结果作为比较对象。

测试的硬件环境为Intel Pentium双核Cpu,主频3.0GHZ,1GB内存,测试操作系统为Windows XP,安装Vm Ware Station 6.5.2虚拟机,分别安装HMDS、瑞星、金山、Nod32、卡巴斯基,将病毒库升级至最新,然后把测试集的样本文件拷贝至虚拟机中,并创建镜像节点。

HMDS扫描i盘中的文件共8391个,其中正常程序2475个,恶意程序5916个。检测出恶意程序5899个,其中包括8个误报文件,检测时间为104秒,漏报25个文件。

HMDS在检测中消耗104秒,单个文件的扫描时间约为17ms,与Nod32扫描效率相近;而从内存占用看HMDS占用内存的峰值为14M,排在Nod32之后,位于第二;扫描速度与内存峰值比值仅次于瑞星,排在第三位;HMDS的检测率与其它商用杀毒软件相近,与其他学者的研究相比有了较大提高;误报仍然存在,但是与目前其它学者的研究相比已经有较大的提高。

实验结果表明,HMDS有较好的实时性,检测速度高于部分商用安全软件,在优化匹配算法后可以进一步提高检测速度;在检测率上,HMDS与商用杀毒软件有相近的性能,但是在误报率上仍与基于特征码检测的安全软件有一定差距;从内存资源占用上看HMDS内存峰值仅次于Nod32的13MB。

综上所述,HMDS在资源占用和检测效率上表现较好,并且在无恶意程序二进制特征库的情况下能够检测未知恶意程序。由于HMDS基于新型特征的检测方式较为单一,没有综合使用白名单和黑名单等技术,存在一定的误报和漏报,因此其检测准确率与商用安全软件仍有一定差距。实验结果证明基于新型特征的智能化规则的查杀准确率较高,实时性较好,误报率较低,资源占用较低。

参考文献

[1]张波云,殷建平,张鼎兴.基于SVM的计算机病毒检测系统[J].计算机工程与科学,2007,29(9):19-22.

[2]叶艳芳,叶东毅.基于关联规则挖掘技术的病毒主动防御系统[J].集美大学学报:自然科学版,2006,11(2):106-111.

恶意应用检测 篇2

随着计算机信息技术的飞速发展和普及,计算机和计算机网络已经渗入到人们的工作学习和生活中。在计算机和网络带给人们巨大的方便与快捷的同时,同样也带来了各种负面的计算机安全隐患。在各种安全威胁下,恶意代码是较为常见的一种入侵方式。恶意代码对计算机安全的破坏有小有大, 小则计算机中数据丢失、被篡改,大则系统硬件可能被破坏。由于每种恶意代码在网络传播中的特点各不相同, 攻击阶段也各不相同, 如果采用传统的针对内容的检测分析无法高效识别与普通代码很相似的恶意代码。

本文提出了一种基于因果关联分析的方法来检测恶意代码, 通过研究恶意代码在网络传播中的攻击模型,以因果关联分析方法为理论依据,来检测恶意代码, 这种方式提高了对恶意代码的检测效率,降低了检测的误报率,并且能够兼容传统的数据包特征匹配算法。

2简介

2.1 何为恶意代码

Malware是恶意代 码的专业 术语。恶 意代码Malware本质是一段代码,只是这段代码含有一定的对计算机破坏的功能。恶意代码一般是运用计算机系统或者软件的各种漏洞进行破坏。 一般表现形式是二进制文件、脚本或者宏。

恶意代码主要包括计算机后门、计算机病毒、特洛伊木马、恶意移动代码、蠕虫、内核套件和僵尸网络等。

计算机后门是一种通过使用后门工具对目标机器进行控制的恶意代码程序,它能够绕开正常的安全控制机制。

计算机病毒的最大特点就是可以自我复制,具有一定感染性的一段病毒代码。

特洛伊木马: 正如特洛伊历史事件所描述的类似, 该段代码能够伪装成正常有用的软件博取用户信任,一旦用户点击打开,则暴露出恶意行径的代码。

恶意移动代码:一般情况下,恶意移动代码是部署在Web服务器端的, 所以它基本不需要过多的人工干预。一旦访问已经部署恶意代码的Web服务器,则本机就有可能被感染。

蠕虫:和计算机病毒一样具有自我复制性,将自身嵌套进宿主程序中运行的恶意代码。

内核套件:氛围用户态和内核态两种。一般通过替换或者修改系统中关键文件,获取最高控制权的一类程序代码。

僵尸网络:具有网络传播性和恶意性,危害较大。中毒的计算机不是一台,而是网络上的多台,感染范围较大,该恶意代码控制多台网络中的计算机,使其被感染的计算机如同僵尸一般受控制。

2.2 恶意代码工作原理

恶意代码一般通过四种方式运行: 利用系统漏洞、嵌入其他文件、伪装成有用文件和欺骗。恶意代码可以通过自我复制传染更多的主机文件或者网络上的不同 主机。传播的介质有网络电子邮件、计算机中的网络共享、移动介质(U盘、移动硬盘等)、P2P共享、系统本身漏洞等。恶意代码入侵主机后,可以通过修改系统设置成为系统开机自启动项目中的其中一项,当用户每次开机时,就启动恶意代码进行非法操作,如发起非法攻击、记录键盘和鼠标事件、获取用户隐私等等。

电子邮件传播的原理: 电子邮件中HTML正文可能被嵌入恶意脚本;邮件附件携带病毒压缩文件或者可执行文件。

P2P共享 :感染P2P共享文件夹 ,当用户在P2P文件夹中下 载文件时 , 可能被感 染。如WORM、PEERCOPY.A等恶意代码。

网络共享:恶意代码程序中会存在自身的口令猜测逻辑进行口令猜测, 试图访问网络共享中存在的文件夹,当获取到用户名和密码后,将自身恶意代码拷贝到网络共享中, 并将自身命名为游戏等名称吸引眼球,诱导用户点击触发。

系统漏洞:由于操作系统本身有一些设计缺陷,导致被非法用户通过非法方式利用,执行恶意代码,恶意代码通过系统漏洞进入系统, 达到感染目的。如Web DAV漏洞、Local Security Authority Subsystem Service漏洞、RPC-DCOM缓冲区溢出漏洞等是经常被利用的漏洞。

3因果关联分析

3.1 因果关联分析法

因果联系即有因必有果,万事万物都是存在因果联系的。任何结果的产生都是由因导致的。因果联系中的 事物是一种引起与被引起的关系。因果联系理论目前应用到很多领域,本文就是将因果联系理论应用到计算机恶意代码的分析检测中。

3.2 因果关联应用到恶意代码检测

关联特征过滤器的确定。将每个阶段恶意代码攻击的数据包特征进行正则描述,定义成关联特征过滤器集合T={t1,t2,t3,……,tn}。

M个n维的向量表集合的确定。每个向量分量为8的倍数的二进制码, 每个向量对于一个IP地址,n维代表共记录了n种恶意攻击。每个内网IP地址对应一个哈希值,恶意代码对应向量表中的其中一维,向量表中的一个单元表示与该内网IP相关的数据包对恶意代码的过滤情况。状态向量集合表的某个位置被更新时,应该判断与状态向量表位置相对于的因果关联特征过滤器的某个位置是否相等,如果两个值相等,则表明此时更新的是最终的状态,如果两个值不相等,则表明此时更新的不是最终的状态。

数据包进入n维度的关联特征过滤器后进行匹配分析,如果匹配则进一步表名该恶意代码具有因果关联特征。

在因果关联分析中,需要用到一种结构,该结构记录了源IP地址, 目的IP地址, 恶意代码第一次生成时间,最近一次清理的时间,恶意代码编号,所处的攻击阶段等内容信息。需要定期清理可疑IP组,每次清理后将剩下的IP组中的结构更新, 同时将状态向量表对应的二进制码归零。这样可以节省部分内存空间,减少恶意代码的误报率。

需要注意的是, 只需要存在一个n维的状态向量表, 就可以对应n个因果关联特征过滤器T1,T2,T3, ……,Tn。

因果关联分析法的恶意代码检测流程是:在网络中读取需要检测的数据包, 将数据包的来源IP与高度可疑的IP组相比较, 如果发现该IP在高度可疑IP组中, 则进入关联特征匹配,如果匹配结果为是,则进一步处理数据包。处理数据包主要是判断是否更新向量表,若内网地址的数据分组与关联特征过滤器中的成员特征成功匹配,那么内网地址对应的向量序号与对应的恶意代码进行哈希计算。匹配结果放置到向量表中的条件是,检测的数据包需要和一个关联特征相匹配。具体流程如图1所示。

4结束语

为了保障联入网络中的企业和个人能够安全地进行各项日常工作和活动,计算机安全技术,特别是计算机网络安全技术正在飞速的发展。由于其互联网本身的开发特性, 当今恶意代码流行的趋势是全球范围的,攻击速度越来越快,几乎为零日攻击,一般是几种网络攻击方式联合, 对计算机网络用户造成了严重的安全威胁。针对恶意代码的攻击原理,联入网络中的企业、个人等组织应该提高对恶意代码等网络攻击的安全防范意识,网络管理员应该及时更新操作系统发布的最新安全漏洞补丁,修补操作系统安全漏洞,加强网络共享管理, 强化密码设置,增强安全策略,加强密码强度。

摘要:文章针对恶意代码的攻击原理,介绍了对恶意代码的检测。通过因果关联的分析原理检测恶意代码,提高对恶意代码等网络攻击的安全防范意识,更新操作系统发布的最新安全漏洞补丁,修补操作系统安全漏洞;加强网络共享管理;强化密码设置,增强安全策略,加强密码强度。

恶意应用检测 篇3

关键词:恶意网页,蜜罐日志,数据挖掘,误警率

0 引 言

随着计算机网络的发展,计算机已经进入了每一个人的日常生活和工作中,但网络安全问题也随之而来,其中尤以恶意网站最为严重,网页挂马、重定向、病毒等都有可能在人们浏览网页的时候威胁到自身系统的安全,从而造成僵尸机器、系统瘫痪、信息被窃取甚至更加严重的经济损失[1,2]。

蜜罐技术是一种新型的网络安全防御技术,它通过建立了一个虚拟的环境,故意暴露出各种弱点或漏洞,引诱入侵者来攻击,从而达到监视和分析攻击者攻击行为的目的[3,4]。本文所使用的Capture-HPC[5]是一种高交互度客户端蜜罐系统,它通过在蜜罐虚拟系统访问网页地址的过程中,对系统的状态进行监测,并利用检测的结果对网页的善恶进行判断和分类,是一种非常有效的判别恶意网页的工具。但由于Capture-HPC是通过黑白名单作为判别的依据,因此具有高误警率的缺点,这成为了Capture-HPC应用过程中急需解决的问题。

1 恶意网页动态检测模型

Capture-HPC作为一种高交互度客户端蜜罐,具有很好的恶意网页检测效果。但是在实际的应用过程中,由于互联网应用不断地更新和升级,使得在网页浏览的过程中对系统产生的操作种类越来越多,这就使得Capture-HPC需要不断地人工修改和维护作为判别依据的黑白名单列表,造成了大量复杂的工作量。同时,如果有某几项浏览器良性操作未被列入白名单,会造成Capture-HPC的误判,从而导致非常高的误警率。

因此,本文在Capture-HPC蜜罐的基础上,设计并实现了一种恶意网页动态检测模型,该模型结合Capture-HPC蜜罐系统和日志数据挖掘技术[6,7],旨在提供一种高准确度和稳定度的恶意网页检测框架流程,模型的流程如图1所示。

恶意网页动态检测模型的详细工作原理如下:

(1) 将要检测的URL网页输入蜜罐系统,Capture-HPC通过虚拟的操作系统访问网页地址,并在访问的过程中,监测系统文件、进程、注册表的状态改变情况,记录在日志文件中。

(2) 将产生的日志文件与预先定义的黑白名单进行比较,其中黑名单是恶意操作的集合,白名单是良性操作的集合,若日志中含有黑名单操作或者含有非白名单操作,则暂视为疑似恶意网页,否则判别结果为良性网页。

(3) 将所有疑似恶意网页的日志文件进行k-means聚类分析,最大聚类数k=3,其中含有网页个数最多的视为“正常类”,正常类表征了网页浏览时所进行的正常操作。

(4) 若疑似恶意网页属于“正常类”,则判别结果为良性网页,否则判别结果为恶意网页。

(5) 提取“正常类”的聚类属性特征,这些“正常”属性应为良性操作,将他们自动添加至白名单中,以提高系统判别的准确性。

从恶意网页动态检测模型的流程框图中可以看出,通过提取聚类分析的正常类特征,可以不断地修正黑白名单,进而形成闭环反馈的机制。简而言之,通过增加日志数据挖掘模块,恶意网页动态检测模型主要的优点在于:

(1) 通过聚类分析反馈机制,可以大大降低恶意网页检测的误警率。

(2) 通过提取“正常类”属性特征,可以自动地维护黑白名单列表。

2 日志挖掘序列

恶意网页动态检测模型的设计核心在于日志数据挖掘模块,而Capture-HPC在访问网页的过程中所产生的蜜罐日志文件是未经处理的纯文本文件,因此在对疑似恶意网页日志进行数据挖掘之前,需要首先分析蜜罐日志的结构,并做一定的转换和规定。

2.1 日志结构

Capture-HPC蜜罐日志是虚拟系统在访问网页的过程中对系统进行一系列操作的完整记录。日志主要从文件、进程和注册表三个方面对系统进行监测,蜜罐日志的结构如下:

[Identify] [Time Stamp] [Process] [Access] [Target]

其中,[Identify]表明是文件、进程、注册表这三种操作的标识,[Time Stamp]表明该条操作记录的时间戳,其余的三个元素表明该条操作的具体特征,按顺序分别为[Process]表明产生操作的进程路径、[Access]表明产生的操作类型、[Target]表明操作的对象。

2.2 操作序列

通过对蜜罐日志结构的分析可以看出,一条日志记录表明是在访问网页的过程中,对于虚拟系统进行的一项操作,该操作可能是文件、进程、注册表三者中的一种,由[Identify]进行标识,[Time Stamp]是时间信息,对聚类无作用,因此丢弃。[Process]、[Access]、[Target]是表明操作特征的关键属性,因此对三种属性所有出现的值进行编码。由此,每条日志记录都可以定义成一个原子操作。

定义1 原子操作

原子操作定义为一个五元组σ={S,I,P,A,T},其中:

S为网页地址标识,S=S0,S1,…,Sn;

I为操作方式标识,I=file,procss,registry;

P为操作进程标识,P=P0,P1,…,Pn;

A为操作行为标识,具体值详见表1所示;

T为操作对象标识,T=T0,T1,…,Tn

根据原子操作的定义,一个原子操作σ表明了浏览网页过程中的一项操作,如果我们将所有的原子操作σ按网页地址进行分组,并按时间戳进行排序,就可以将访问一个网页地址的过程中对于系统的所有操作定义为一条操作序列。

定义2 操作序列

操作序列定义为一组按时间戳递增顺序排列的原子操作:

φ={σ1,σ2,…,σn}

其中,σi={Si,Ii,Pi,Ai,Ti}为第i个原子操作,并且对于所有的σi,1≤in,满足以下两个条件:

σs=σs=σs,…,=σn·s

σiσi+1

操作序列φ={σ1,σ2,…,σn}的实例如下:

2.3 挖掘序列

定义操作序列的目的是将纯文本的蜜罐日志转换和规范成可挖掘的序列,但如果直接使用操作序列进行挖掘,会产生较大的误差,其主要的原因可以归纳为两类:

(1) 操作序列长度不同;

(2) 操作序列方式错位。

第一个问题是因为挖掘算法的要求,输入序列的长度必须一致;第二个问题是因为相同位置的操作原子可能属于不同操作方式,从而造成无意义的比较。

解决的办法是,可以根据原子操作方式将操作序列分拆成文件、进程、注册表三条操作序列,并根据序列长度的统计结果确定合适的序列长度n=nr+np+nf,其中nrnpnf分别为各自操作序列的长度。如果操作序列实际的长度小于nrnpnf,则分别使用终止原子补足长度。

定义3 终止原子

终止原子定义为一个特殊的原子操作,用于补足操作序列,σ0={S0,I0,P0,A0,T0},其中:

S0,I0为网页地址标识和对应操作序列的操作方式;

P0,A0,T0为全空值(null, null, null)表明为终止符号。

例如,如果合适的序列长度nr=3,np=2,nf=2,则n=nr+np+nf=7,于是定义2中举例的φ1={σ1,σ2,σ3}转换为挖掘序列如下:

3 实验结果与验证

如前所述,恶意网页动态检测模型使用聚类的数据挖掘方法来修正作为判别依据的黑白名单,主要的目的是为了降低原本Capture-HPC蜜罐系统的误警率。该模型的优化效果需要进行比较和验证。

本文选取了5 000个URL地址作为检测模型的数据源,其中100条为恶意网页。如之前挖掘序列的定义,将访问所有URL地址所产生的蜜罐日志转换为操作序列,并对文件、进程、注册表三条操作序列和操作序列总长度进行统计分析,结果如图2所示。

如图2所示,注册表操作序列长度nr=3、进程操作序列长度np=2、文件操作序列长度nf=5,操作序列总长度n=nr+np+nf=10,如果操作序列的实际长度小于定义长度,则以相应操作方式的终止原子进行补足;如果大于定义长度,该操作序列统计意义上概率很小,因此不会包含在“正常类”中,直接将其丢弃。

根据恶意网页动态检测模型的流程,模型是一个不断迭代的过程,在每一次迭代的过程中,都会将疑似恶意网页的日志文件进行聚类分析,寻找频数最多的“正常类”特征,本文实验中第一次迭代“正常类”的属性特征如表2所示。

从表2中可以发现,这些属性特征都是浏览器在网页浏览中Flash、Sogou、Realplayer等插件的正常操作,因此应将它们加入到白名单当中,而每一次迭代都会产生这些属性,进而逐步地降低系统的误警率,直到无法继续下降为止。

检测模型和原始Capture-HPC的误警率比较如图3所示,模型总共进行了10次迭代,左图比较了两者误警率的绝对值,模型成功地将误警率从27%降到了0.6%;右图以初始误警率为基准,验证了模型成功地将误警率降到了初始值的0.02%,可以说效果十分明显。因此,通过实验结果可以验证本文所提出的恶意网页动态检测模型框架设计是正确的,日志挖掘序列和算法是合理的,误警率降低效果和系统优化是明显有效的。

4 结 语

本文以Capture-HPC蜜罐为基础,设计并实现了一种恶意网页动态检测模型。模型通过对蜜罐日志进行聚类分析的数据挖掘,寻找正常类的属性特征,并反馈修改作为网页判别依据的黑白名单的方法,解决了Capture-HPC实际应用过程中误警率过高的问题。在对蜜罐日志进行数据挖掘的过程中,本文提出了操作序列和挖掘序列的构造方法,并通过实验验证了设计的合理性以及降低误警率的有效性。

本文设计的模型框架虽然以Capture-HPC为基础,但其中利用数据挖掘反馈优化系统的思想同样可以适用于其他蜜罐系统和入侵检测技术。其次,在数据挖掘模块中,本文使用的是聚类分析的方法,这是源于模型旨在降低误警率的初衷而设计的,而鉴于本文提出的操作序列和挖掘序列的设计,同样可用于例如决策树、关联规则等其他数据挖掘算法,例如使用决策树建立恶意网页的分类模型,关联规则挖掘操作原子的相关程度等等都可以作为今后研究的方向。

参考文献

[1]S Frei,T Duebendorfer,G Ollman,et al.Understanding the webbrowser threat:Examination of vulnerable online web browser popula-tions and the“insecurity iceberg”[C].2008.

[2] C Seifert, R Steenson, T Holz, et al. Know Your Enemy: Malicious Web Servers[C].The Honeynet Project, 2007.

[3]Y Alosefer,O Rana.Clustering Client Honeypot Data to Support Mal-ware Analysis[C].KES,2010.

[4]Y Alosefer,O Rana.Predicting Client-side Attacks via Behaviour A-nalysis using Honeypot Data[C].NWeSP,IEEE,2011.

[5] Capture-HPC[OL].2009.https://projects.honeynet.org/capture-hpc.

[6] J Witten,F Frank.Data Mining:Practical Machine Learning Tools and Techniques[M].2nd ed.Morgan Kaufmann, San Francisco, 2005.

网页恶意篡改检测的研究与设计 篇4

中国互联网信息中心(CNNIC)发布《第35次中国互联网络发展状况统计报告》[1],报告中显示,截止2014 年12 月,我国网民规模达6.49 亿,2014 年共计新增网民3117 万人。互联网的普及率为47.9%,较2013年底提升了2.1个百分点。

随着互联网的普及,网络平台已应用到各行各业。但是,随之出现的问题就是网站恶意篡改。360公司云事业部副总经理胡振勇在2015 中国互联网产业峰会表示:2014 年全年,360网站安全检测平台共扫描各类网站164.2 万个,其中被篡改的网站13.7万个,约占扫描网站总数的10.8%。

针对网站的现状,本文提出网页恶意篡改检测的一种方法。针对政府教育类等网站发布恶意信息、传播病毒等问题进行检测,以免发现不及时对公众造成危害。

2 核心技术

2.1 正则表达式

正则表达式[2]是一种对字符串进行操作的逻辑公式。把不规则的字符串,按照一定的过滤逻辑进行过滤后变为规则字符串。正则表达式都能提取出任何一个字符串的特定的部分。不仅对字符串过滤,并且对文本也可以进行操作,比如智能方式替换文本,还可以重新设置文本的格式,正则表达式所提供的方法是简单而有效的。由于正则表达式可以在很多工具中使用,所以很多编辑器都可以使用它来处理文本内容。

2.2 汉明距离

汉明距离[3,4,5]表示两个(相同长度)字对应位不同的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1 的个数,那么这个数就是汉明距离。

比较两个比特串有多少个位不一样,简洁的操作时就是两个比特串进行异或之后包含1 的个数。汉明距在图像处理领域也有这广泛的应用,是比较二进制图像非常有效的手段。

3 系统架构图

互联网用户和黑客可同时通过网络访问网站,如果网站服务器遭到攻击,则网页被篡改,网页篡改检测系统会根据网站服务器中的网页内容和数据库中的内容比对判断是否被更改。系统架构如图11所示。

4 检测流程图

恶意篡改检测流程如图2所示,首先通过网络爬虫程序对网站源码进行提取,然后将获取的网页源代码通过正则表达式分类,针对网页中的文本通过分词,hash,加权,合并,降维,将文本都转换为simhash代码,再通过汉明距离计算文本的相似程度,来判断网页中的文本是否被篡改。如果网页中存在图片,通过感知哈希算法,把每张图片生成一个“指纹”字符串,然后比较不同图片的指纹,如果越接近,图片越相似。

4.1中文分词

中文分词[6](Chinese Word Segmentation) 指的是将一个汉字序列按照一定的规则重新组合成一个一个的单独的词序列的过程。在本文选用Sharp ICTCLAS, ICTCLAS是有中科院计算机研究所研制的,当前世界上最好的汉语词法分析器,Sharp ICT-CLAS是对ICTCLAS进行了调整和提升。

4.2汉明距离的文本相似度计算

通过第二步分词[7,8],运用hash算法把每个词变成hash值,然后按照单词的权重形成加权数字串,把上面各个单词算出来的序列值累加,变成只有一个序列串,把序列串变成0 1 串,形成simhash签名,然后通过汉明距离计算机是否相似。

汉明距离的文本相似度计算,和向量空间模型的计算相比,避开了在欧氏空间中求相似度的大量乘法运算,并且没有采用传统的借用空间的理念,用码字的方法来表征文本信息的特征,提高了计算机速度,有一定的优越性。

4.3感知哈希算法

针对图片是否相同,利用感知哈希算法[9,10,11]的实现步骤:第一步,缩小图片尺寸;第二步,简化色彩;第三步,计算机平均值;第四步,比较像素的灰度;第五步,计算机哈希值,得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。

5 总结与展望

随着互联网的迅速发展,网络安全问题愈加凸显,网页遭受异常攻击并篡改,已经严重影响到网络的健康发展,中国互联网安全的治理和规范是一个急需解决的问题,网页恶意篡改检测的研究是一个不断更新、不断完善的课题,虽然可以对网页中文本、链接以及图片进行篡改检测,但是在检测方法上有待进一步改进和扩展。

参考文献

[1]CNNIC,第33次中国互联网络发展状况统计报告[R].中国互联网信息中心,2014.

[2]Friedl J E F,余晟.精通正则表达式[M].北京:电子工业出版社,2007:1-20.

[3]张启宇,朱玲,孙爱娥.文本相似度的计算[J].电脑知识与技术,2008(34).

[4]金博,史彦军,滕弘飞.基于语义理解的文本相似度算法[J]大连理工大学学报,2005(2).

[5]张焕炯,王国胜,钟义信.基于汉明距离的文本相似度计算[J]计算机工程与应用,2001(19).

[6]黄昌宁,赵海.中文分词十年回顾[J].中文信息学报,200721(3):8-19.

[7]朱小娟,陈特放.词频统计中文分词技术的研究[J].仪器仪表用户,2007(3).

[8]张旭.一个基于词典与统计的中文分词算法[D].成都:电子科技大学,2007.

[9]牛夏牧,焦玉华.感知哈希综述[J].电子学报,2008(7).

[10]张慧.图像感知哈希测评基准及算法研究[D].哈尔滨:哈尔滨工业大学,2009.

启动型恶意代码分析与检测综述 篇5

长期以来,内核态Rootkit针对操作系统内核进行攻击,对系统安全构成了严重威胁。由于其运行在系统内核层,并拥有最高的系统控制权限,可以通过对内核进行一些特定的修改,并在其中添加恶意模块,实现在系统底层为恶意代码的运行提供后门和保护机制,从而成为了一种隐蔽性和破坏性极强的恶意程序。

为了应对这种新的威胁,自从这种恶意程序出现以来,学界针对其进行检测和预防的相关研究在不断深入,对内核代码和数据结构的完整性保护方法也在持续更新。为了提高隐蔽效果,近几年来,内核态恶意代码进一步发展,出现了通过对系统的启动过程进行劫持来加载自身的恶意代码。这种恶意代码把自身存放在操作系统之外,例如BIOS以及其他主板插件的ROM、硬盘主引导区 ( MBR) 等,能够在操作系统启动之前获得运行权,规避操作系统的防护措施,顺利进入并破坏系统,从而提高了其隐蔽性。其部分遵循了传统内核态Rootkit的原理并沿用了实现技术,通过实现操作系统启动劫持,在隐蔽性和破坏力上有了进一步的提高。本文将这种恶意代码称为启动型恶意代码。近几年来出现的一些流行的恶意代码如Stoned Bootkit、 TDL系列、鬼影系列、BMW等都具有启动型恶意代码的特点。

目前针对这种新型恶意代码的研究已经开展,文献[1]介绍了通过修改硬盘MBR对Windows操作系统进行启动的Bootkit,文献[2]介绍了一种通过修改NTLDR系统文件对Windows操作系统进行启动劫持的方法,文献[3]研究了计算机硬件后门的可行性并通过对主板网卡ROM进行修改实现了一个启动劫持的后门原型。这些研究主要针对一些使用特定启动劫持手段的恶意代码如Bootkit进行单独研究,没有对启动型恶意代码作为整体进行分析,在研究思路上也只对专注于其启动劫持方式,没有对这种恶意代码的存储模式、生命周期等进行分析。本文在以上研究的基础上,深入分析了几种典型的启动型恶意程序,重点研究其生命周期的运行原理和技术特点,进一步揭示了启动型恶意程序运行的一般规律和整体视图,并在此基础上对目前检测方法的研究现状和不足进行了分析,提出了改进建议。

1 启动型恶意程序的发展历史

本节将对启动型恶意程序出现背景和发展历史进行简要介绍,通过了解其发展脉络,有助于对其进行整体上的把握。

1. 1 早期雏形( 1990 年以前)

启动型恶意代码出现的历史要远远久于恶意程序,1988年出现的PAKISTANI BRAIN病毒和1989年的Stoned病毒是最早的启动型恶 意代码。这两种病 毒通过感 染硬盘的 引导区 ( MBR) 来感染整个操作系统,但并没有对系统进行后续的破坏。从现在的角度来看,这两种病毒很容易被检测和清除,但它们劫持操作系统启动的特性为后来出像的恶意代码提供了技术思路。

1. 2 发展阶段( 1990———2000 年)

在这一阶段出现了破坏力很强的恶意程序,如1992年的MICHEANGELO和1998年的CIH。这类恶意程序除了利用操作系统MBR进行启动劫持之外,在劫持成功之后还运行了致命性的承载程序对系统进行了破坏,如清除掉系统硬盘数据等。 从技术上来说,由于在此阶段还没有出现恶意程序相关技术,这种恶意程序相比前一阶段虽然在功能上有所增强,具有较大的破坏力,但在隐藏性上并没有较大的改进,仍然不难被检测和清除。

1. 3 Bootkit 阶段( 2000———2010 年)

2000年以后,内核Rootkit和使用Rootkit技术的恶意程序大量出现,Rootkit的隐藏特性使得它成为了操作系统完整性的破坏者。在此期间,出现了结合内核Rootkit和操作系统启动劫持的恶意程序,即Bootkit。这种恶意程序结合了Rootkit出色的隐藏能力、对操作系统内核拥有的高权限和先于操作系统运行自身的能力,凭借这些优势,Bootkit对操作系统安全构成了严重威胁。这一阶段出现的Bootkit有很多,如2009年黑帽大会上由Peter Kleissner展示的stoned Bootkit,2008—2011年欧美国家爆发的TDL系列魔影病毒以及2010年在中国大陆流行的鬼影病毒等。这类程序的共同特点是针对操作系统引导区( MBR) 进行感染; 通过感染MBR进一步感染操作系统启动文件,实现对操作系统的劫持; 通过对操作系统的劫持隐蔽加载恶意程序驱动,从而在操作系统安全机制起作用之前完成恶意程序的加载和运行。这类恶意程序能够有效绕过操作系统的安全机制, 而且,由于其能够对操作系统内核进行修改,甚至破坏恶意软件检测系统赖以生存的系统环境,导致整个操作系统处于一种不可信的状态,使得在线检测方法无法对其进行有效应对。目前针对Bootkit较为有效的检测手段大都采用离线式检测方法。

1. 4 固件 ROM 阶段( 2010———)[4]

由于Bootkit的启动劫持通过感染MBR来实现,使得检测系统可以着重对MBR进行完整性保护来防止感染。在2010年前后,又陆续出现了新的启动型恶意程序,感染目标更加底层化,指向了BIOS ROM、网卡ROM等主板固件ROM。在2009年的黑帽大会上,Rafal Wojtczuk和Alexander Tereshkin展示了如何通过堆溢出漏洞利用程序绕过Inter BIOS的数字签名验证, 对BIOS进行刷新。2011年出现的BMW病毒通过连续感染BIOS ROM、MBR和Windows系统启动文件来获得操作系统控制权,被感染主机在不对BIOS进行处理的情况下无法将其彻底清除。除了BIOS之外,主板上的扩展ROM也是潜在的被利用对象,在系统启动的POST自检阶段,BIOS对各个扩展ROM进行检查,将其中存放的内容复制到内存中,并执行这些ROM中的初始化代码,对扩展ROM进行感染可以获得与感染BIOS同样的攻击效果,并且更加爱隐蔽和难以清除。文献[3]研究了对主板网卡ROM进行感染进而在主机启动阶段对其进行初始化之际感染MBR和操作系统。

目前,在对固件ROM的利用方面,存在的一个前提条件是如何对固件ROM进行刷新。从棱镜门事件中我们可以看出完成这些步骤虽然比较困难,但仍然是可行的,因此利用固件ROM的恶意程序将对操作系统安全构成很大的挑战。

2 启动型恶意程序实现原理

根据启动型恶意程序的运行于活动方式,将其生命周期划分为四个阶段: 操作系统启动劫持、启动中劫持、加载恶意程序驱动以及启动后活动,分别分析每个阶段的实现原理,并在此基础上分析总结其使用的关键技术。

2. 1 启动前劫持

启动前劫持是指恶意代码在计算机加电启动到MBR开始引导操作系统这段时间内获取执行权,对计算机的控制行为。 包括第一阶段对BIOS ROM或其他固件ROM的劫持和第二阶段对MBR以及其它引导程序的劫持,在这两阶段中,计算机运行在实模式下,依靠BIOS中断来执行关键功能。首先,我们对计算机从开始启动到引导操作系统这一过程进行分析。图1展示了计算机启动过程中从BIOS到MBR的引导过程。

在这一引导过程中,包含了两个重要的实模式中断INT 13h和INT 19h。BIOS通过19h中断从软盘、光盘或硬盘MBR中选择一个启动分区,然后使用13h中断将启动分区中的引导程序Bootloader加载到内存中,最后由Bootloader继续引导系统启动。 启动型恶意程序利用系统这一启动方式的特点,采用逐级中断挂钩的方式对计算机在这一阶段的启动进行劫持,其大致的步骤如下:

1) 首先通过某种方式( 如ISA模块) 将恶意模块刷写到BIOS ROM或者其他主板固件ROM当中,替换掉计算机启动时BIOS或主板固件ROM中需要在POST自检阶段运行的正常代码。

2) 系统重启时将运行固件ROM中的恶意代码,恶意代码挂钩BIOS 19h中断,用定制的中断向量替换BIOS原有19h中断向量。

3) 恶意代码将系统控制权交还给BIOS,并由其继续引导计算机正常启动。

4) BIOS在选择启动分区时引发19h中断,被恶意代码定制的中断向量截获。

5) 在新的19h中断处理程序中,恶意代码挂钩BIOS 13h中断,使用定制的13h中断处理程序替换原有13h中断向量,并在新的中断处理程序中加入若干个特征码搜索匹配功能模块。

6) 恶意代码把系统控制权交还给BIOS,并由其继续加载MBR等启动分区中的Bootloader继续引导系统启动。

图2展示了前面所述的劫持步骤,使用这种劫持方式的典型恶意程序是Ice Lord Bootkit,它通过在BIOS ROM中植入恶意模块依次劫持19h和13h中断,进而在操作系统启动之前获得执行权,并通过对13h中断进行挂钩,在挂钩程序中加入了代码特征搜索匹配模块,在下一阶段BIOS通过13h中断加载操作系统文件时,可以再次获取系统控制权并对操作系统内核进行修改。

对主板上其他固件如网卡ROM的利用原理与利用BIOS ROM类似,恶意程序开发者通过将ISA模块刷写到固件ROM, 并替换固件原有的初始化代码,BIOS在POST自检阶段会调用主板上各固件ROM中的初始化程序,这时恶意程序就可以像Ice Lord Bootkit一样获取系统控制权并执行一系列后续操作。

2. 2 启动中劫持

启动中劫持是指从引导程序Bootloader加载操作系统启动文件到系统内核启动完成这一过程中进行劫持。操作系统的启动贯穿了实模式和保护模式,这一阶段之后计算机的运行和操作系统密切相关,并受到操作系统保护。目前出现的启动型恶意程序绝大多数基于Windows系列操作系统,因此在后续的讨论中主要以目前主流的Windows vista/7 /server 2008等Windows Vista family操作系统为例进行启动中劫持分析。

如图3所示,左边的实线流程表示操作系统正常启动的流程,右边的虚线流程表示被恶意程序劫持后系统的启动流程。

在正常的启动流程中,操作系统的启动始于Bootloader加载操作系统启动文件,此时处理器仍然处于实模式,对硬盘的读写依赖BIOS的13h中断处理程序。首先,Bootloader通过13h中断读取操作系统第一个启动文件Bootmgr到内存。Bootmgr由一个16-bit的stub和一个32-bit的PE可执行文件Osloader两部分构成,其中stub运行在实模式下,用于把处理器切换到32-bit的保护模式,并且提供了访问16-bit实模式的接口。当Bootmgr被加载到内存后,首先运行stub,stub读取操作系统的启动配置数据( BCD) ,再跳转到Osloader执行,同时处理器模式切换到保护模式。接着,Osloader加载操作系统的第二阶段启动文件Winload. exe和Ntoskrnl到内存,并跳转到Winload. exe执行。Winload. exe进行系统初始化,然后跳转到Ntoskrnl继续执行初始化。Ntoskrnl是PE格式的操作系统内核映像,系统正是通过Nkoskrnl完成了操作系统启动的大部分工作,加载并运行系统运行所需要的各驱动程序,直到系统启动完成。

启动型恶意程序对于操作系统启动中的劫持,就是在操作系统正常启动的流程中插入实现特定功能的目标代码,通过系统的正常启动,将恶意代码如木马、病毒等以驱动程序的形式, 在不被管理员发现的情况下随着系统正常驱动程序一起加载并运行。而图3右半部分的虚线流程是一种典型的劫持方法, stoned Bootkit就使用了这种方法,大致分为以下几个步骤:

1) Bootloader调用13h中断读取Bootmgr,而13h中断在前述的启动前劫持中已被挂钩,调用13h中断将会使恶意代码获得控制权。

2) 在挂钩的13h中断处理程序中,首先调用正常的13h中断流程把Bootmgr读取到内存中,通过内存特征码查找技术把一段预先选定的特征码替换成call Entry指令,Entry处存放有恶意程序下一阶段运行所需要的一系列代码。

3) 将系统控制权交还给Bootmgr,系统开始正常运行,由stub跳转到Osloader执行,并把处理器切换到保护模式。在保护模式下,系统加载Winload. exe到内存。

4) Osloader在跳转到Winload. exe之前执行到前面的特征码位置,此时特征码已被替换为call Entry指令,因此Osloader跳转到恶意程序的入口地址Entry继续执行。

5) Entry处的恶意代码从Osloader开始的内存地址处通过查找特征码的方式搜索Winload. exe的地址,对Winload. exe进行挂钩,挂钩代码首先执行正常的Winload. exe,将Ntoskrnl加载到内存,然后在内存中查找Ntoskrnl的地址,对Ntoskrnl进行代码修补。

6) 被代码修补后的Ntoskrnl继续引导系统启动,对Ntoskrnl中用于加载驱动的关键函数和内核数据结构进行修改, 利用Ntoskrnl的执行把恶意的驱动程序和系统正常的驱动程序一起加载并运行。

整体上看,操作系统在这一阶段的启动分为实模式和保护模式两个阶段,启动型恶意程序在实模式阶段通过2. 1节中挂钩的13h中断处理程序对这一阶段加载的启动文件进行代码修补,为保护模式阶段再次劫持系统提供入口。在保护模式阶段, 恶意程序对这一阶段加载的启动文件根据需要依次进行代码修补,从而在系统正常启动中再次获取操作系统控制权。恶意程序在对操作系统启动中的整个劫持过程,每一阶段都遵循先读取启动文件,再对其在内存中的映像进行劫持,这一过程的劫持方式可以是挂钩,也可以是代码修补。最后通过Ntoskrnl的运行,将恶意驱动与系统正常的驱动程序一起加载运行。

2. 3 加载恶意程序驱动

在操作系统PE格式的内核映像文件Ntoskrnl开始执行时, 系统执行的实际上是内存中被代码修补过的Ntoskrnl映像。在这个被代码修补过的Ntoskrnl映像中,恶意程序驱动和其他正常的系统驱动一起被加载到了内存,并添加到驱动列表Ps Loaded Module List中,从而通过Ntoskrnl的运行,恶意程序驱动也得以执行。这个过程的关键部分是Hook_Winload对Ntoskrnl进行代码修补,其大致流程如图4所示。

Hook_Winload通过调用内核映像Ntoskrnl中的一系列导出函数,将恶意程序驱动加载到内存,并将其与正常的系统启动驱动链接到一起,从而在Ntoskrnl运行时和系统启动驱动一起被执行。

2. 4 启动后活动

当操作系统启动完成时,恶意程序驱动也随之启动并运行, 该驱动可以具有一个完整运行态恶意程序的全部功能,也可以作为一个临时加载器。通过它来加载其他的恶意程序运行,大体上讲,它可以完成以下几种功能:

1) 作为恶意程序对恶意程序以及自身的活动( 进程、文件、 端口等) 进行隐藏;

2) 进行键盘击键记录等隐蔽行为;

3) 对恶意程序检测系统所依赖的操作系统执行环境进行破坏;

4) 作为加载器引导其它恶意程序加载运行。

2. 5 启动型恶意程序关键实现技术

在前四小节中,对启动型恶意程序按照其在操作系统启动中不同阶段的活动,简要介绍了其主要的执行流程,在每一阶段中,恶意程序都使用了一些特定的技术,其中有些技术是从早期恶意程序就开始大量使用的成熟技术,如挂钩和代码修补,另外一些技术是启动型恶意程序出现以后才开始运用的。

1) 挂钩技术

挂钩技术是从恶意程序出现早期就有的成熟技术,它对内核中的重要函数指针、系统调用入口地址进行替换,从而当这些函数被调用执行时,跳转到其他的地址去执行,而这些地址是恶意程序恶意代码所在的地址。通过挂钩技术,实现了对系统控制流的劫持。启动型恶意程序多处利用了该技术,如实模式下对13h中断的劫持、保护模式下对Winload. exe的劫持等。

2) 代码修补技术

与挂钩不同,代码修补技术不对函数地址直接进行替换,而是在函数体内部对其代码进行修改,使其跳转到恶意程序定制的代码序列执行。需要注意的是,在不了解函数内部工作机理的情况下,代码修补技术和挂钩技术通常在劫持了系统控制流并执行了定制的代码序列之后,还要执行原有的函数,完成系统正常的功能。这是因为恶意程序对操作系统控制流的劫持是有选择性、有目的的劫持,为了实现恶意代码的隐藏,恶意程序只对和自身相关的控制流进行劫持和重定向,而不破坏系统正常运行的功能。启动型恶意程序大量使用了代码修补技术,如实模式下对Bootmgr的修改以及保护模式下对Ntoskrnl的修改等。

3) 内存特征码扫描与定位

启动型恶意程序在操作系统启动阶段为了持续获得执行权,对操作系统启动中加载各启动文件采用挂钩或代码修补方式进行了多级劫持。能够进行这种劫持的一个重要前提就是能够在内存中对劫持点进行定位,如挂钩需要定位内核中函数的地址,代码修补需要在内存的代码块中选择和定位修改点。启动型恶意程序采用了内核特征码的扫描与定位的方法来解决这一问题。

4) 内核导出函数地址提取

为了使恶意的恶意程序驱动能够和正常的系统驱动程序一起随着操作系统启动被加载执行,需要对Ntoskrnl进行代码修补,利用其一系列导出函数将恶意程序驱动加载到内核内存,将驱动文件中的符号重定位并将恶意程序驱动链接到Ps LoadedModule List链表上。完成这些工作首先需要找到Ntoskrnl中各相关导出函数的地址,由于Ntoskrnl是PE格式的文件,因此可以定位其导出表的内存地址,并按照导出函数的哈希值在导出表处进行查找并定位。

5) 代码存储与访存

表1展示了近几年的几个典型的启动型恶意程序在操作系统启动阶段的存储和访存方式,表的第2和第3列分别启动型恶意程序在实模式和保护模式下存储空间的选择,第4和第5列分别表示其在实模式和保护模式下访存方式的选择,第6列表示其访存层次。

启动型恶意程序在存储和访存方式上,主要考虑了三方面的问题: 一是可用空间的大小和方便性的问题,理论上计算机的所有存储空间包括硬盘空间和固件ROM等都是可以利用的, 但实际上固件ROM的存储空间有限且刷写困难,因此启动型恶意程序大都会利用硬盘空间。另外,实模式下计算机的访存依赖13h中断,在保护模式下的访存依赖特定的文件系统。这也限制了恶意程序的访存方式。二是存储和访存的隐蔽性问题。理论上,在保护模式下,由于文件系统的存在,启动型恶意程序可以利用操作系统文件系统存储并使用系统调用来访存, 但为了提高其隐蔽性,启动型恶意程序往往没有采取这种简单直接的方式,而操作系统对硬盘空间的利用往往不够充分,为恶意代码提供了一些可利用的保留空间。例如在Windows操作系统中,硬盘前53个扇区、硬盘最后一个分区结束位置到硬盘最后一个扇区之间都有保留的空间。因此,启动型恶意程序通常选择硬盘的保留空间来存储其文件,并通过实现一个自定义的文件系统来访问。三是单级访存与多级访存的选择问题。为了适应固件ROM和硬盘保留空间大小的限制,启动型恶意程序通常把后续的功能模块的访存安排在恶意驱动启动完成之后, 也就是恶意程序启动完成后的运行阶段,只把启动直接相关的功能模块放在固件ROM和硬盘保留空间当中,采取两级或多级的访存和加载方式,在启动完成之后,再由恶意程序驱动来加载其他的恶意功能。表1展示的几种典型启动型恶意程序存储和访存方式的选择印证了这一点。

3 对启动型恶意程序的检测

目前针对启动型恶意程序检测的研究已经逐渐开展并取得了一些成果。下面对目前已知的检测方法进行简要介绍,主要包括ISA模块完整性检测、MBR完整性检测、中断向量表检测、 基于可信计算的检测等。

3. 1 ISA 模块和 MBR 完整性检测[5]

ISA( Industral Standard Architecture) 是一种旧的系统总线标准,目前已经被PCI( Periphearl Component Internect) 总线标准所替代,但是为了保持与旧主板的兼容性,目前的BIOS仍然保留了对ISA标准的支持,而目前的针对BIOS ROM的启动型恶意程序就是以ISA模块的方式存在于BIOS ROM当中。因此,目前的检测方法根据ISA模块是否存在于BIOS ROM当中来判断BIOS ROM是否被修改。而MBR完整性检测则是针对MBR Bootkit的,主要是采用了传统的完整性检测方法,对系统原始MBR进行备份,然后采用一些完整性检测算法进行判断。

3. 2 中断向量表检测[6]

中断向量表( IVT) 存储了所有中断处理程序入口地址,由于其功能的特殊性,启动型恶意程序多次对其进行了修改,如攻击BIOS ROM的恶意程序修改了INT 13h和INT 19h中断,其中INT 13h被恶意程序用于在实模式下对数据的存取操作,INT 19h中断被用于在BIOS将启动权交给Bootloader时进行劫持。 对中断向量表的检测方法有很多种,例如完整性检测、地址范围的检测等。

3. 3 基于可信计算的检测[7,8]

可信计算的思想是在主板上增加一个名为TPM( Trusted Platform Module) 的芯片,通过TPM芯片,计算机能够在启动过程中从BIOS开始,对启动中的所有引导文件或代码进行完整性检测,并通过检测依次向后传递系统的信任链,通过逐级传递的方式确保之后启动的硬件和运行的代码都是安全可信的。而启动型恶意程序不可避免地要对一些计算机长期存储的代码或文件进行永久性修改和破坏,可信计算正是通过这种思想对启动型恶意程序进行检测。

但是,目前针对启动型恶意程序的检测仍然存在一些问题。 例如ISA模块检测只能对采用ISA方式破坏BIOS ROM的攻击进行检测,目前的BIOS已经开始逐渐被UEFI BIOS所替代,而针对UEFI的攻击也已经出现,目前的检测方法对其无效。从根本上说ISA模块检测方法只关注了BIOS ROM的刷写方法, 依赖和恶意程序无关的工程方法,没有从启动型恶意程序挂钩13h和19h中断的原理入手,无法对其进行准确定位。针对MBR的完整性检测只能针对MBR Bootkit,无法应对针对BIOS ROM等固件ROM的攻击,中断向量表检测和基于可信计算的检测也面临同样的问题。总体上讲,在启动型恶意程序技术特点鲜明的情况下,目前的检测技术没有对这些特点进行准确把握和应对,大都采用了完整性检测这种相对粗放式的应对策略, 具有较大的改进空间。

另外,目前检测方法普遍存在的一个突出问题是过于依赖在线检测,而由于恶意程序可以对操作系统进行任意的修改,因此检测系统其检测手段所依赖的系统调用、中断处理程序、内核数据等都有可能是被恶意程序修改过的,检测结果不够准确,粗放式的完整性检测与在线检测的不可信一起造成了目前针对启动型恶意程序检测效果不够理想。

4 结 语

本文主要分析了近年来出现的基于操作系统启动的恶意程序实现原理、技术特点,按照其在操作系统启动不同阶段的活动进行了较详细的论述,并对目前检测技术的现状和不足进行了简要分析。

从恶意代码检测现状来看,内核恶意程序仍然是目前网络和系统安全的重要威胁,长期以来,在成熟的商业产品中,对于恶意程序的检测一直依赖于类似传统病毒的特征码检测方法,这种方法无法应对功能强大的新型0day恶意代码。目前,基于操作系统启动阶段劫持的恶意程序已经成为了安全领域的最新威胁,其先于操作系统和安全软件启动并绕过系统安全机制; 根植于硬件ROM当中难以引起用户注意,发现后也难以清除; 具有传统恶意程序藏身于操作系统内核、破坏内核数据的隐蔽性。 所有这些特性使其成为了一个难以应付的敌手,并且已经被近几年的一些功能强大的其他恶意程序广泛使用,如何有效应对这种威胁是安全领域面临的一个亟待解决的问题。

根据目前的分析,启动型恶意程序检测难点主要集中在两处: 一是其能够劫持操作系统并先于系统启动,从而根据需要随意修改内核代码并绕过操作系统的安全机制; 二是其根植于操作系统内核,具有和系统内核一样的权限,使得普通的在线检测模式无法拥有一个可信的运行环境。针对第一点,目前Windows 8操作系统有效利用UEFI BIOS和操作系统的签名验证机制,相对于之前的系统有了很大的进步。虽然针对UEFI BIOS的攻击仍然存在,但有效提高攻击者的代价和难度仍然是安全领域取得的进步,并且安全厂商对此仍在不断改进。另外,针对启动型恶意程序的技术特点我们可以对传统的检测手段做出改进,例如启动型恶意程序很大程度上依赖固件ROM和硬盘保留空间的存储,并且在实模式下依赖BIOS的中断处理程序,检测系统可以在相对地对固件ROM、硬盘保留空间加强监控和保护,以提高检测效果。针对第二点,目前在线检测无法保证检测效果的可信,因此,检测系统应该尽量采用离线检测的方式并结合蜜罐、沙箱等虚拟执行环境对其进行隔离培养,通过离线的静态分析与虚拟隔离环境下的动态执行,能够比传统的检测手段提供更好的检测效果。

摘要:内核态恶意代码作为破坏操作系统内核,隐藏其他恶意代码的一种恶意程序,已经成为了操作系统安全的重要威胁。近年来出现的一种新的伴随操作系统启动加载的恶意程序通过对计算机启动过程进行劫持,在操作系统启动完成之前实现自身的加载和运行。其结合了普通内核级恶意代码特点和优先于操作系统启动并根植于系统硬件等优势,比普通内核级恶意代码具有更强的隐蔽性和破坏性。分析这种新型恶意代码。首先对其技术发展进行梳理,然后重点针对Windows下典型的启动型恶意代码,分析其在操作系统启动过程的不同阶段中环环相扣的实现技术原理。最后分析了目前检测技术现状,指出现有的检测方法过于依赖在线检测和完整性检测,从两方面提出了改进建议。

恶意应用检测 篇6

网络的普及为恶意代码传播带来了巨大的方便。通过网络, 恶意代码容易实现大规模的传播, 给网络安全带来巨大威胁。如果能通过对网络传输包的分析, 检测出恶意代码的传播, 对预警恶意代码的大规模爆发具有重要意义。

目前流行的恶意代码检测方法, 主要有基于行为的和基于特征码的恶意代码检测方法, 以及混合型的检测方法。传统的反病毒软件, 大多基于特征码, 其主要思路是, 通过静态扫描文件内容, 将文件内容和特征库中的特征进行匹配。因此, 特征码的提取是这种检测方法的技术核心, 一般通过对恶意代码进行逆向分析, 提取具有恶意代码特征代码段的方法获得。特征码检测方法的优点是, 对特征库中存在的恶意代码具有非常高的检测成功率, 能精确地检测出恶意代码的类型甚至是恶意代码的具体名称, 能在恶意代码首次进入计算机的时候而不是恶意代码运行以后进行检测。其缺点也很明显, 需要频繁更新特征库, 不能检测未知和变形的恶意代码, 对于恶意代码的每一种变形, 都需要在特征库中加入相应的特征, 才能检测对应的恶意代码, 导致特征库过于庞大。另一类基于行为的恶意代码检测方法, 是在程序代码运行期间, 监视其行为, 当程序的行为触发预定义规则的时候, 发出警报并挂起恶意行为。这种检测方法的优点是能检测未知和变形的恶意代码, 不需要频繁的检测规则库更新, 但是它的误报率和漏报率相对特征码检测方法要高, 且必须恶意代码运行在系统中以后才能检测。由于基于特征码检测方法在检测效率和准确率等方面的优势, 相对于基于行为的检测方法得到了更广泛的应用。

由于恶意代码在网络中传播的时候, 与正常网络通信行为无任何差异, 并不会表现出任何恶意行为, 所以基于行为分析的检测方法不能用于检测在网络上正在传播中的恶意代码。特征码检测方法可以用于检测通过网络传播中的恶意代码, 但是在大流量网络中对网络数据包进行还原, 存在时间和空间开销问题, 而且传统的特征提取方法提取的特征往往过长, 在网络传输中, 这些特征很容易被分割到多个网络数据包中, 导致检测失效。另外, 现在的恶意代码的种类层出不穷, 数量越来越多, 导致特征库也越来越庞大, 特别是在对网络数据包检测时, 匹配特征库花费的时间过长, 要么会影响网络的吞吐量, 要么会导致丢包率过高, 漏报率提升。

本文提出非包还原恶意代码检测的特征码提取方法 (Non-Packets-Reducing Based Malware Signature Extraction Method, 以下简称NPR恶意代码特征提取方法) , 采用了自动化与人工相结合的恶意代码分类方法、基于片段的恶意代码特征提取, 以及基于覆盖范围的特征码筛选技术, 在一定程度上解决了上述问题, 实验结果表明, 效果较好。

2 NPR恶意代码特征码提取方法

NPR恶意代码特征提取方法, 其基本思想是对恶意代码样本库中的恶意代码进行分类, 然后对每一类恶意代码提取若干能表征此类恶意代码的特征码, 最后对提取到的特征码进行筛选, 选择满足条件的特征码来构建特征库, 如图1所示。这种方法的优点是, 能显著减小特征库的规模, 明显减少匹配特征库的时间花费, 同时有效降低特征码因为文件被分割被截断的概率, 降低漏报率。

2.1 自动化与人工相结合的分类

对恶意代码样本按相似性进行分类, 这是NPR特征码提取方法的第一步, 也是关键步骤, 只有对恶意代码进行准确的分类, 后面才能提取得到同一类恶意代码的共同特征。

对于恶意软件的相似性, 即分类准则, 我们采用 (加载方式、自身的隐藏、对硬件和系统注入、复制与传播、危害系统功能) 五个方面进行表征, 对于不存在某一或某些方面功能的情况, 该项可以空缺。

具体实施的时候, 如果采用人工方式进行分类, 可以准确掌握恶意软件的功能和技术特点, 实现对恶意软件的精确分类。但是由于恶意代码的数量巨大, 这样做工作量巨大, 需要大批训练有素的工程人员, 成本较高。也可以采用开发自动分类系统, 进行自动化分类, 但是由于自动分类缺乏对代码语义的解析, 可导致分类不够精确。我们采用机器辅助人工分类的方法。为了提高分类的效率, 借助了开源虚拟机进行开发。自动分类系统先对开源的虚拟机进行裁剪, 去掉不必要的功能, 以提高虚拟机的运行效率, 然后在虚拟机中安装相应的操作系统, 将内核模式的监控程序加载到操作系统内核, 以监控恶意软件加载和运行过程的特征, 最后让恶意软件在虚拟机中运行起来, 把具有相似特征的恶意软件归为疑似同一类恶意软件。采用这种方法实现对恶意软件进行自动分类的技术优势是分类速度很快, 同时通过监控虚拟机可以获得程序执行时底层的信息, 准确性相对较高。最后分析人员对自动分类系统的结论进行核实, 实现恶意软件的准确分类。

2.2 基于片段的特征码提取

传统方法提取的恶意软件特征码, 是在恶意软件的整个空间范围内寻找能唯一标识的该恶意软件的字段, 这些字段构成了其特征码。因此, 采用这种方法得到的恶意软件的特征码具有全局性, 在使用特征码进行匹配时, 匹配的范围要求使用整个恶意软件。

基于NPR特征码提取方法与此不同, 它是对恶意软件的片段进行特征码提取。对于提取到的较长片段恶意软件特征码, 由于获得的信息比较全面, 因此误报率相对较低, 但进行检查时也要求使用较长的恶意软件片段, 否则其漏报率将显著提高;相对的, 对于提取到的较短片段恶意软件特征码, 由于要求的信息较少, 因此误报率相对较高, 但在检测时不需要获得恶意软件的完整样本, 在只能获得较短的恶意软件片段时也能获得较好的检测效果。

基于片段的特征码提取思路是, 按照前述恶意软件分类方法, 同一类的恶意软件必定有相似的代码段片段, 或者相似的特殊指令的调用。这种NPR特征码提取方法采用静态启发式技术来进行特征码的提取, 主要是因为静态启发式技术能进行代码级的分析, 对未知的恶意软件也有一定的检测能力。

因此, 可以对每一类恶意软件的特征代码段采用静态启发式分析技术进行代码级的分析, 模拟代码执行逻辑, 提取若干条特征码。由于是对每一类恶意软件相类似的代码段进行特征提取, 这样的特征码具有通用性, 在一定程度上避免了为每一个恶意软件提取一个或多个特征, 导致特征库过于庞大的问题。采用代码静态启发式分析技术提取的特征码视为某种语义行为的操作序列, 可以是连续的代码序列, 也可以是由通配符连接的多个代码序列。

为了更好地在漏报率和误报率之间做好平衡, 使其误报率、漏报率和检测成功率都控制在合理的范围之内, 需要在为NPR特征提取方法获得的特征码中引入采用传统方法提取的特征码中没有的参考量, 即特征码在恶意软件中的跨度。本文使用特征码的覆盖范围的概念, 来精确表示每条采用NPR特征码在恶意软件中的跨度。所谓特征码的覆盖范围, 是指在采用NPR特征码提取方法获得的特征码的第一条指令和最后一条指令在恶意软件中的实际间隔长度, 单位用字节表示。特征码覆盖范围的信息需要在构建特征库的同时进行收集, 并取每一条特征所对应的恶意软件片段的最大值。

2.3 基于覆盖范围的特征码筛选

最后一步是对提取到的每一类恶意软件的通用特征码进行筛选。如果提取到的特征码的覆盖范围越小, 在恶意软件通过网络传输时或者将本身代码分段注入到其他系统文件中时被分割的几率就越小。

因此筛选的最重要的依据是特征码的覆盖范围。特征码的覆盖范围表示了特征码在理想状况下能够识别恶意软件所需要的最短的片段长度。特征码的覆盖范围越小, 说明它工作需要的特征码片段的长度越短, 在实际应用中该特征码被分割的可能性也越小, 检测的成功率越高。因此在提取特征码和筛选特征码时要尽量挑选覆盖范围小的特征码。在对每一类恶意软件提取到的通用特征中选择特征码覆盖范围小特征码来构建特征库;在特征码覆盖范围相似的情况下, 可以优先选择特征码长度相对较小的特征码来构建特征库。这样不仅可以有效降低特征码被分割概率, 也能在一定程度上减小特征库的规模, 提高匹配特征库的效率。

3 实验设计与实验结果分析

为了测试NPR恶意代码检测的特征的性能和效果, 从恶意软件样本库中随机选择1000个恶意软件样本, 大小为3GB的文件组成测试样本, 设计两个实验来测试检测效果。

3.1 不同特征码的覆盖范围

本节统计了基于恶意软件分类的检测引擎使用的特征库中, 恶意软件的加载方式、自身的隐藏、对硬件和系统的注入、复制与传播、危害系统功能的五大类型特征码的覆盖范围的分布情况, 结果如图2所示。

由图2可以发现, 随着样本覆盖范围的增加, 五大类型的特征码覆盖比例也在增加。除恶意软件危害系统功能类的特征码外, 其他四种类型的特征码中, 覆盖范围小于400字节的特征码占该类特征码总数的比例均超过10%。覆盖范围小于800字节时, 除恶意软件危害系统功能类的特征码外, 其他四种类型的特征码均超过总数的30%。恶意软件危害系统功能类特征码的覆盖范围较大, 覆盖范围小于1400字节的特征码超过了该类特征码总数的40%。

覆盖范围只是理想状态下进行检测的理论上最小的恶意软件片段的大小, 在实际工程应用中, 由于恶意软件的片段长度过长, 有效的恶意代码段可能被分割, 导致检测失败。对于实时性要求高的系统, 为了提高运行效率, 需要确定多长的恶意软件片段才能进行有效检测。对实时性要求不高的应用可以将引擎接受的恶意软件片段的最小长度设为特征库中覆盖范围最小的特征码的覆盖范围。为此, 需要统计恶意软件样本库中的样本在分割成小片段情况下的检测情况, 为获得实际应用环境下, 能有效检测恶意软件片段的最小长度提供实验支持。

3.2 不同特征码长度的漏报率

本文采取的获得有效检测恶意软件片段的长度下限的方法是将恶意软件样本库中的样本均匀的分成较小的片段, 然后使用对应的特征码对其进行检测, 统计每一类特征码在目标片段大小不同时的漏报情况, 以此来为检测引擎最小有效识别片段大小的设置提供依据。在实际应用中, 应该以对检测的实时性要求和实际可以截获的恶意软件片段的长度等实际情况来设置检测引擎读取恶意软件片段的最小长度。统计的实际情况如图3所示。

从图3中可以发现, 随着恶意代码片段的增加, 漏报的情况逐渐降低。以加载方式类特征码漏报率降低最为明显, 危害系统功能类特征码漏报率降低最不明显。以硬件和系统注入类的特征码为例, 在将恶意软件样本按顺序划分为大小为800字节的多个片段时, 漏报率最低的, 其漏报率接近80%;片段大小为600字节时, 其漏报率超过85%;片段大小为400字节时, 其漏报率超过97%。

因此, 对于特征码检测引擎所接受的恶意软件片段的最小长度, 需要根据具体的使用环境和对实时性的要求确定。综合分析表明, 根据具体使用环境及对实时性的要求, 基于NPR的检测所设置的恶意软件片段要求, 最小不少于512个字节, 如果片段长度短于512个字节, 检测引擎应丢弃该片段并返回进行下一目标片段的检测。

4 结束语

本文提出的基于NPR的特征提取方法, 在一定程度上解决了传统的特征码检测方法缺乏对小段恶意软件片段的识别能力, 和特征库过于庞大而导致的检测效率低的问题, 对小段恶意软件片段具有一定识别能力, 但同时也增加了漏报的可能性。因此还需进一步研究如何继续提高对小段恶意软件片段的识别能力和降低漏报率的方法。

参考文献

[1]李晓勇, 周丽涛, 石勇, 郭煜.虚拟行为机制下的恶意代码检测与预防.国防科技大学学报, 2010年1期.

[2]陈洪泉.恶意软件检测中的特征选择问题[J].电子科技大学学报, 2009, 38:53-56.

[3]金庆, 吴国新, 李丹.反病毒及特征码自动提取算法的研究[J].计算机工程与设计, 2007, 28 (24) :5863-5866.

[4]陈健, 范明钰.一种基于恶意软件分类的特征码提取方法.计算机应用, 2011.

[5]王蕊, 冯登国, 杨轶, 苏璞睿.基于语义的恶意代码行为特征提取及检测方法.软件学报, 2012年, 23 (2) .

[6]DAI Jian Yong, GUHA R, LEE J.Efficient Virus Detection Using Dynamic Instruction Sequences[J].Journal of Computers, 2009, 4 (5) :3-6.

[7]Levine John, Grizzard Julian, Owen Henry.A methodology to detect and characterize kernel level rootkit exploits involving redirection of the system call table[J].Proceedings-Second IEEE Information Assurance Workshop, 2004:107-125.

[8]Levine John G, Grizzard Julian B, Owen Henry L.Detecting and categorizing kernel-level rootkits to aid future detection[J].IEEE Security and Privacy, 2006, vol (4) :27-32.

恶意应用检测 篇7

关键词:模型检测,混淆,逻辑,恶意代码

0 引言

恶意代码检测技术是信息安全领域的研究重点,传统的基于特征码签名的代码检测方法检查手段单一,对于采用代码变形、混淆等技术[1]的恶意程序漏报率较高。为此,研究人员提出基于行为的检测方法[2],利用代码在混淆前后保持行为等价的特性进行检测。

目前代码行为特征主要有两类表示方法:一种是基于指令序列的表示方法,如Christodorescu.M等人[3]将指令序列抽象为语义模板等,此类方法对于诸如垃圾代码插入、寄存器替换等简单的混淆手段有效,但是仍无法对抗等价指令替换等混淆技术。另一种表示法是基于程序调用API的情况,如用API调用序列、函数依赖关系图[4,5]等构造行为特征,虽然提高了对指令混淆的检测能力,但是也面临着垃圾函数插入等针对函数混淆的挑战。

模型检测是一种基于时态逻辑的形式化验证技术,它通过穷举模型的状态空间来检验系统是否满足期望的性质。在诸多的验证方法中,模型检测凭借自动化程度高、实用性强等优点广泛应用在硬件设计和通信协议等领域,并在漏洞挖掘、安全性检测等软件领域也有很大进展。Kinder.J等人[6]利用计算树谓词逻辑公式描述恶意行为,将反汇编代码的指令序列构造为程序模型进行检测,这种以指令为单位构建模型的方式容易导致状态空间爆炸的问题;文献[7]用线性时序逻辑描述与安全相关的API调用,以此作为基础进行模型检测,但是这种方法只刻画了API之间时序的先后,未能描述API之间的参数关联,因此存在被API混淆绕过的风险。

本文提出了一种基于模型检测的恶意代码识别方法,用一组具有依赖关系的API函数描述恶意行为,引入谓词时态逻辑PTL(Predicate Temporal Logic)描述API调用的参数约束、数据依赖以及时序关系等属性,从而构造出用于模型验证的PTL公式;通过对API调用的监控和敏感数据的分析,构建程序的系统调用轨迹并利用转换算法生成以谓词为标记的Kripke结构,在此基础上,通过模型检测算法验证PTL公式的满足性以确定程序是否具有恶意行为。实验结果表明本方法对于采用混淆后的恶意代码具有较好的识别能力。

1 恶意行为描述

API函数是应用程序与操作系统交互的接口,程序通过AP函数的调用实现对系统资源的使用,因此用单个或一组API调用表示程序的行为是常见的行为描述方法。在代码分析与检测过程中,我们只关注与安全相关的关键API调用(critcal API calls)[8]。为了将一组具有依赖关系的关键API调用描述为可用于模型检测的逻辑公式,我们引入了谓词集合P表示API函数、参数约束及数据依赖等原子属性。

谓词集合P={PA,PC,PD},其中PA,PC,PD分别表示函数谓词子集、约束谓词子集和依赖谓词子集,各谓词子集定义如下:(1)函数谓词子集PA::={syscall(po,p1,p2,…,pm)}中的谓词syscall表示调用的关键API函数名,m为该函数的参数个数,变量po表示返回值,pi(1≤i≤m)表示第i个参数变量;(2)约束谓词子集PC::={Loc(li),Is Value(p,c)}表示API函数的约束条件,通常与函数谓词成对出现,其中谓词Loc表示对应函数的调用位置,其变量li为函数的唯一标识,谓词Is Value表示对应函数的参数p取值等于常量c,常量c为字符串型或整型;(3)依赖谓词子集PD::={Taint(li,p,lj,q),Equal(li,p,lj,q)}用于定义关键API调用之间的数据依赖关系,其中谓词Taint表示函数标识号为li的参数p定义的数据被函数标识号为lj的参数q所使用;谓词Equal表示函数标识号为li的参数p与函数标识号为lj的参数q的值相等。

在上述定义的谓词集合基础上,通过引入逻辑关系符“∧,∨,”、时态算子“EF”和限定词就能够表达一组关键API调用的内在属性及关系属性,将较为复杂的恶意行为形式化为相应的PTL公式。下面给出PTL公式的语法结构:

令Φ,Φ1,Φ2为PTL公式,原子公式p∈P,将变量限定在公式的一定范围中,EFΦ表示“将来存在一个可达状态s满足Φ”。下面从模型M在何种条件下满足公式Φ的角度给出PTL的语义解释,首先给出程序模型的定义。

定义1程序模型M=(S,R,L)是一个Kripke结构,其中S为状态集合,表示状态之间的迁移关系,L:S→2P为状态标记函数。

设M=(S,R,L)是关于谓词时态逻辑的一个模型,s∈S,Φ,Φ1,Φ2为PTL公式,约束变量x的定义域为T。PTL公式的语义解释如下:

(1)M,s|=p当且仅当p∈L(s);

(2)对于所有的t∈T,使得

(3)存在t∈T,使得

(4)

(5)M,s|=Φ1∧Φ2当且仅当

(6)M,s|=Φ1∨Φ2当且仅当M,s|=Φ1∨M,s|=Φ2;

(7)M,s|=EFΦ当且仅当存在一条以s开始的路径π:

下面以病毒mydoom.bh的自我复制行为为例说明PTL公式。该病毒通过Get ModuleFileName和Get System Directory函数实现对病毒文件的路径和系统目录的获取,然后利用Copy File函数将自身复制到系统目录下。三个函数的参数约束及依赖关系转化为PTL公式如下:

公式第1行中定义的变量作用于整个公式的范围,第2至4行分别定义了三个系统函数以及参数约束条件,其中第2行的Is Value谓词说明了其对应函数的第1个输入参数的值必须等于0。第5行限定了三个函数之间的数据依赖关系,包括规定标识为l1的函数的参数p与标识为l3的函数的参数q值相等,标识为l2的函数的参数r与标识为l3的函数的参数t存在依赖关系。第6行说明了三个函数之间的时序限制,表明函数GetModuleFileName与GetSystemDirectory之间并没有严格的时序要求,但它们都必须在函数CopyFile之前调用。

2 软件行为建模

为了检测验证属性的满足性,必须将目标二进制程序抽象或转化为特定的软件模型。本文提出了一种基于系统调用轨迹的建模方法:通过收集程序运行时的关键API调用的信息,生成程序的系统调用轨迹,利用谓词转换算法将执行轨迹转换为Kripke结构。下面对建模过程详细描述。

2.1 系统调用轨迹的生成

首先给出系统调用轨迹的定义。

定义2系统调用轨迹是指程序运行过程中调用的关键API函数序列,记为有向图G=(V,E)。其中V为节点集合,节点vi∈V表示程序运行时调用的关键API函数,记为四元组vi=(loc,syscall,pvalue,taint),其中loc表示函数的虚拟地址,syscall表示函数的名称,pvalue表示函数调用时各参数的具体值,记为(po=Vo,p1=V1,…,pk-1=Vk),其中pi(i≤k)为第i个参数名称,Vi为pi的具体值集合,taint为一个四元组(locj,pj,loc,pi),表示虚拟地址为locj的函数参数pj定义的数据被本函数的参数pi所使用。E为有向边的集合,边e=(vi,vj)表示vj为vi紧邻的下一个关键API调用。

在系统调用轨迹中,虚拟地址、函数名及具体的参数值可以通过对系统函数的监控直接获得,但是函数间的数据依赖关系需要对函数参数进行数据流分析才能够确定。我们为此采用了污点分析技术[8]。污点分析技术先将敏感数据标记为污点,然后根据污点传播规则计算污点源的传播路径,以此为依据提取系统函数之间的数据依赖关系。为了便于描述污点选择策略和传播策略,给出如下规则:

规则1若PTL公式Φ存在谓词Taint(l1,x,l2,y),设Loc(l1)对应的函数名称为sname,则在系统调用轨迹中所有函数名为sname的参数x均被标记为污点。

规则2设系统函数F={Pin,Pout},其中Pin为输入参数,Pout为输出参数(含返回值),若Pin为污点,则标记Pout为Pin的污点。

初始污点依据规则1进行选择,当初始污点标记完成后,通过对代码执行过程实现指令级的监控,按照污点传播规则记录污点传播路径。污点传播规则分为指令传播规则和函数传播规则:指令传播规则根据指令的类型进行编写,主要针对运算类型的指令和内存操作的指令。函数传播规则针对具体的系统函数而制定,如规则2所示。根据污点传播规则,设函数F1的调用地址为l1,函数F2的调用地址为l2,若F1的参数x为污点,F2在污点x的传播路径上且被污染的数据为其参数y时,则将依赖信息taint(l1,x,l2,y)记录在函数F2的节点信息中。图1展示了病毒Autorun.fq的部分系统调用轨迹。

从图1中可以看到,系统调用轨迹记录了关键API调用的详细信息,执行的时序以及数据依赖关系。其中节点6有多个孩子节点的情况表明该节点被多次调用。接下来的主要工作是将系统调用轨迹转换为可用于验证属性的程序行为模型。

2.2 程序行为模型的转换

系统调用轨迹记录了程序执行过程中关键API函数的详细信息及数据依赖关系,通过对这些信息的分析,可以构建用于检测恶意行为的程序行为模型。

根据模型M的定义,由系统调用轨迹G到程序行为模型M的转换可以按如下方法实现:G中的节点集V直接转换为M中的状态集S;G中的有向边集E直接转换为状态之间的迁移关系R;状态标签L由谓词对应的原子命题构成,一些原子命题可由节点信息直接转换,如函数谓词syscall、约束谓词Loc以及依赖谓词Taint等,其他谓词如Is Value、Equal等则需要在对节点信息分析的基础上转换,为此我们提出PTL公式为引导的谓词转换算法。谓词转换算法的伪代码如算法1所示。

算法1谓词转换算法Trans Predicate

算法的第1行提取当前节点中的函数名sname和位置信息locx,第2~4行在PTL公式集中搜索包含sname的公式Φ,确定与sname函数参数绑定的其他谓词;第5~9行则是对约束谓词为Is Value的处理,若当前节点满足该谓词的约束条件则返回Is Value标签;第10~17行实现谓词Equal的处理,首先根据谓词Equal(locx,p,locy,q)确定由p污染的函数名为corsname,若在G图中找到由函数名sname为起点的路径上,存在函数名为corsname的节点u,且v节点中参数p与u节点的参数q的值相等,则返回标签Equal;其他情况下返回空值。按照上述行为模型转换方法,可以得到图1所示系统调用轨迹的转换模型,如图2所示。

至此,本文用PTL公式Φ表示程序的恶意行为,根据程序的系统调用轨迹构建程序行为模型M,将程序是否具有恶意行为的判断过程转换为验证M,s|=Φ的可满足性问题。利用文献[10]给出的标记算法作为模型检测算法最终完成恶意行为的检测。

3 实验仿真

3.1 系统实现

根据以上思想,我们实现了恶意行为检测系统的原型系统MBDS(Malware Behavior Detection System)。图3给出了MBDS的体系框架,该系统由三个主要组件构成:模型构建组件负责分析程序与建模,它建立在订制的Qemu[11]仿真器上,仿真器中安装了Windows XP SP3操作系统。通过仿真器提供的回调函数实现对指定关键API调用的监控以及敏感数据的污点分析,最后生成程序行为模型;恶意行为规范库由不同类别的行为构成,每一类行为由多个PTL公式构成,表示代表实现该行为的不同方法。公式是在对大量恶意代码样本分析的基础之上手工构造而成。模型检测器以程序模型M和PTL公式Φ为输入,通过标记算法进行验证,若M,s|=Φ,则返回值为真,表示检测程序具有恶意行为且给出Φ代表的行为,否则为返回值为假。

3.2 实验测试

为了验证MBDS检测恶意行为的准确性,我们分别安排了三组实验。

第一组实验测试MBDS对常见恶意代码的识别能力。实验选择的样本来自Vx Heaven[12]提供的病毒样本库。我们以自我复制行为作为特征对样本进行检测并对实验结果进行分析。表1给出了三种采用不同API调用组合实现的自我复制的方法所对应的PTL公式。在模型构造过程中,为了将程序模型的状态数量控制在有限范围内,我们设置了10秒钟为程序运行时限,超过时限仍在运行的程序将被主动终止。表2展示了样本对自我复制行为的检测结果。

表2的数据主要包括代码运行调用的关键系统调用数、行为模型的状态数、检测结果以及被满足的PTL公式序号。从实验的结果可以看出,删除重复调用的关键API函数后,模型状态总数比API调用数量少得多,这有利于提高检测算法效率。多数样本被检测出一种或多种自我复制行为,个别样本(如ghost)将代码硬编码后保存在文件体中,执行时通过读内存的方式直接写入新建文件,该操作被归类到“创建文件”行为而没有归类于“自我复制”行为。

第二组实验为了检测MBDS对抗混淆技术的能力,并与NOD32、卡巴斯基(KAV)、诺顿(Norton)等杀毒软件进行了对比。我们选取了一个开源的病毒样本netsky.ae,通过垃圾代码插入、寄存器变换、指令乱序、等价指令替换、插入垃圾调用以及综合多种手段等混淆方式对代码进行了修改,生成了不同变种。测试结果如表3所示。

从表3的数据可以看出,对于当前杀毒软件使用以特征签名匹配为主,系统调用序列匹配为辅的检测手段,仅依靠一种混淆技术很难绕过检测。但是,如果综合采用多种混淆手段,尤其是等价指令替换与插入垃圾调用相结合的方法则可成功绕过大多数杀毒引擎。通过实验结果可见,相比较于传统的检测手段,本文提出的基于模型检测的恶意行为识别方法更具优势。

4 结语

本文提出了一种基于模型检测技术的恶意代码识别方法。相较于用线性时态逻辑(LTL)和计算树时态逻辑(CTL)描述的恶意行为,本文采用谓词时态逻辑刻画的API函数的属性更加丰富,因此能够描述更为复杂的行为。实验结果说明了本方法不仅能够验证代码的恶意行为,而且相较于传统的杀毒软件能够更有效识别经过混淆后的恶意代码。

由于本文是采用代码运行过程中获得系统调用轨迹的方式,因此只覆盖了程序的一条执行路径,所构建的程序行为模型并不完备,可能会出现恶意行为漏报的情况。下一步的工作将重点研究代码多路径发掘,在此基础上期望构建更完备的程序模型,降低检测的漏报率。

参考文献

[1]Sebastian Schrittwieser,Stefan Katzenbeisser.Code Obfuscation against Static and Dynamic Reverse Engineering[C]//Proceedings of the 13th international conference on information hiding,Vienna,Springer-Verlag Press,2011:270-284.

[2]Konrad Rieck,Philipp Trinius,Carsten Willems.Automatic analysis of malware behavior using machine learning[J].Journal of Computer Security,2011,19(4):639-668.

[3]Christodorescu M,Jha S,Seshia SA,et al.Semantics-Aware malware detection[C]//Proceedings of the 2005 IEEE Symposium on Security and Privacy,Washington,DC,USA,Springer-Verlag Press,2005:32-46.

[4]Younghee Park,Douglas Reeves,Vikram Mulukutla.Fast malware classification by automated behavioral graph matching[C]//Proceedings of the Sixth Annual Workshop on Cyber Security and Information Intelligence Research.New York,NY,USA,ACM Press,2010:Artical No.45.

[5]Martina Lindorfer,Clemens Kolbitsch,Paolo Milani Comparetti.Detecting Environment-Sensitive Malware[C]//Proceedings of the 14th International Symposium RAID,Menlo Park,CA,USA,SpringerVerlag Press,2011:338-357.

[6]Kinder J,Katzenbeisser S,Schallhart C,et al.Detecting malicious code by model checking[C]//Proceedings of the Second International Conference on Detection of Intrusions and Malware,and Vulnerability Assessment.Vienna:Springer-Verlag Press,2005:174-187.

[7]张一弛,庞建民,范学斌,等,基于模型检测的程序恶意行为识别方法[J].计算机工程,2012,38(18):107-110.

[8]王蕊,冯登国,杨轶,等,基于语义的恶意代码行为特征提取及检测方法[J].软件学报,2012,23(2):378-393.

[9]Kang M G,McC amant S,Poosankam P,et al.DTA++:Dynamic taint analysis with targeted control-flow propagation[C]//Proceedings of the 18th Annual Network and Distributed System Security Symposium,San Diego,California,USA,2011.

[10]Clarke E,Grumberg O,Peled D.Model Checking[M].London,MIT Press,2000:129-134.

[11]Bellard F.QEMU,a Fast and Portable Dynamic Translator[C]//Proceedings of the annual conference on USENIX Annual Technical Conference,Berkeley,CA,USA,USENIX Association Press,2005:41-46.

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【恶意应用检测】相关文章:

恶意软件检测07-31

恶意代码检测08-19

规制恶意串通之恶意诉讼的立法借鉴与重构09-11

恶意抢注05-30

恶意07-31

恶意行为06-12

恶意代码攻击05-15

恶意诉讼问题06-21

恶意节点识别07-15

恶意欠薪08-14

上一篇:宗教经济学下一篇:监督成效