书签 分享 收藏 举报 版权申诉 / 18

一种恶意软件的多执行路径构造方法.pdf

  • 上传人:111****112
  • 文档编号:6358820
  • 上传时间:2019-06-04
  • 格式:PDF
  • 页数:18
  • 大小:1.68MB
  • 摘要
    申请专利号:

    CN201510256382.9

    申请日:

    2015.05.19

    公开号:

    CN104933359A

    公开日:

    2015.09.23

    当前法律状态:

    授权

    有效性:

    有权

    法律详情:

    授权|||著录事项变更IPC(主分类):G06F 21/56变更事项:发明人变更前:王蕾 汤战勇 张洁 王华 李光辉 房鼎益 陈晓江 叶贵鑫 张恒 吕留东 陈锋变更后:肖云 王蕾 汤战勇 张洁 王华 李光辉 房鼎益 陈晓江 叶贵鑫 张恒 吕留东 陈锋|||实质审查的生效IPC(主分类):G06F 21/56申请日:20150519|||公开

    IPC分类号:

    G06F21/56(2013.01)I

    主分类号:

    G06F21/56

    申请人:

    西北大学

    发明人:

    王蕾; 汤战勇; 张洁; 王华; 李光辉; 房鼎益; 陈晓江; 叶贵鑫; 张恒; 吕留东; 陈锋

    地址:

    710069陕西省西安市太白北路229号

    优先权:

    专利代理机构:

    西安恒泰知识产权代理事务所61216

    代理人:

    李郑建

    PDF完整版下载: PDF下载
    内容摘要

    本发明公开了一种恶意软件的多执行路径构造方法,属于计算机安全领域。所述发明包括获取初始控制流图以及根据初始控制流图构建完整控制流图两部分。本发明通过创建与目标程序对应的程序快照,在目标程序快要结束时,构建目标程序的控制流图,载入程序快照,对条件转移指令的执行路径进行修改,按修改后的指令路径继续执行目标程序,重复以上步骤,最终根据所有初级控制流图构建完整控制流图,根据完整控制流图得到目标程序即恶意软件的所有执行路径。相对于现有技术,可以避免只根据单一路径对目标程序进行分析时仅能获取目标程序的部分行为,减少由于无法获取目标程序的全部执行路径导致安全隐患以及带来的经济损失,并且降低系统开销。

    权利要求书

    权利要求书
    1.  一种恶意软件的多执行路径构造方法,其特征在于,所述恶意软件的多执行路径构造方法,包括:
    步骤一,导入目标程序,检测所述目标程序是否为可执行文件,如果所述目标程序为所述可执行文件,则执行所述目标程序;
    步骤二,在所述目标程序的执行过程中,检测到条件转移指令时,创建程序快照,将所述程序快照保存至快照链表中;
    步骤三,在所述目标程序的执行过程中,监测所述目标程序的运行状态,当所述目标程序将要结束时,暂停所述目标程序的运行,根据此时所述目标程序的执行过程信息,构建初级控制流图,进行污点分析和控制依赖关系分析,根据所述污点分析和控制依赖关系分析的结果进行指令标记,从所述快照链表中载入与被标记指令对应的程序快照,根据所述程序快照恢复所述目标程序;
    步骤四,在载入所述程序快照后,从所述快照链表中删除已载入的所述程序快照以及与未标记指令对应的程序快照,进而修改与已载入的所述程序快照对应的条件转移指令,按所述修改后的条件转移指令对应的程序路径执行所述目标程序;
    在执行所述步骤四后,重复执行步骤二至步骤四的内容,直至所述快照链表中程序快照数量为零时终止;
    步骤五,结合在步骤三中构建的所述初级控制流图构建完整控制流图,以便基于所述完整控制流图获取所述目标程序的多执行路径。

    2.  根据权利要求1所述的恶意软件的多执行路径构造方法,其特征在于,所述在所述目标程序的执行过程中,监测所述目标程序的运行状态,当所述目标程序将要结束时,暂停所述目标程序的运行,根据此时所述目标程序的执行过程信息,构建初级控制流图,进行污点分析和控制依赖关系分析,根据所述污点分析和控制依赖关系分析的结果进行指令标记,从所述快照链表中载入与被标记指令对应的程序快照,根据所述程序快照恢复所述目标程序,包括:
    监测所述目标程序的运行状态,当所述目标程序将要结束时,调用中断服务暂停所述目标程序的运行;
    根据此时所述目标程序的执行过程信息,构建此时的初级控制流图;
    对所述目标程序进行污点分析,获取带有污点标记的指令序列,进而确定所述带有污点标记的指令序列对应的基本块,根据所述基本块进行控制依赖分析进行指令标记,确定被标记的指令;
    从所述快照链表提取与所述被标记的指令对应的程序快照,将所述程序快照进行载入,根据所述程序快照对所述目标程序进行恢复。

    3.  根据权利要求2所述的恶意软件的多执行路径构造方法,其特征在于,所述监测所述目标程序的运行状态,当所述目标程序将要结束时,调用中断服务暂停所述目标程序的运行,包括:
    监测所述目标程序的运行状态,获取函数KiUserExceptionDispatcher和函数NtTerminateProcess的混淆保护情况;
    如果所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口没有被混淆保护,则跟踪在导入地址表中所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口是否被调用;
    如果所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口已经被混淆保护,则跟踪在ntdll输出表中所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口是否被调用;
    如果在执行所述目标程序的过程中,检测到中央处理器的程序计数器中存储的地址等于所述函数NtTerminateProcess的起始地址时,确认所述目标程序属于正常结束;
    如果在执行所述目标程序的过程中,检测到所述中央处理器的程序计数器中存储的地址等于所述函数KiUserExceptionDispatcher的起始地址时,确认所述目标程序因出现异常而中止。

    4.  根据权利要求2所述的恶意软件的多执行路径构造方法,其特征在于,所述根据此时所述目标程序的执行过程信息,构建此时的初级控制流图,包括:
    根据此时所述目标程序的执行过程信息,在所述执行过程信息中标记全部的首指令;
    令每两个相邻的所述首指令之间的内容为一个基本块,基于所述基本块构建初始控制流图。

    5.  根据权利要求2所述的恶意软件的多执行路径构造方法,其特征在于,所述对所述目标程序进行污点分析,获取带有污点标记的指令序列,进而确定所述带有污点标记的指令序列对应的基本块,根据所述基本块进行控制依赖分析进行指令标记,确定被标记的指令,包括:
    确定污染源格式,为所述污染源赋予第一标签;
    在所述目标程序的执行过程中,确定与所述污染源有关的指令,基于所述第一标签确定与所述指令对应的第二标签,结合所述指令类型确定所述污染源的传播情况,根据所述传播情况对所述第二标签的标签值进行修改,得到修改后的标签值;
    基于所述修改后的标签值,对所述指令进行污点标记;
    确定所述带有污点标记的指令序列对应的基本块,结合所述传播情况,获取所述基本块的后必经点集合,根据所述后必经点结合进行控制依赖分析;
    根据所述控制依赖分析结果进行指令标记,确定被标记的指令。

    6.  根据权利要求5所述的恶意软件的多执行路径构造方法,其特征在于,所述在所述目标程序的执行过程中,确定与所述污染源有关的指令,基于所述第一标签确定与所述指令对应的第二标签,结合所述指令类型确定所述污染源的传播情况,根据所述传播情况对所述第二标签的标签值进行修改,得到修改后的标签值,包括:
    在80×86系统的指令集中,所述指令分为以下三个类型,
    数据转移指令即data movement-based(例如MOV,PUSH,POP等),在该类型的指令中,源操作数的第二标签的标签值传递到目的操作数的第二标签的标签值;
    算术指令(ADD,OR等),在该类型的指令中,目的操作数的第二标签的标签值来源于两个源操作数的第二标签的标签值;
    只包含一个操作数的指令(INC,DEC等),在该类型的指令中,由于该操作数的信息流流向指令自身,因此操作数的第二标签的标签值不变。

    7.  根据权利要求1所述的恶意软件的多执行路径构造方法,其特征在于,所述在载入所述程序快照后,从所述快照链表中删除已载入的所述程序快照以及与未标记指令对应的程序快照,进而修改与已载入的所述程序快照对应的条件转移指令,按所述修改后的条件转移指令对应的程序路径执行所述目标程序, 包括:
    在载入所述程序快照后,从所述快照链表中将已载入的所述快照链表删除,将所述快照链表中与未标记指令对应的程序快照进行删除;
    确定与已载入的所述程序快照对应的条件转移指令,修改所述条件转移指令中、的执行路径,按修改后的所述执行路径执行所述目标程序。

    8.  根据权利要求1所述的恶意软件的多执行路径构造方法,其特征在于,所述方法还包括:
    在所述目标程序的执行过程中,获取所述函数调用关系;
    根据所述函数调用关系,构建函数调用关系图。

    说明书

    说明书一种恶意软件的多执行路径构造方法
    技术领域
    本发明属于计算机软件安全领域,特别涉及一种恶意软件的多执行路径构造方法。
    背景技术
    近几年来,越来越多的恶意软件不仅对计算机用户数据的安全性和隐私造成了严重的威胁,而且会造成巨大的经济损失。恶意软件被定义为在计算机系统上执行恶意任务的病毒、蠕虫和特洛伊木马的程序,通过破坏软件进程来实施控制,让受害者的电脑不断弹出色情网站或者是恶意广告的程序,也叫做流氓软件。恶意软件分析是确定一个恶意软件样本(如病毒、蠕虫和特洛伊木马等)的行为和目的的过程。这个过程是能够开发有效的检测技术和删除工具的一个必要步骤。
    例如采用动态分析方法的CwSandbox系统。该系统将恶意程序样本放置在虚拟机软件环境中运行,采用用户态的API Hooking方法来监视恶意代码的动态行为。CwSandbox系统的主进程在开始恶意程序的进程之后,监控该进程的执行过程。通过改写系统API函数,实现API的拦截,目标进程调用系统API时会先进入CwSandbox的hook函数中。在运行可疑程序时,将DLL注入目标进程空间,监控进程的行为并通过进程间通信的方式向主进程发送目标进程的行为信息。同时,在运行的过程中生成恶意程序对系统资源(主要是文件,注册表,网络连接等资源)进行操作的报告。
    在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
    当前的分析系统有个严重的问题:这些分析都是基于程序的单一执行路径。然而,有可能某些恶意行为只能在特定的环境下触发。如米开朗基罗病毒,大部分时间保持休眠状态,只有在3月6日米开朗基罗的生日时触发。再如bots(一种能执行外部命令的自动运行型木马)自动登录到IRC服务器经常通过监控关键字列表触发某些有效载荷的例程。也就是当用单一的执行路径确定一个程序的行为时,很容易导致很多行动无法被观测到,这可能导致软件分析师对某些样本的风险得出错误结论,从而造成经济损失。
    发明内容
    为了解决现有技术的问题,本发明提供了一种恶意软件的多执行路径构造方法,所述恶意软件的多执行路径构造方法,包括:
    步骤一,导入目标程序,检测所述目标程序是否为可执行文件,如果所述目标程序为所述可执行文件,则执行所述目标程序;
    步骤二,在所述目标程序的执行过程中,检测到条件转移指令时,创建程序快照,将所述程序快照保存至快照链表中;
    步骤三,在所述目标程序的执行过程中,监测所述目标程序的运行状态,当所述目标程序将要结束时,暂停所述目标程序的运行,根据此时所述目标程序的执行过程信息,构建初级控制流图,进行污点分析和控制依赖分析,根据所述污点分析和控制依赖关系分析的结果进行指令标记,从所述快照链表中载入与被标记指令对应的程序快照,根据所述程序快照恢复所述目标程序;
    步骤四,在载入所述程序快照后,从所述快照链表中删除已载入的所述程序快照以及与未标记指令对应的程序快照,进而修改与已载入的所述程序快照对应的条件转移指令,按所述修改后的条件转移指令对应的程序路径执行所述目标程序;
    在执行所述步骤四后,重复执行步骤二至步骤四的内容,直至所述快照链表中程序快照数量为零时终止;
    步骤五,结合在步骤三中构建的所述初级控制流图构建完整控制流图,以便基于所述完整控制流图获取所述目标程序的多执行路径。
    可选的,所述在所述目标程序的执行过程中,监测所述目标程序的运行状态,当所述目标程序将要结束时,暂停所述目标程序的运行,根据此时所述目标程序的执行过程信息,构建初级控制流图,进行污点分析和控制依赖关系分析,根据所述污点分析和控制依赖关系分析的结果进行指令标记,从所述快照链表中载入与被标记指令对应的程序快照,根据所述程序快照恢复所述目标程序,包括:
    监测所述目标程序的运行状态,当所述目标程序将要结束时,调用中断服务暂停所述目标程序的运行;
    根据此时所述目标程序的执行过程信息,构建此时的初级控制流图;
    对所述目标程序进行污点分析,获取带有污点标记的指令序列,进而确定 所述带有污点标记的指令序列对应的基本块,根据所述基本块进行控制依赖分析进行指令标记,确定被标记的指令;
    从所述快照链表提取与所述被标记的指令对应的程序快照,将所述程序快照进行载入,根据所述程序快照对所述目标程序进行恢复。
    可选的,所述监测所述目标程序的运行状态,当所述目标程序将要结束时,调用中断服务暂停所述目标程序的运行,包括:
    监测所述目标程序的运行状态,获取函数KiUserExceptionDispatcher和函数NtTerminateProcess的混淆保护情况;
    如果所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口没有被混淆保护,则跟踪在导入地址表中所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口是否被调用;
    如果所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口已经被混淆保护,则跟踪在ntdll输出表中所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口是否被调用;
    如果在执行所述目标程序的过程中,检测到中央处理器的程序计数器中存储的地址等于所述函数NtTerminateProcess的起始地址时,确认所述目标程序属于正常结束;
    如果在执行所述目标程序的过程中,检测到所述中央处理器的程序计数器中存储的地址等于所述函数KiUserExceptionDispatcher的起始地址时,确认所述目标程序因出现异常而中止。
    可选的,所述根据此时所述目标程序的执行过程信息,构建此时的初级控制流图,包括:
    根据此时所述目标程序的执行过程信息,在所述执行过程信息中标记全部的首指令;
    令每两个相邻的所述首指令之间的内容为一个基本块,基于所述基本块构建初始控制流图。
    可选的,所述对所述目标程序进行污点分析,获取带有污点标记的指令序列,进而确定所述带有污点标记的指令序列对应的基本块,根据所述基本块进 行控制依赖分析进行指令标记,确定被标记的指令,包括:
    确定污染源格式,为所述污染源赋予第一标签;
    在所述目标程序的执行过程中,确定与所述污染源有关的指令,基于所述第一标签确定与所述指令对应的第二标签,结合所述指令类型确定所述污染源的传播情况,根据所述传播情况对所述第二标签的标签值进行修改,得到修改后的标签值;
    基于所述修改后的标签值,对所述指令进行污点标记;
    确定所述带有污点标记的指令序列对应的基本块,结合所述传播情况,获取所述基本块的后必经点集合,根据所述后必经点结合进行控制依赖分析;
    根据所述控制依赖分析结果进行指令标记,确定被标记的指令。
    可选的,所述在所述目标程序的执行过程中,确定与所述污染源有关的指令,基于所述第一标签确定与所述指令对应的第二标签,结合所述指令类型确定所述污染源的传播情况,根据所述传播情况对所述第二标签的标签值进行修改,得到修改后的标签值,包括:
    在80×86系统的指令集中,所述指令分为以下三个类型,
    数据转移指令即data movement-based(例如MOV,PUSH,POP等),在该类型的指令中,源操作数的第二标签的标签值传递到目的操作数的第二标签的标签值;
    算术指令(ADD,OR等),在该类型的指令中,目的操作数的第二标签的标签值来源于两个源操作数的第二标签的标签值;
    只包含一个操作数的指令(INC,DEC等),在该类型的指令中,由于该操作数的信息流流向指令自身,因此操作数的第二标签的标签值不变。
    可选的,所述在载入所述程序快照后,从所述快照链表中删除已载入的所述程序快照以及与未标记指令对应的程序快照,进而修改与已载入的所述程序快照对应的条件转移指令,按所述修改后的条件转移指令对应的程序路径执行所述目标程序,包括:
    在载入所述程序快照后,从所述快照链表中将已载入的所述快照链表删除,将所述快照链表中与未标记指令对应的程序快照进行删除;
    确定与已载入的所述程序快照对应的条件转移指令,修改所述条件转移指令中、的执行路径,按修改后的所述执行路径执行所述目标程序。
    可选的,所述方法还包括:
    在所述目标程序的执行过程中,获取所述函数调用关系;
    根据所述函数调用关系,构建函数调用关系图。本发明提供的技术方案带来的有益效果是:
    通过创建与目标程序对应的程序快照,在目标程序快要结束时,构建目标程序的控制流图,同时通过污点分析和控制依赖关系分析的方式进行指令标记,载入与被标记指令对应的程序快照,进而与被载入程序快照对应的条件转移指令的执行路径进行修改,按修改后的指令路径继续执行目标程序,重复以上步骤,最终根据所有初级控制流图构建完整控制流图,根据完整控制流图得到目标程序即恶意软件的所有执行路径。相对于现有技术,可以避免只根据单一路径对目标程序进行分析时仅能获取目标程序的部分行为,并且能够降低系统开销。
    附图说明
    为了更清楚地说明本发明的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
    图1是本发明提供的一种恶意软件的多执行路径构造方法的流程示意图;
    图2是本发明提供的一种恶意软件的多执行路径构造方法中的初等控制流图;
    图3是本发明提供的一种恶意软件的多执行路径构造方法中的完整控制流图;
    图4是本发明提供的一种恶意软件的多执行路径构造方法的详细流程示意图;
    图5是本发明提供的一种恶意软件的多执行路径构造方法的另一详细流程示意图。
    具体实施方式
    为使本发明的结构和优点更加清楚,下面将结合附图对本发明的结构作进一步地描述。
    实施例一
    本发明提供了一种恶意软件的多执行路径构造方法,如图1所示,所述恶意软件的多执行路径构造方法,包括:
    步骤一,导入目标程序,检测所述目标程序是否为可执行文件,如果所述目标程序为所述可执行文件,则执行所述目标程序。
    步骤二,在所述目标程序的执行过程中,检测到条件转移指令时,创建程序快照,将所述程序快照保存至快照链表中。
    步骤三,在所述目标程序的执行过程中,监测所述目标程序的运行状态,当所述目标程序将要结束时,暂停所述目标程序的运行,根据此时所述目标程序的执行过程信息,构建初级控制流图,进行污点分析和控制依赖关系分析,根据所述污点分析和控制依赖关系分析的结果进行指令标记,从所述快照链表中载入与被标记指令对应的程序快照,根据所述程序快照恢复所述目标程序。
    步骤四,在载入所述程序快照后,从所述快照链表中删除已载入的所述程序快照以及与未标记指令对应的程序快照,进而修改与已载入的所述程序快照对应的条件转移指令,按所述修改后的条件转移指令对应的程序路径执行所述目标程序。
    在执行所述步骤四后,重复执行步骤二至步骤四的内容,直至所述快照链表中程序快照数量为零时终止。
    步骤五,结合在步骤三中构建的所述初级控制流图构建完整控制流图,以便基于所述完整控制流图获取所述目标程序的多执行路径。
    在实施中,为了获取恶意软件在执行时候的多执行路径,需要执行如下步骤:
    首先,判断该恶意软件是否为可执行文件,即将恶意软件作为目标程序导入到虚拟机中,仅当目标程序为可执行文件时,执行该目标程序。
    其次,在目标程序的执行过程中,检测条件转移指令,一旦检测到条件转移指令,创建该时刻对应的程序快照,将程序快照保存在快照链表中。
    再次,在目标程序的执行过程中,除了检测条件转移指令外,还需要监测目标程序的运行状态,以便于当目标程序将要结束时,暂停目标程序的运行,从而根据暂停时刻获取的到执行过程信息,构建初级控制流图,同时对目标程序过程中的指令序列进行污点分析和控制依赖关系分析,使得根据污点分析和控制依赖分析的结果进行指令标记,进而从快照链表中载入与被标记的指令对 应的程序快照,根据载入的程序快照对目标程序进行恢复。
    接着,在从快照链表中载入程序快照之后,从快照链表中将已载入的程序快照删除,同时将快照链表中与未标记指令对应的程序快照删除,在完成上述删除操作后,将与已载入的程序快照对应的条件转移指令对应的条件转移指令的执行路径进行修改,按修改后的路径继续执行目标程序。
    值得注意的是,在修改执行路径并按修改后的执行路径执行目标程序后,重复“检测条件转移指令—创建程序快照—监测目标程序运行状态—构建初级控制流图—污点分析和控制依赖关系分析—载入程序快照—恢复目标程序—删除程序快照—修改执行路径—按修改后执行路径执行目标程序”的步骤。直至快照链表中程序快照的数量为零为止。
    当快照链表中程序快照数量为零后,根据构建的所有初级控制流图如图2所示,将所有初级控制流图中的内容统一在一张控制流图中,也就是构建完整控制流图如图3所示,在该完整控制流图中,能够清楚的看出该目标程序从开始至结束的完整路径分布,从而可以根据完整控制流图获取目标程序的多执行路径。
    本发明提供一种恶意软件的多执行路径构造方法,通过创建与目标程序对应的程序快照,在目标程序快要结束时,构建目标程序的控制流图,同时通过污点分析和控制依赖关系分析的方式进行指令标记,载入与被标记指令对应的程序快照,进而与被载入程序快照对应的条件转移指令的执行路径进行修改,按修改后的指令路径继续执行目标程序,重复以上步骤,最终根据所有初级控制流图构建完整控制流图,根据完整控制流图得到目标程序即恶意软件的所有执行路径。相对于现有技术,可以避免只根据单一路径对目标程序进行分析时仅能获取目标程序的部分行为,尽可能的减少由于无法获取目标程序的全部执行路径导致安全隐患以及带来的经济损失,并且由于在重复过程中随时删除不需要的程序快照,因此能够降低系统开销。
    可选的,所述在所述目标程序的执行过程中,监测所述目标程序的运行状态,当所述目标程序将要结束时,暂停所述目标程序的运行,根据此时所述目标程序的执行过程信息,构建初级控制流图,进行污点分析和控制依赖关系分析,根据所述污点分析和控制依赖关系分析的结果进行指令标记,从所述快照 链表中载入与被标记指令对应的程序快照,根据所述程序快照恢复所述目标程序,即步骤三如图4所示,包括:
    301、监测所述目标程序的运行状态,当所述目标程序将要结束时,调用中断服务暂停所述目标程序的运行。
    302、根据此时所述目标程序的执行过程信息,构建此时的初级控制流图。
    303、对所述目标程序进行污点分析,获取带有污点标记的指令序列,进而确定所述带有污点标记的指令序列对应的基本块,根据所述基本块进行控制依赖分析进行指令标记,确定被标记的指令。
    304、从所述快照链表提取与所述被标记的指令对应的程序快照,将所述程序快照进行载入,根据所述程序快照对所述目标程序进行恢复。
    在实施中,该步骤详细包括:
    首先,监测目标程序的运行状态,一旦监测到目标程序将要结束时,即调用中断服务暂停目标程序的运行。这里判断目标程序“将要结束”的具体方式在下文具体描述。
    具体的暂停流程为:请求中断→响应中断→关闭中断→保留断点→中断源识别→保护现场→中断服务子程序→恢复现场→中断返回。通过该暂停流程实现在目标程序将要结束时对目标程序的暂停步骤。
    其次,在目标程序暂停时,获取此时目标程序的执行过程信息。这里的执行过程信息包括指令信息、寄存器信息和内存数据信息等。以便于根据这些信息构建此时的初级控制流图。
    再次,对目标程序进行污点分析,将符合预设标准的指令序列进行污点标记,得到带有污点标记的指令序列,进一步的获取带有污点标记的指令序列对应的基本块,根据获取到的基本块进行控制依赖分析,确定与上述基本块具有依赖关系的指令,将这些指令进行标记,得到被标记的指令。
    最后,在快照链表中提取上一步被标记的指令对应的程序快照,将该程序快照载入,根据载入的程序快照对目标程序进行恢复。
    这里的快照是关于指定数据集合的一个完全的可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。通过载入的程序快照,能够使得目标程序快速回溯至之前根据跳转指令进行跳转的时刻,以便于后续的对跳转指 令指定的执行路径进行修改,使得目标程序在接下来的时间能够根据修改后的执行路径执行,从而获取目标程序所有可能的执行路径,进而获取目标程序的完整执行路径,使得根据完整执行路径分析该目标程序的性质。
    可选的,所述监测所述目标程序的运行状态,当所述目标程序将要结束时,调用中断服务暂停所述目标程序的运行,即步骤301具体包括:
    监测所述目标程序的运行状态,获取函数KiUserExceptionDispatcher和函数NtTerminateProcess的混淆保护情况;
    如果所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口没有被混淆保护,则跟踪在导入地址表中所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口是否被调用;
    如果所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口已经被混淆保护,则跟踪在ntdll输出表中所述函数KiUserExceptionDispatcher和所述函数NtTerminateProcess的应用程序接口是否被调用;
    如果在执行所述目标程序的过程中,检测到中央处理器的程序计数器中存储的地址等于所述函数NtTerminateProcess的起始地址时,确认所述目标程序属于正常结束;
    如果在执行所述目标程序的过程中,检测到所述中央处理器的程序计数器中存储的地址等于所述函数KiUserExceptionDispatcher的起始地址时,确认所述目标程序因出现异常而中止。
    在实施中,具体判断目标程序将要结束的方式简单的来说即为实时获取函数KiUserExceptionDispatcher和函数NtTerminateProcess的混淆保护情况。而二者的混淆保护情况通过监测两个函数接口的调用情况来实现。
    具体的,将如果上述两个函数中,中央处理器中程序计数器存储的地址等于所述函数NtTerminateProcess的起始地址时,确认所述目标程序属于正常结束;对应的,如果中央处理器的程序计数器中存储的地址等于所述函数KiUserExceptionDispatcher的起始地址时,确认所述目标程序因出现异常而中止。
    这里之所以判断目标程序在执行过程中是正常执行而中止或者是在执行过 程中出现了异常而中止,是相对现有技术而言,对目标程序的中止原因进行判定,而现有技术中则没有该判定步骤。通过该判定步骤,可以更为有效的对目标程序的执行路径进行获取。
    可选的,所述根据此时所述目标程序的执行过程信息,构建此时的初级控制流图,即步骤302具体包括:
    根据此时所述目标程序的执行过程信息,在所述执行过程信息中标记全部的首指令;
    令每两个相邻的所述首指令之间的内容为一个基本块,基于所述基本块构建初始控制流图。
    在实施中,获取301中暂停时刻目标程序的执行过程信息,在该执行过程中进行标记首指令的步骤,通常来说,首指令是每个基本块中的第一个语句,在本实施例中,具体的首指令的类型分为以下三种:
    函数的第一条指令均为首指令;
    任意一条战役指令的跳转目标都是首指令;
    紧跟在条件转移指令之后的指令都是首指令。
    在确定了首指令后,将某个首指令与下一个首指令之间的内容作为一个基本块,以便于根据确定好的首指令完成基本块的划分。
    值得注意的是,在基本块的划分完成后,可能会遇到一下两种特殊情况:
    1)确定基本块的连接关系。如果基本块A结尾处转移指令的跳转目标是基本块B,或B是紧跟在A后面的,则添加一条边A->B。控制流图中的每个基本块至多只能有两个直接后继。对于有两个直接后继的基本块,其出边具有属性“真”或“假”,并且对于任意基本块N,均存在一条从开始节点经N到达终止节点的路径。
    2)基本块的合并与拆分。如果新生成的基本块与已有的基本的起始和结束地址相等,则合并为一个基本块,如果新生成的基本块的起始地址位于已有的基本块的起始和结束地址中间,且结束地址相等,则将已有的基本块拆分为两个基本块。
    在完成上述基本块的划分后,根据基本块之间的相互关系,构建初级控制流图。这里的控制流图(CFG,Control flow graph)也叫控制流程图,是一个过 程或程序的抽象表现。控制流图常以数据结构链的形式表示。控制流图中每个在图形中的节点代表一个基本块,例如,没有任何跳跃或跳跃目标的直线代码块;跳跃目标以一个块开始,和以一个块结束。定向边缘被用于代表在控制流中的跳跃。
    构建控制流图的具体步骤如下:
    (1)标记出所有的首指令
    函数的第一条指令是首指令;
    任意一条转移指令的跳转目标都是首指令;
    紧跟在条件转移指令之后的指令都是首指令。
    (2)各个基本块都是有某条首指令开始一直到下一个首指令为止(但不包括下一条首指令)之间的所有指令构成。
    (3)如果基本块A结尾处转移指令的跳转目标是基本块B,或B是紧跟在A后面的,则添加一条边A->B。
    在控制流图中,控制流图中的结点即为基本块,基本块是一系列顺序输入的指令构成,结尾处通常是一个条件转移指令。控制流图中表示的是所有可执行路径的超集。
    这里根据暂停时刻获取目标程序的执行过程信息构建针对此时刻的初级控制流图,以便于根据此初级控制流图在最后完成完整控制流图的构建,从而根据完整控制流图获取目标程序的全部执行路径。
    可选的,所述对所述目标程序进行污点分析,获取带有污点标记的指令序列,进而确定所述带有污点标记的指令序列对应的基本块,根据所述基本块进行控制依赖分析进行指令标记,确定被标记的指令,即步骤303具体包括:
    确定污染源格式,为所述污染源赋予第一标签;
    在所述目标程序的执行过程中,确定与所述污染源有关的指令,基于所述第一标签确定与所述指令对应的第二标签,结合所述指令类型确定所述污染源的传播情况,根据所述传播情况对所述第二标签的标签值进行修改,得到修改后的标签值;
    基于所述修改后的标签值,对所述指令进行污点标记;
    确定所述带有污点标记的指令序列对应的基本块,结合所述传播情况,获 取所述基本块的后必经点集合,根据所述后必经点结合进行控制依赖分析;
    根据所述控制依赖分析结果进行指令标记,确定被标记的指令。
    在实施中,该步骤主要分为三部分,依次为污点标记→控制依赖分析→得到标记指令。
    (1)确定污染源格式,并且赋予每个污染源一个第一标签。在实际使用情况中,污染源有系统默认和用户自定义两种方式,系统默认从程序的标准输入或者从网络中读入的数据为污染源;用户也可以根据自己的需要去指定或者在系统默认的基础上去增加污染源。此时需要使用者将能够作为污点信息的内容格式预先存储,这样使得在执行目标程序时,一旦检测到符合该内容格式的内容,就可以立即将该内容作为污点信息,进而完成后续处理步骤。一旦判定存储在内存中的数据或寄存器属于污染源,则将该数据对应的第一标签的标签值从0修改为1,表明对应的数据属于污染数据。
    (2)在目标执行过程中,确定污染源有关的指令,基于上一步的第一标签确定与该指令对应的第二标签。进而根据指令所属的不同类型确定污染源的传播情况,即根据不同的传播类型,对传播过程中涉及的所有指令进行污染性判断,将受到污染的指令对应的第二标签的标签值修改为1,这里的详细步骤在下文中进行描述。
    (3)根据所述指令的标签值,对指令进行污点标记。例如将第二标签的标签值为1的指令添加污点标记,污点标记使用“tainted”。在包含多个指令的指令序列中,凡是有“tainted”作为后缀的行的指令序列,均为带有污点标记的指令序列。
    (4)确定带有污点标记的指令序列对应的基本块,结合前一步获取的带有污点标记的指令序列的传播情况,获取上述基本块的后必经点集合。
    例如节点w和节点v,如果每一条从节点v到终止stop的路径中均包含有节点w,则称节点w是节点v的后必经节点。
    通过确定后必经节点的方式,逐个对每个节点进行控制依赖分析,获取控制依赖分析的结果。
    (5)根据上一步获取的控制依赖分析结果,将与带有污点标记的指令序列具有与控制依赖关系的指令序列均进行标记,得到被标记的指令。
    该步骤通过进行污点分析以及控制依赖分析,获取目标程序在执行过程中 可能会产生其他路径的指令,并对该类型的指令进行标记,以便于后期从快照列表中载入与该处带有标记的指令对应的程序快照,进而将该处指令的执行路径进行修改,得到目标程序可能的执行路径。
    可选的,所述在所述目标程序的执行过程中,确定与所述污染源有关的指令,基于所述第一标签确定与所述指令对应的第二标签,结合所述指令类型确定所述污染源的传播情况,根据所述传播情况对所述第二标签的标签值进行修改,得到修改后的标签值,包括:
    在80×86系统的指令集中,所述指令分为以下三个类型,
    数据转移指令即data movement-based(例如MOV,PUSH,POP等),在该类型的指令中,源操作数的第二标签的标签值传递到目的操作数的第二标签的标签值;
    算术指令(ADD,OR等),在该类型的指令中,目的操作数的第二标签的标签值来源于两个源操作数的第二标签的标签值;
    只包含一个操作数的指令(INC,DEC等),在该类型的指令中,由于该操作数的信息流流向指令自身,因此操作数的第二标签的标签值不变。
    在实施中,使用one-bit标签(0代表“未污染”,1代表“以污染”)去标记内存中的数据和寄存器是否被污染。
    在所述目标程序的执行过程中,标签值会随着一条指令传播到另一条指令。只要是与污染源相关的指令,均将其第二标签的标签值从0修改为1,表明该条指令被污染。
    之后根据指令所述的类型,进一步的对第二标签的标签值进行修改:
    具体的,如果某个指令为80×86系统的指令集中的数据转移指令,该类型指令的实施步骤为,将源操作数指定的数据迁移到目的操作数指定的位置。根据操作内容可以看出,由于转移前的指令带有污染源的关系导致第二标签的标签值为1,因此进行数据转移的指令也会带有污染源,导致该数据转移类型的指令的第二标签的标签值为1。
    如果某个指令为80×86系统的指令集中的算数指令,例如ADD,OR等,该类型指令的实施步骤为,将两个源操作数中的数据合并为一个目的操作数中的数据,根据该操作内容可以看出,只要两个源操作数中任意一个操作数对应 的指令由于带有污染源的关系导致该指令的第二标签的标签值为1,就会令目的操作数对应的指令受到污染,导致目的操作数对应的指令的第二标签的标签值为1。
    如果某个指令为80×86系统的指令集中的仅包含一个操作数的指令,例如INC,DEC等,该类型指令的实施步骤为,对指令自身进行操作,因此,无论操作前该指令的第二标签的标签值为0还是1,在操作后指令对应的第二标签的标签值保持不变。
    当然在80×86系统的指令集中不仅仅包含上述三种类型的指令,但由于其他类型指令的数量很少,需要进行针对性处理,这里仅对大部分指令的第二标签的标签值的变化进行说明,剩余部分指令根据上述思想处理即可,此处不再赘述。
    可选的,所述在载入所述程序快照后,从所述快照链表中删除已载入的所述程序快照以及与未标记指令对应的程序快照,进而修改与已载入的所述程序快照对应的条件转移指令,按所述修改后的条件转移指令对应的程序路径执行所述目标程序,即步骤四,如图5所示,包括:
    401、在载入所述程序快照后,从所述快照链表中将已载入的所述快照链表删除,将所述快照链表中与未标记指令对应的程序快照进行删除;
    402、确定与已载入的所述程序快照对应的条件转移指令,修改所述条件转移指令中的执行路径,按修改后的所述执行路径执行所述目标程序。
    在实施中,步骤四分为两个步骤具体实现:
    首先,在步骤三的最后,载入与被标记指令对应的程序快照。之后在快照链表中将已载入的程序快照进行删除,同时删除快照链表中与未标记执行对应的程序快照。
    接着,将与已载入的程序快照对应的条件转移指令进行修改,假设之前条件转移指令中的内容为“执行第一路径,关闭第二路径”,修改后的条件转移指令的内容为“关闭第一路径,执行第二路径”。
    由此可见此处对条件转移指令的修改是将原有的内容进行反转,通过这样的修改方式,获取到该目标程序之前无法执行的路径,从而为获取目标程序的完整执行路径打下基础。
    可选的,所述方法还包括:
    在所述目标程序的执行过程中,获取所述函数调用关系;
    根据所述函数调用关系,构建函数调用关系图。
    在实施中,除了根据前文所述方法获取到完整控制流图,以便于根据完整控制流图获取到目标程序的完整执行路径。
    除此之外,在本方法的步骤三中,还可以增加“在所述目标程序的执行过程中,获取所述函数调用关系”的步骤,对应的在步骤五中,增加“根据所述函数调用关系,构建函数调用关系图”的步骤。
    这里之所以增加获取函数调用关系的步骤,是因为在目标程序的执行过程中,必然会出现对函数的调用,而不同时间对不同函数的调用情况也能在一定程度上反映出目标程序的执行路径,因此此处增加了获取函数调用关系以及后续的构建函数调用关系图的步骤。
    本发明提供一种恶意软件的多执行路径构造方法,通过创建与目标程序对应的程序快照,在目标程序快要结束时,构建目标程序的控制流图,同时通过污点分析和控制依赖关系分析的方式进行指令标记,载入与被标记指令对应的程序快照,进而与被载入程序快照对应的条件转移指令的执行路径进行修改,按修改后的指令路径继续执行目标程序,重复以上步骤,最终根据所有初级控制流图构建完整控制流图,根据完整控制流图得到目标程序即恶意软件的所有执行路径。相对于现有技术,可以避免只根据单一路径对目标程序进行分析时仅能获取目标程序的部分行为,并且能够降低系统开销。
    需要说明的是:上述实施例提供的构造多执行路径方法来获取恶意软件的完整执行路径的实施例,仅作为该构造路径方法中在实际应用中的说明,还可以根据实际需要而将上述构造路径方法在其他应用场景中使用,其具体实现过程类似于上述实施例,这里不再赘述。
    上述实施例中的各个序号仅仅为了描述,不代表各部件的组装或使用过程中得先后顺序。
    以上所述仅为本发明的实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护 范围之内。

    关 键  词:
    一种 恶意 软件 执行 路径 构造 方法
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:一种恶意软件的多执行路径构造方法.pdf
    链接地址:https://www.zhuanlichaxun.net/p-6358820.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1