当前位置: 首页 > 专利查询>武汉大学专利>正文

基于行为和代码长度的恶意样本逆向任务分配方法及系统技术方案

技术编号:28559345 阅读:23 留言:0更新日期:2021-05-25 17:53
本发明专利技术提供一种基于行为和代码长度的恶意样本逆向任务分配方法,利用恶意代码的函数调用图,根据恶意代码内部不同功能模块之间的差异性,辅以不同功能模块之间的代码量差异来进行逆向任务的分配,实现过程包括函数调用图的获取过程和逆向任务分配过程。本发明专利技术能够解决逆向分析恶意软件过程中逆向任务低效分发管理的问题,可以快速准确地对恶意代码分析任务进行科学性分配,减少了逆向任务分配过程中的人工干预,提升进行逆向分析任务分配的流程效率。

【技术实现步骤摘要】
基于行为和代码长度的恶意样本逆向任务分配方法及系统
本专利技术属于恶意代码检测与分析领域,具体涉及一种基于行为和代码长度的恶意样本逆向任务分配方法及系统。
技术介绍
近年来,恶意代码日益增加,给国家、社会、个人带来了不同程度的危害,如分布式拒绝服务攻击(DDoS)、基于僵尸网络(Botnet)的攻击、勒索病毒(Ransomware)、高级可持续威胁(AdvancedPersistentThreat)攻击、利用远程控制木马的信息窃取等。根据AV-TEST在2020年5月公布的数据,全网恶意代码数量规模逐年增长,在2020年已经达到的10.5519亿。目前网络安全形势严峻,网络环境的安全与健康需要依靠所有安全研究人员来维护。当前恶意代码分析形势主要是依赖人工提取特征码,相关资料显示,平均一名熟练的分析人员一天只能分析12.8个样本,供需矛盾严重。再加上近年攻击者为了躲避检测,采用了一系列对抗溯源的措施,恶意代码的质量与复杂程度大幅提高,一定程度上加大了恶意代码逆向分析的难度,给恶意样本逆向分析工作带来严峻的考验。为了提高恶意代码的逆向分析效率,在同一个逆向分析组织中,通常会有多名分析人员对同一个恶意样本进行逆向分析。在协作的过程中,研究人员可以发挥其各自的长处,并且不用再独自一人面对庞大的恶意代码。通过多人协作进行样本分析涉及到对恶意样本逆向任务的分配问题。掌握好恶意样本的内部结构网络,能够在不破坏原有代码结构框架的基础上进行恶意样本逆向任务的分配和管理,一定程度上保证了恶意样本逆向任务的局部完整性,提高恶意样本的管理以及分配的科学性和合理性,有利于后续逆向分析结果的快速整合。如果管理者想要简化后续整合逆向分析结果的工作,在逆向任务分配的前期工作中就需要根据恶意样本局部功能之间的差别来进行分配管理。虽然在进行恶意样本逆向之前,逆向研究人员可以通过IDA、Ghidra等工具进行分析,了解恶意样本的总体功能。但是恶意样本内部和函数调用关系网结构错综复杂,单纯通过人工很难快速地整理出其内部结构网络,导致在前期逆向任务分配管理环节上消耗太多时间和精力。
技术实现思路
本专利技术针对逆向分析恶意软件过程中逆向任务低效分发的问题,提出一种基于行为和代码长度的恶意样本逆向任务分配方法及系统。本专利技术的技术方案为一种基于行为和代码长度的恶意样本逆向任务分配方法,包括函数调用图的获取过程和逆向任务分配过程,所述函数调用图的获取,包括以下步骤,步骤1,获取引入的动态链接库DLL的数量,根据DLL引入次序依次遍历每一个DLL文件并获取DLL文件的名称;对于每一个引入的DLL文件,获取从该DLL文件中引入的API函数列表;对于每个从DLL文件引入的API函数,获取相关的交叉引用函数列表,得到API函数的所有调用者;将函数调用关系写入有向图中;记录函数关系的同时,记录下函数对应的代码长度,系统函数代码长度记为0;步骤2,获取每一个代码段的地址,在每一个代码段中遍历改代码段使用到的所有函数的地址;对于每一个使用到的函数,获取相应交叉引用函数列表;获取调用与被调用双方的函数名称后,将函数调用关系写入有向图中,记录函数关系的同时,记录下函数对应的代码长度,所有函数遍历完成后得到的有向图是包含代码长度信息的函数调用图;所述逆向任务分配过程,根据函数调用图进行逆向任务分配,包括以下步骤,步骤3,读取函数调用图中的代码长度信息,计算并记录用户自定义函数代码长度的平均值和用户自定义函数集合,准备进行函数功能模块分割;步骤4,根据不同恶意行为具有的特征API函数进行预分配,对于每一类恶意行为特征API函数列表中的函数,从步骤2中的函数调用图中获取与函数相关的路径;从得到的路径中提取所有函数调用关系,保存到路径集合中;从得到的路径中提取所有函数节点,保存到预分配函数节点集合中,并为每个节点添加用于标记函数功能的属性;将每一类特征API函数对应的预分配函数集合作为一项任务添加到预分配任务列表中,任务列表中每一项任务包含该任务的函数节点信息和代码总长度;步骤5,将未进行预分配的节点与已进行预分配的节点分开,遍历步骤4所得函数节点集合列表,将函数节点集合列表中存在的节点从步骤3所得用户自定义函数集合中删除,最终得到未进行预分配的函数节点集合;步骤6,按照函数代码长度进行再分配,直至所有任务列表都符合代码总长度小于代码长度平均值减去阈值的条件;步骤7,处理未完成分配的函数节点,将剩余仍未被分配的函数节点添加到一个新的任务集合中,并计算该任务集合中所有函数的代码总长度;合并步骤6与步骤7得到任务列表,作为最终的逆向任务分配结果。而且,步骤4中,不同恶意行为具有的不同特征API函数的类别包括文件操作、服务管理、网络连接、鼠标监控、socket连接、命令执行、加解密和进程管理注册表操作。而且,步骤4的实现过程如下,(1)预先定义9类特征API函数列表functions_of_interest[9],每次遍历一类特征API函数;(2)对于每一类特征API函数,判断其中的特征API函数func是否存在于函数调用图G中,不存在则继续遍历;(3)遍历函数调用图G的所有节点作为起始节点src,调用函数all_simple_paths(G,src,func),列出起始节点src到特征API函数func的全部路径path;(4)从路径列表path中获取函数节点信息,添加到函数节点集合nodes中,同时记录该函数集合的代码总长度length;(5)每一类特征API函数遍历完成之后,将得到的函数节点集合nodes和对应的长度信息length,保存至预分配任务列表autoassign_list中。而且,步骤6中实现方式如下,首先从预分配任务列表中读取函数节点列表和代码总长度;如果预分配任务列表为空,则新建一个任务列表,不为空则读取预分配任务列表中的函数节点信息和代码总长度;如果单项任务的代码总长度小于步骤3得到的代码长度平均值减去阈值,从未分配函数节点集合中查找在函数调用图中与预分配任务列表中函数节点至少有2处直接相连的函数节点,将该函数节点添加到该项任务的函数节点集合,将函数节点的代码长度累加至该项任务代码总长度,将该函数节点从未分配函数节点集合中删除;重复以上过程,直至所有任务列表都符合代码总长度小于代码长度平均值减去阈值的条件。另一方面,本专利技术提供一种基于行为和代码长度的恶意样本逆向任务分配系统,用于实现如上所述的一种基于行为和代码长度的恶意样本逆向任务分配方法。而且,包括处理器和存储器,存储器用于存储程序指令,处理器用于调用存储器中的存储指令执行如上所述的一种基于行为和代码长度的恶意样本逆向任务分配方法。而且,包括可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序执行时,实现如上所述的一种基于行为和代码长度的恶意样本逆向任务分配方法。本专利技术利用恶意代码的函数调用图得到程序内部的函数调用关系,根据不同恶本文档来自技高网
...

