首页> 中国专利> 一种动态链接库形式的恶意代码的动态分析方法

一种动态链接库形式的恶意代码的动态分析方法

摘要

本发明提供一种针对动态链接库形式的恶意代码的动态分析方法。其步骤如下:解析配置文件,判断配置文件中是否包含动态链接库的导出函数名表以及各导出函数对应的参数表;如是,则对该动态链接库的各导出函数进行遍历调用;如否,则载入该动态链接库,解析该动态链接库的结构,遍历获得其导出函数表,并模拟各导出函数对应的参数表后;再对各导出函数遍历调用;分析前述函数调用运行过程中是否有恶意攻击行为。在调用导出函数所需参数形式未知时,可以模拟导出函数所需的参数,从而完成对导出函数的调用,能够完成对未知动态链接库形式的可执行代码的动态分析。通过参数模拟减少大量的人工分析干预各未知参数的时间,从而节约了人力成本。

著录项

  • 公开/公告号CN107273745A

    专利类型发明专利

  • 公开/公告日2017-10-20

    原文格式PDF

  • 申请/专利权人 中国科学院软件研究所;

    申请/专利号CN201710267131.X

  • 发明设计人 闫佳;应凌云;聂眉宁;苏璞睿;

    申请日2017-04-21

  • 分类号

  • 代理机构北京君尚知识产权代理事务所(普通合伙);

  • 代理人邵可声

  • 地址 100190 北京市海淀区中关村南四街4号

  • 入库时间 2023-06-19 03:37:16

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-08-21

    授权

    授权

  • 2017-11-17

    实质审查的生效 IPC(主分类):G06F21/56 申请日:20170421

    实质审查的生效

  • 2017-10-20

    公开

    公开

说明书

技术领域

本发明属于恶意代码分析与检测技术领域,具体涉及一种动态链接库形式的恶意代码的动态分析方法。

背景技术

随着社会的不断发展和进步,计算机和网络已经在社会各个领域广泛应用,信息系统在人们的日常生活中扮演着越来越重要的角色。与此同时,恶意代码攻击带来的危害也日益严重,模块化、插件化的恶意代码通常将真正执行恶意行为的代码以动态链接库的形式封装起来,通过动态下载、按需执行的方式,将恶意行为隐藏起来,由于这些动态链接库形式的恶意代码本身并不是完整的程序,需要外部加载器、主程序的调用才能执行并触发相关恶意行为,但在实际环境中,由于主机环境、网络抓包还原问题等各种原因,常常出现加载器、主程序等调用者缺失,而只有动态链接库形式的恶意代码模块、插件的情况,导致单独分析这些动态链接库形式的恶意代码较为困难。因此,针对动态链接库形式的恶意代码的分析技术和系统具有十分重要的作用和价值。

当前的动态链接库形式的恶意代码检测技术,通常使用以下几种方法:

1.对动态链接库文件进行静态二进制扫描,对比恶意代码特征库中的已有恶意代码特征,实现可执行代码检测。由于该方法只能针对已知恶意代码进行检测,而被检测文件中的可执行代码通常会包含未知恶意代码、变形恶意代码、甚至特种恶意代码,并针对特定环境的软件漏洞或0Day漏洞进行攻击,对于这种情况,该方法的检测能力不足。

2.对动态链接库文件的加载过程进行动态调试,分析该过程中可能产生的异常,实现可执行代码检测。由于该方法不容易界定异常产生自动态链接库文件中的恶意可执行代码还是加载动态链接库文件的进程本身,加上分析过程需要大量专业的人工干预,同时还需应对动态链接库形式的可执行代码中可能包含的反调试技术,因此实际操作难度较大,准确度较低。

3.将动态链接库文件置入沙箱运行,动态分析其运行过程,提取行为特征,与行为白名单对比,实现可执行代码检测。由于动态链接库形式中可执行代码的触发条件对运行环境的依赖较高,通常会需要调用不同依赖库以支持其运行,并且对未知动态链接库具体导出函数名及其相应参数格式条件下的运行分析十分困难。因此,为提高分析准确性,需要准备大量虚拟环境、进行大量重复测试,空间复杂度和时间复杂度较高。

综上所述,目前针对动态链接库形式的恶意代码的检测方法,其主要缺陷在于:针对未知攻击代码的分析和检测能力不足、需要大量专业的人工分析干预。

发明内容

针对现有技术中存在的技术问题,本发明的目的在于提供一种针对动态链接库形式的恶意代码的动态分析方法。该方法首先对动态链接库文件进行加载,其次遍历动态链接库里的导出函数,然后对动态链接库所包含的导出函数进行调用,主动触发动态链接库中的各种行为,最后在检测系统中,对样本动态链接库形式的可执行代码行为进行动态分析检测。

