基于函数调用图指纹的恶意软件检测方法

文档序号:9327235阅读:335来源:国知局
基于函数调用图指纹的恶意软件检测方法
【技术领域】
[0001] 本发明涉及网络安全中恶意软件检测领域,特别涉及一种基于函数调用图指纹的 恶意软件检测方法。
【背景技术】
[0002] 随着信息技术的发展,互联网正深刻地改变着人类的生产生活方式,人们越来越 离不开网络,随之而来的是各种"安全"问题。人们深得网络发展之利,也深受网络攻击之 害,网络空间安全问题已成为困扰世界的严峻挑战。根据中国互联网协会、国家互联网应急 中心发布的《中国互联网站发展状况及其安全报告(2015)》统计显示,截至2014年12月, 我国网民规模达6. 49亿,全年共计新增网民3117万人,互联网普及率为47. 9%。2014年, 有46. 3%的网民遭遇过网络安全问题,我国个人互联网使用的安全状况不容乐观。在安全 事件中,账号和密码被盗情况最为严重,分别达到26. 7%和25. 9%。
[0003] 软件的安全性是网络安全的重要组成部分。软件内部存在缺陷、错误、故障、失效, 软件外部存在病毒、木马、蠕虫等恶意软件,造成了安全性分析具有高度的复杂性。尽管研 究人员已经做了大量工作,但是恶意软件的现有检测技术依然有很大的局限性。反病毒软 件是利用恶意软件或被感染文件的特征码(即每种恶意软件所独有的十六进制代码串)进 行扫描检测,这种传统方式几乎不能检测新的恶意软件种类,能检测的恶意软件经过简单 加壳或混淆后又不能检测,特定恶意软件在被反病毒软件查杀之后很容易进行免杀处理。 据Symantec公司发布的2015互联网安全威胁报告,基于特征码的方法仅能检测2014年捕 获的所有恶意软件中的13. 9%。
[0004] 恶意软件作者使用加壳和混淆技术对已有的恶意软件进行处理,产生了大量的恶 意软件变种。据Symantec公司发布的2015互联网安全威胁报告,2014年十大恶意软件族 类的样本数目占全年捕获所有恶意软件样本的33 %。反病毒专家每天捕获大量的未知软件 样本,需要迅速地判断未知样本是否为已知的恶意软件或已知恶意软件的变种。当前,反病 毒专家主要使用样本的hash签名标识样本,但hash签名非常敏感,样本有一个字节的微小 变化,都会产生不同的hash签名,该方法弹性较差。此外,反病毒专家需要对收集的所有恶 意软件样本进行归类和索引,建立恶意软件的族群和族谱,以方便新样本的比对和查找。目 前,这部分工作是基于反病毒专家的专业知识分析处理,还没有自动化的工具。
[0005] 李德毅院士在一篇报告中指出"软件应以网络结构表示"。也就是说,软件都具有 网络的拓扑结构,一般可以用图表示。图可以在较高层次描述软件的结构,为研究者提供一 个整体和全局的视角来唯一标识软件。研究人员对基于图的恶意软件检测方法已进行了初 步研究,这些方法将软件表示成操作码有向图、控制流图、数据流图、系统调用图,然后通过 相似性度量、数据挖掘和机器学习等方法实现恶意软件的检测。这些方法从不同的角度探 索解决恶意软件检测问题,提出了不同思路的基于图的恶意软件检测方法,取得了许多富 有建设性的成果,但仍存在以下几个问题:1)基于图相似性度量的检测方法效率不理想, 对结点较多的图在有限时间内无法完成。2)部分图表示方法粒度较细,导致图的规模和复 杂度较高。3)对混淆过的恶意软件,一些检测方法不能检测出。

【发明内容】