【技术保护点】
1.一种基于行为和代码长度的恶意样本逆向任务分配方法,其特征在于:利用恶意代码的函数调用图,根据恶意代码内部不同功能模块之间的差异性,辅以不同功能模块之间的代码量差异来进行逆向任务的分配,实现过程包括函数调用图的获取过程和逆向任务分配过程,所述函数调用图的获取过程,包括以下步骤,/n步骤1,获取引入的动态链接库DLL的数量,根据DLL引入次序依次遍历每一个DLL文件并获取DLL文件的名称;对于每一个引入的DLL文件,获取从该DLL文件中引入的API函数列表;对于每个从DLL文件引入的API函数,获取相关的交叉引用函数列表,得到API函数的所有调用者;将函数调用关系写入有向图中;记录函数关系的同时,记录下函数对应的代码长度,系统函数代码长度记为0;/n步骤2,获取每一个代码段的地址,在每一个代码段中遍历改代码段使用到的所有函数的地址;对于每一个使用到的函数,获取相应交叉引用函数列表;获取调用与被调用双方的函数名称后,将函数调用关系写入有向图中,记录函数关系的同时,记录下函数对应的代码长度,所有函数遍历完成后得到的有向图是包含代码长度信息的函数调用图;/n所述逆向任务分配过程,根据函数调用图进行逆向任务分配,包括以下步骤,/n步骤3,读取函数调用图中的代码长度信息,计算并记录用户自定义函数代码长度的平均值和用户自定义函数集合,准备进行函数功能模块分割;/n步骤4,根据不同恶意行为具有的特征API函数进行预分配,对于每一类恶意行为特征API函数列表中的函数,从步骤2中的函数调用图中获取与函数相关的路径;从得到的路径中提取所有函数调用关系,保存到路径集合中;从得到的路径中提取所有函数节点,保存到预分配函数节点集合中,并为每个节点添加用于标记函数功能的属性;将每一类特征API函数对应的预分配函数集合作为一项任务添加到预分配任务列表中,任务列表中每一项任务包含该任务的函数节点信息和代码总长度;步骤5,将未进行预分配的节点与已进行预分配的节点分开,遍历步骤4所得函数节点集合列表,将函数节点集合列表中存在的节点从步骤3所得用户自定义函数集合中删除,最终得到未进行预分配的函数节点集合;/n步骤6,按照函数代码长度进行再分配,直至所有任务列表都符合代码总长度小于代码长度平均值减去阈值的条件;/n步骤7,处理未完成分配的函数节点,将剩余仍未被分配的函数节点添加到一个新的任务集合中,并计算该任务集合中所有函数的代码总长度;合并步骤6与步骤7得到任务列表,作为最终的逆向任务分配结果。/n...