一种动态链接库形式的恶意代码的分析方法,其步骤如下:

1)解析待分析的动态链接库的配置文件,判断配置文件中是否包含该动态链接库的导出函数名表以及各导出函数对应的参数表;

2)如是,则对该动态链接库的各导出函数进行遍历调用;

3)如否,则载入该动态链接库,解析该动态链接库的结构,遍历获得其导出函数表,并模拟各导出函数对应的参数表后;再对该动态链接库中的各导出函数遍历调用;

4)分析步骤2)或步骤3)的函数调用运行过程中是否有恶意攻击行为。

进一步地,还包括在步骤1)之前,准备待分析的动态链接库,配置动态分析过程所需的配置文件;若已知动态链接库的数据构成,则使配置文件中包含动态链接库的路径、导出函数表及各导出函数对应的参数表;若未知动态链接库的数据构成,则使配置文件中的导出函数表信息为空。

进一步地,步骤2)对该动态链接库的各导出函数进行遍历调用包括:

收集配置文件中的导出函数名表以及各函数对应参数表,并输入到包含整型导出函数地址、参数数组的结构体中存储,进行函数调用。

进一步地,步骤3)中解析该动态链接库的结构包括:根据动态链接库的PE文件结构,对动态链接库进行解析。

进一步地,步骤3)中模拟各导出函数对应的参数表包括:

根据动态链接库的PE文件结构,对动态链接库进行分析,遍历获得待分析动态链接库中的导出函数地址表;

基于导出函数地址表,根据数字化特征,由动态分析方法提供模拟各导出函数相应参数表的功能,模拟出各导出函数相应的参数表。

进一步地,各导出函数的参数表中,包括参数类型有:整型数、浮点数、指针、指针嵌套以及指针函数。

进一步地,模拟出各导出函数相应的参数表过程中,将所有类型的参数均由双字节的整型数表示,构建整型数组,并对数组进行赋值,使各数组元素值为其自身地址,以一通用数据结构模拟所有类型的参数。

进一步地,将模拟出的包含所有类型参数的参数表以及所属导出函数地址表放入包含整型导出函数地址、参数数组的结构体中存储。

进一步地,步骤4)中通过对函数调用运行过程中执行代码引发的行为、运行环境变化进行分析比对,分析动态链接库中是否有攻击行为,检测动态链接库是否含有恶意代码。

通过采取上述技术方案,本发明在对未知动态链接库进行分析时,通过对动态链接库文件PE结构的解析,遍历获得导出函数表。由此在调用动态链接库中的导出函数且被调用导出函数所需参数形式未知时,可以模拟导出函数所需的参数,从而完成对导出函数的调用,能够完成对未知动态链接库形式的可执行代码的动态分析。通过参数模拟减少大量的人工分析干预各未知参数的时间,从而节约了人力成本。

附图说明

图1为本发明一种动态链接库形式的恶意代码的动态分析方法的流程示意图。

具体实施方式

下面结合附图详细说明本发明的技术方案:

在一实施例中,如图1所示,实现了一种动态链接库形式的恶意代码的分析方法,包括步骤:

为便于理解,本实施例以一个仅封装简单函数int std_addfunc(int a,int b),int cde_addfunc(int c,int d)的DLL文件为例。

1、准备待分析的动态链接库,配置动态分析过程所需的配置文件。

在此步骤中,若是已知动态链接库的数据构成,那么配置文件中会包含动态链接库的路径、详细的导出函数名表及各导出函数对应的参数表及参数信息,若是未知动态链接库的数据构成,那么配置文件中的导出函数表信息为空,只是包括动态链接库的路径。

2、选择待分析的动态链接库,获取配置文件内的信息,加载动态链接库。

在此步骤中,加载未知动态链接库过程中,可能会出现的系统硬错误消息弹框问题,本申请通过Windows提供的相关功能进行解决。由于不同版本的Windows系统(例如Windows XP、Windows 7)对动态链接库的加载会有差异,本实施例采用两种方法来应对动态链接库的加载。当被加载的动态链接库需要二次动态加载其他动态链接库时,应用环境中如果有这个需要间接加载的动态链接库,则使用第一种方法完成加载;如果没有,则使用第二种方法在不加载间接动态链接库的条件下,加载动态链接库。

具体而言,两种方法使用的是同一类API函数,分别为LoadLibrary(),LoadLibraryEx()。前者只是普通的加载,后者可以设置参数DONT_RESOLVE_DLL_REFERENCES。如果加载的动态链接库还要加载其他的DLL,这个参数可以让系统不自动加载这个间接的DLL。

在应用环境中,如果有动态链接库要加载的其他DLL,通过第一种方法,将这些间接要加载的DLL加载起来;如果没有,则需要调用第二种加函数来实现加载。