[0006] 本发明所要解决的技术问题是提供一种基于函数调用图指纹的恶意软件检测方 法,采用了函数调用图作为软件的指纹来检测出恶意软件,识别率高。
[0007] 为解决上述技术问题,本发明采用的技术方案是:
[0008] -种基于函数调用图指纹的恶意软件检测方法,包括生成函数调用图指纹库和检 测恶意软件两部分;
[0009] 生成函数调用图指纹库:
[0010] 步骤1,判断已知恶意软件样本是否加壳,若加壳,进行脱壳处理,若未加壳,进行 后续步骤;步骤2,进行反汇编处理,得到恶意软件样本的汇编代码;步骤3,以函数为结点, 函数间的调用为边,生成函数调用图;步骤4,函数调用图作为该样本的指纹,加入图指纹 库;
[0011] 检测恶意软件:
[0012] 步骤5,判断待检测样本是否加壳,若加壳,进行脱壳处理,若未加壳,进行后续步 骤;步骤6,进行反汇编处理,得到待检测样本的汇编代码;步骤7,基于汇编代码生成待检 测样本的函数调用图,该图作为检测样本的指纹;步骤8,将待检测样本的函数调用图指纹 和图指纹库中每一个图都进行同构判断,若同构,则该样本为恶意软件,若和图指纹库中的 所有图都不同构,则为良性软件。
[0013] 根据上述方案,在所述步骤8中,同构判断的方法为FCGiso图同构判断,具体为:
[0014] STEPl :对于待判断是否同构的两个有向图GJV1, E1)和G2(V2, E2),判断G1的结点 数和G2的结点数是否相等,若不相等,则图G 1和图G 2不同构;若相等,再判断有向图的边 数;
[0015] STEP2 :判断边数和G 2的边数是否相等,若不相等,则图G1和图G 2不同构;若 相等,进彳丁后续判断;
[0016] STEP3 :对于图任意一个结点V,获取图G1* V的直接后继结点集合 OUtnodes1,基于V的结点唯一标记,从图G2中查找得到与V结点标记相同的结点ν',获取 图6 2中ν'的直接后继结点集合outnodes 2,若OUtnodes1集合和outnodes 2集合的结点数 和结点的标记不相同,则图G1和图62不同构;若相同,则继续用STEP3的判断方法判断下一 个结点,直到判断完所有结点;
[0017] STEP4 :若从STEPl到STEP3都没有判断图G1和图G2不同构,则图G1和图G 2同构。
[0018] 根据上述方案,在所述步骤1和步骤5中,使用PEID判断是否加壳,采用动态通用 脱壳工具Ether进行脱壳。
[0019] 根据上述方案,若有不成功的样本脱壳,则使用加壳工具的逆向工具进行手动脱 壳。
[0020] 根据上述方案,所述步骤2和步骤6中的反汇编处理使用IDA Pro。
[0021] 根据上述方案,在所述步骤3中,还包括使用正整数命名函数。
[0022] 与现有技术相比,本发明的有益效果是:1)使用函数调用图作为软件的指纹,充 分利用函数调用图是一种特殊的图(图的结点带唯一标记),有较强的唯一标识性,又具备 较好的弹性(加壳和混淆后的变种指纹不变)的特点来识别恶意软件变种,识别率高,能识 别大部分恶意软件变种。2)函数调用图指纹自动产生,无需专业人员手动分析提取,函数调 用图在较高层次描述软件的结构,粒度较粗,有效缩减了图的规模。3)可用于恶意软件的深 度识别,大规模软件样本的索引和查找,恶意软件变种的分析归类。4)本发明提供的方法与 操作系统平台无关,可用于Windows、Unix、Linux、Android等平台。
【附图说明】
[0023] 图1是本发明基于函数调用图指纹的恶意软件检测方法的检测流程示意图。
[0024] 图2是FCGiso图判断同构的方法的程序代码示意图。
[0025] 图3是Backdoor. Win32. Sepro样本的函数调用图(以函数名标识结点)。
[0026] 图4是Backdoor. Win32. S印ro样本的函数调用图(以正整数命名结点)。
[0027] 图5是使用FCGiso图同构判断方法对每个良性软
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1