【技术特征摘要】
1.一种基于行为和代码长度的恶意样本逆向任务分配方法,其特征在于:利用恶意代码的函数调用图,根据恶意代码内部不同功能模块之间的差异性,辅以不同功能模块之间的代码量差异来进行逆向任务的分配,实现过程包括函数调用图的获取过程和逆向任务分配过程,所述函数调用图的获取过程,包括以下步骤,
步骤1,获取引入的动态链接库DLL的数量,根据DLL引入次序依次遍历每一个DLL文件并获取DLL文件的名称;对于每一个引入的DLL文件,获取从该DLL文件中引入的API函数列表;对于每个从DLL文件引入的API函数,获取相关的交叉引用函数列表,得到API函数的所有调用者;将函数调用关系写入有向图中;记录函数关系的同时,记录下函数对应的代码长度,系统函数代码长度记为0;
步骤2,获取每一个代码段的地址,在每一个代码段中遍历改代码段使用到的所有函数的地址;对于每一个使用到的函数,获取相应交叉引用函数列表;获取调用与被调用双方的函数名称后,将函数调用关系写入有向图中,记录函数关系的同时,记录下函数对应的代码长度,所有函数遍历完成后得到的有向图是包含代码长度信息的函数调用图;
所述逆向任务分配过程,根据函数调用图进行逆向任务分配,包括以下步骤,
步骤3,读取函数调用图中的代码长度信息,计算并记录用户自定义函数代码长度的平均值和用户自定义函数集合,准备进行函数功能模块分割;
步骤4,根据不同恶意行为具有的特征API函数进行预分配,对于每一类恶意行为特征API函数列表中的函数,从步骤2中的函数调用图中获取与函数相关的路径;从得到的路径中提取所有函数调用关系,保存到路径集合中;从得到的路径中提取所有函数节点,保存到预分配函数节点集合中,并为每个节点添加用于标记函数功能的属性;将每一类特征API函数对应的预分配函数集合作为一项任务添加到预分配任务列表中,任务列表中每一项任务包含该任务的函数节点信息和代码总长度;步骤5,将未进行预分配的节点与已进行预分配的节点分开,遍历步骤4所得函数节点集合列表,将函数节点集合列表中存在的节点从步骤3所得用户自定义函数集合中删除,最终得到未进行预分配的函数节点集合;
步骤6,按照函数代码长度进行再分配,直至所有任务列表都符合代码总长度小于代码长度平均值减去阈值的条件;
步骤7,处理未完成分配的函数节点,将剩余仍未被分配的函数节点添加到一个新的任务集合中,并计算该任务集合中所有函数的代码总长度;合并步骤6与步骤7得到任务列表,作为最终的逆向任务分配结果。


2.根据权利要求1所述基于行为和代码长度的恶意样本逆向任务分配方法,其特征在于:步骤4中,不同恶意行为具有的不同特征API函数的类别包括文件操作、服...

【专利技术属性】
技术研发人员:彭国军徐国杰刘雨王鹤彭馨勇刘思德
申请(专利权)人:武汉大学
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1