3、在步骤2之后,对获取的配置文件中的信息进行判断。解析样本配置文件,通过解析获得配置文件的内容,分析对动态链接库数据的掌握程度,决定动态分析过程的走向。

在此步骤中,如果配置文件中包含导出函数名表以及参数表(如:std_addfunc150 50),则进行步骤4;如果配置文件中不包含要调用的待分析动态链接库的导出函数名表以及各函数对应参数表,则进行步骤5。

4、收集配置文件中的导出函数名表以及各函数对应参数表,执行步骤8。

在此步骤中,配置文件已经包含了待分析动态链接库的导出函数表以及相应的参数表,则将导出函数名表、参数表等信息(如:std_addfunc 150 50)输入到包含整型导出函数地址、参数数组的结构体中存储。本次动态分析将对所有动态链接库中已准备好的导出函数进行调用,故直接执行步骤8。

5、解析动态链接库,获取导出函数表。

在此步骤中,根据动态链接库的PE文件结构,对动态链接库进行解析,遍历获得待分析动态链接库中的导出函数表,即获得std_addfunc、cde_addfunc。

6、解析动态链接库,获取导出函数地址表。

在此步骤中,基于步骤5的结果,根据动态链接库的PE文件结构,对动态链接库进行分析,遍历获得待分析动态链接库中的导出函数地址表,即获取std_addfunc、cde_addfunc的导出函数地址,为步骤8中的调用未知导出函数工作提供导出函数地址。

7、模拟各导出函数相应的参数表,执行步骤8。

在此步骤中,基于步骤6得到的数据,根据计算机领域内的数字化特征,由动态分析方法提供模拟各导出函数相应参数表的功能,模拟出各导出函数相应的参数表。在模拟参数表的过程中,充分考虑参数的多样性,诸如:整型数、浮点数、指针、指针嵌套以及指针函数等情况。由于计算机内数据都是由二进制机器码表示,故上述类型的参数均可以由双字节的整型数表示。本方法构建整型数组,并对数组进行赋值,使各数组元素值为其自身地址,实现了一个通用的数据结构用于模拟上述类型的参数。然后,将模拟出的参数表以及所属导出函数地址等信息放入前述指定的数据结构中存储。

在此步骤中,模拟符合int std_addfunc(int a,int b),int cde_addfunc(intc,int d)函数所需的参数类型、数量。如:为std_addfunc提供参数a=100、b=200;为cde_addfunc提供参数c=300、d=400。

上述步骤可以理解为当检测某动态链接库未知其函数导出表时,通过解析动态链接库PE结构的方法,遍历获得样本动态链接库的导出函数表,得到各导出函数名、各导出函数地址。并模拟出各导出函数相对应的参数表,完成未知动态链接库的动态分析准备工作。

8、根据步骤4或步骤5-7得到的相关数据,进行函数调用并分析其行为,直至将全部函数调用过之后,结束分析过程。

在此步骤中,凭借由上述步骤获得的导出函数表以及参数表等信息,对动态链接库中的导出函数进行遍历调用。在遍历调用导出函数表中的函数的过程中,对执行代码引发的行为、运行环境变化进行分析比对,分析动态链接库中是否有攻击行为,检测动态链接库是否为恶意代码。

在此步骤中,当配置文件中包含导出函数名表以及参数表时,调用std_addfunc函数,导入步骤4获得的参数150、50,完成std_addfunc的函数运行,返回结果200;当配置文件中不包含导出函数名表以及参数表时,首先,调用std_addfunc函数,导入步骤7模拟的参数100、200,完成std_addfunc的函数运行,返回结果300;然后,调用cde_addfunc函数,导入步骤7模拟的参数300、400,完成cde_addfunc的函数运行,返回结果700。在运行函数的过程中,对执行std_addfunc、cde_addfunc程序引发的行为、运行环境变化进行分析比对,分析动态链接库中是否有攻击行为,检测动态链接库是否含有恶意代码。

需说明的是,本发明不要求动态链接库是可以单独运行的代码。无论是否已知动态链接库的具体构成,都可以通过解析、模拟动态链接库的运行环境对动态连接库进行动态分析。对于任一动态链接库,无论其是已知还是未知,均可以对其进行动态分析,检测动态链接库中是否包含恶意代码。对于动态链接库中的所有导出函数,均可以通过指定的参数或动态模拟构造的参数对对其进行动态调用,触发动态链接库中的行为。

综上所述,本发明提出的一种动态链接库形式的恶意代码的动态分析方法,对于本领域的技术人员而言,可以在已知或未知动态链接库中导出函数名及其参数列表的情况下,对动态链接库中所包含的导出函数进行遍历调用,以高效率、高精准度的动态分析方法检测该动态链接库是否含有恶意代码。

尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号