一种用于收集和截获计算机内存行为的蜜罐机制及其方法

文档序号:6546514阅读:289来源:国知局
一种用于收集和截获计算机内存行为的蜜罐机制及其方法
【专利摘要】一种用于收集和截获计算机内存行为的蜜罐机制及方法,包括:内存虚拟化模块、蜜罐模块、内省模块、控制模块和蜜罐记录模块;本机制基于内存虚拟化技术,支持SMP结构,可以在操作系统运行时部署轻量化虚拟机,对蜜罐中的内存行为进行监视;也可作为其它虚拟机的子模块实现相同功能;蜜罐在系统运行时监视多个核中的每个进程对内存关键区域的精确修改情况,由位图表示,同时通过内省模块收集相关的进程详细信息和进程当时完整的运行时状态,所有记录统一集中到蜜罐记录模块;本发明基于事件驱动,不修改目标操作系统的任何代码,相对于现有的指令级监视性能损耗低,灵活度高,适合用于实时取证和动态分析。
【专利说明】一种用于收集和截获计算机内存行为的蜜罐机制及其方法
【技术领域】
[0001]本发明涉及的是一种计算机行为监视领域的机制,尤其是一种用于收集和截获计算机内存行为的蜜罐机制及其方法。
【背景技术】
[0002]蜜罐技术根据交互的程度分为高交互蜜罐和低交互蜜罐,低交互蜜罐通过模拟操作系统和网络服务部署蜜罐,虽然部署简单,但是由于模拟程度有限,获取的信息不足并且容易被识破。而高交互蜜罐提供了完全真实的操作系统和网络服务,可以获得非常丰富的攻击信息,但是潜在的风险和部署的难度非常高。目前高交互蜜罐可以通过虚拟化技术实现来观察蜜罐中的状态变化。这涉及到计算机的动态分析技术,目前基于虚拟化技术的动态分析只能在事先部署好的虚拟化环境中执行。
[0003]计算机分析技术分为动态分析和静态分析。静态分析的目标是源代码,通过分析源代码的语义来判断其行为,当前的代码加壳和虚拟化执行技术大大限制了静态分析的有效性。动态分析可以解决静态分析的问题,它通过分析一个运行中的系统直接获取其行为。目前动态分析的途径可以是分析系统调用行为、内核API调用行为以及监视进程间的交互和模块调用情况等。但是一个具有内核权限的进程可以绕过系统调用,使用DKOM技术实现自己的目的。由于该方法直接修改操作系统的内核数据,普通基于内核的监视方法虽然可以观察到内存的改变,但是无法判断其来源。目前使用指令级别的分析能够解决问题,即使用类似于QEMU的虚拟机,在客户虚拟机指令被翻译成短码的过程中,对计算机运行的每一条指令进行快速分析,得知当前指令将要修改的内存位置和修改的具体内容。但是这类方法具有非常低的灵活性和效率,即无法对一个运行在真实硬件上的操作系统使用指令级别的分析技术获得一个进程的内存操作行为。
[0004]使用内存虚拟化技术可以在对用户操作系统的内存地址转换,内存读写执行权限以及TLB缓存进行完全的管理。目前有完全使用软件虚拟化的影子页表技术和基于硬件虚拟化的IntelVT的EPT技术和AMD V的RVI (NPT)技术。基于硬件虚拟化实现的优点是可以完全独立于目标操作系统,由硬件直接提供内存虚拟化功能的支持,相对于软件虚拟化方法更加简单和高效。

【发明内容】

[0005]针对现有技术在计算机监视领域的不足,本发明提供一种用于收集和截获计算机内存行为的蜜罐机制及其方法,采用蜜罐的基本思路在内存关键区域中部署蜜罐,监视所有修改蜜罐中内存的进程,使用非指令级别监视的方法,解决了目前基于指令级别对内存行为分析的局限性。
[0006]本发明计算机蜜罐实现机制是无法绕过的可靠的。与传统的部署在网络环境中的外部蜜罐不同,内存蜜罐是一种在硬件级别监视计算机内存活动的蜜罐,利用硬件虚拟化技术可以将其部署在任何真实的操作系统中,也可以作为虚拟机软件的一部分监视虚拟系统的内存活动。内存活动包括对内存中数据结构的改动和对代码的改动。本发明由于其部署的灵活性及关注底层的事件,可以作为高交互蜜罐部署在蜜网中,也可以直接监视恶意程序对操作系统内核的攻击。由于蜜罐在硬件级别监视,任何绕过操作系统内核,直接修改内存的行为也能够被内存蜜罐捕捉到,只要该程序修改了蜜罐监视的内存区域。内存蜜罐精确地记录了在蜜罐中的进程活动,包括每个进程对蜜罐精确到字节的修改情况,进程被蜜罐捕捉到时的运行状态和运行快照,以及进程的详细信息。还可以对获得的进程运行快照进行进一步的静态分析。
[0007]本发明的技术方案是:一种用于收集和截获计算机内存行为的蜜罐机制,包括内存虚拟化模块、蜜罐模块、内省模块、控制模块和蜜罐记录模块;
[0008]所述内存虚拟化模块用于控制虚拟机内存操作权限,包括二级地址转换功能、和在地址转换过程中的读写及执行权限的控制,在发生违反读、写或执行权限的事件时,将当前CPU的控制流转到蜜罐模块的事件处理函数中,在函数返回后,恢复CPU的正常运行;
[0009]所述蜜罐模块由多个可配置的独立蜜罐个体组成,每个蜜罐个体对应操作系统中的一张内存页,即成为蜜罐页;蜜罐模块以蜜罐页为单位,在系统运行时监视多个核中的各个进程对蜜罐区域的精确修改情况,并由位图表示;
[0010]所述内省模块在蜜罐模块收集信息的同时,收集相关的进程详细信息和进程当时完整的运行时状态;
[0011]所述控制模块提供外部控制接口,并将控制命令信号转发到蜜罐模块对应的控制接口中,用于设置蜜罐模块监视的内存区域,启动、停止和重置蜜罐功能;
[0012]所述蜜罐记录模块收集蜜罐模块和内省模块提交的数据,记录每个进入蜜罐进程的完整行为。
[0013]进一步的,所述蜜罐记录模块由进程记录器组成,所述进程记录器由一个或多个蜜罐记录器组成,每个蜜罐记录器对应一个正在运行的蜜罐页;一个进程记录器中,蜜罐模块中的蜜罐页至多只对应一个蜜罐记录器;不同的进程记录器中,对应相同蜜罐页的蜜罐记录器互相独立记录信息,且各记录器仅在有记录内容时占用内存。
[0014]本发明还提供一种用于收集和截获计算机内存行为的蜜罐方法,具体步骤如下:
[0015](I)配置阶段,通过控制模块配置蜜罐模块监视的内存区域、即蜜罐区域;
[0016](2)启动阶段,控制模块接收到外部的启动命令后,将启动命令转发到蜜罐模块对应的控制接口中,蜜罐模块使用内存虚拟化模块关闭蜜罐区域的写权限,并捕捉任何试图写入蜜罐区域的进程行为;
[0017](3)运行阶段,蜜罐模块通过内存虚拟化模块持续控制试图写入蜜罐区域的进程对蜜罐的访问,并收集进程对蜜罐区域中内存的修改情况;内省模块收集相关的进程详细信息和进程进入蜜罐时的运行状态;蜜罐记录模块收集并整理蜜罐模块和内省模块不断提交的数据。
[0018](4)停止阶段,控制模块收到外部的停止命令后,将停止命令转发到蜜罐模块对应的控制接口中,蜜罐模块向蜜罐记录模块提交所有数据,并打开蜜罐区域的写权限允许所有读写操作,获取蜜罐记录模块中记录的数据;
[0019](5)重置阶段,控制模块收到外部的重置命令后,将重置命令转发到蜜罐模块对应的控制接口中,蜜罐模块清除已配置的蜜罐,记录蜜罐模块清空所有数据;[0020](6)当重置完成后,返回步骤(I),等待重新配置蜜罐模块监视的内存区域。
[0021]进一步的,所述蜜罐模块的具体运行步骤如下:
[0022](I)配置阶段,蜜罐模块获取空闲的蜜罐个体、并将空闲的蜜罐个体对应到目标内存页上,即成为蜜罐页;
[0023](2)运行阶段,利用蜜罐页的蜜罐个体监视目标内存页上的进程读写情况,同时通过内省模块获取操作系统中相关进程的详细信息,不断提交到蜜罐记录模块中;所述蜜罐页的具体运行步骤如下:
[0024]a、初始化,打开内存屏障;
[0025]b、捕捉目标进程,当有进程第一次访问蜜罐页对应的内存时,触发硬件保护事件,控制流陷入虚拟机监视器,目标进程暂停运行,蜜罐页截获写事件,通过内省模块获得目标进程详细信息和进程运行状态,将内省模块获得的目标进程详细信息和进程运行状态挂接到蜜罐页中;并在目标进程写入内存之前获取内存页快照,为目标进程生成内存修改位图做准备;之后,蜜罐页允许目标进程在当前CPU的写操作,并返回虚拟机中;之后,目标进程在当前CPU上写入蜜罐;
[0026]C、进程切换事件处理,当前CPU在切换进程上下文时,将陷入虚拟机监视器;此时,蜜罐模块将取消所有蜜罐页内存在当前核中的写权限,这样,在进程继续写入蜜罐页时,蜜罐页可以检查在切换进程后访问蜜罐页的是否还是目标进程,如果是,则进入步骤d,如果否,则进入步骤f;
[0027]d、缺页事件处理,有缺页中断事件发生时,若系统发现被置换出的页属于蜜罐页,系统将继续保存蜜罐页的当前状态,并在下次被置换进物理内存时更新其物理内存地址;
[0028]e、跟踪目标进程,在捕捉完进程后,若在其它核中有进程访问蜜罐页,或者在CPU进程切换事件发生后在蜜罐页中发生写入操作,蜜罐页将检查试图写入的进程是否是当前正在监视的进程,若是,则继续步骤C、步骤d和步骤e,允许单个进程中的多个线程对蜜罐的同步访问;若否,则打开内存屏障保护当前的改动记录,并转入步骤f提交目标进程的监视记录,保证不同进程在同一时间对单个蜜罐页的互斥访问;
[0029]f、提交目标进程监视记录,蜜罐页启动提交过程,将当前的内存页内容和步骤b中快照内存页内容逐BYTE进行对比,生成一个为当前内存页1/8大小的修改情况位图,更新到蜜罐记录模块的对应位置,同时将目标进程的详细信息和捕捉到的目标进程的状态挂接到蜜罐记录模块的对应位置中;之后转到步骤a,为新的进程初始化蜜罐页;若蜜罐模块正在进入停止阶段,则打开所有写权限。
[0030](3)停止阶段,蜜罐模块控制所有蜜罐页完成最后一次提交,并停止蜜罐的运行。
[0031]进一步的,所述步骤a和步骤e中所述的打开内存屏障的具体步骤如下:
[0032](I)控制流进入内存屏障对应的临界区;
[0033](2)内存虚拟化模块取消客户虚拟机在所有CPU上对目标内存页的写权限;
[0034](3)使用中断告知所有CPU页表权限已改动,各CPU收到中断后,第一时间刷新TLB和页表结构缓存,并返回是否成功,若是则进入步骤(4),若否则返回步骤(2);
[0035](4)当所有CPU都返回已成功刷新缓存,即成功打开内存屏障。
[0036]进一步的,所述内存屏障在满足以下条件时:a、控制流离开内存屏障对应的临界区;b、所有CPU上对目标内存页的写权限被等待的CPU打开;内存屏障自动关闭。[0037]进一步的,所述配置阶段,通过控制模块配置蜜罐模块监视的内存区域、即蜜罐区域;具体步骤如下:
[0038](I)控制模块告知蜜罐模块要求配置的内存页,蜜罐模块在内存中分配空闲蜜罐个体,具体配置过程可通过步骤a、b或c进行:
[0039]a、控制模块告知蜜罐模块目标内存页的物理地址,蜜罐模块首先检查目标内存页的物理地址是否已配置蜜罐页,若否,则空闲蜜罐个体根据该物理地址初始化配置成蜜罐页,并返回步骤(I)继续等待配置;
[0040]b、控制模块告知蜜罐模块目标内存页的虚拟地址,蜜罐模块根据客户虚拟机当前进程的页表结构基地址(CR3值)和虚拟地址通过查询物理内存中的页表获得对应的物理地址,蜜罐模块首先检查所述物理地址是否已配置蜜罐页,若否,则空闲蜜罐个体根据所述物理地址初始化配置成蜜罐页,并返回步骤(I)继续等待配置;
[0041]C、控制模块告知蜜罐模块目标内存页的虚拟地址和对应CR3的值,蜜罐模块通过查询操作系统中的页表获得物理地址,蜜罐模块首先检查所述物理地址是否已配置蜜罐页,若否,则空闲蜜罐个体根据所述物理地址初始化配置成蜜罐页,并返回步骤(I)继续等待配置。
[0042]进一步的,所述一种用于收集和截获计算机内存行为的蜜罐方法,其步骤3)运行阶段中,当进程出现写保护事件时,蜜罐模块首先通过内存虚拟化模块获得发生写保护事件的物理地址,蜜罐模块根据物理地址查询HASH表找到唯一对应的蜜罐页,并将写保护事件转发到对应蜜罐页中,自行控制蜜罐页运行。
[0043]进一步的,所述步骤f中蜜罐记录模块的对应位置的具体寻找步骤如下:
[0044](I)蜜罐页根据当前的目标进程,使用HASH表迅速寻找对应的进程记录器,若存在,进入步骤(3);若不存在,则进入步骤(2);
[0045](2)蜜罐记录模块分配一个空闲的进程记录器,并根据蜜罐页的进程详细信息初始化所述进程记录器,使得在下一次进入步骤(I)时,通过HASH表能够找到所述进程记录器;
[0046](3)蜜罐页根据其配置的目标内存页,使用HASH表迅速寻找对应的蜜罐记录器,若存在,则所述蜜罐记录器即为蜜罐记录模块的对应位置,若不存在,则进入步骤(4);
[0047](4)蜜罐记录模块分配一个空闲的蜜罐记录器,并根据蜜罐页的目标内存页配置信息初始化所述蜜罐记录器,使得在下一次进入步骤(3)时,通过HASH表能够找到所述蜜罐记录器;所述蜜罐记录器即为蜜罐记录模块的对应位置。
[0048]本发明所述内省模块在虚拟机监视器中获得在客户操作系统中的当前进程的详细信息和运行状态,包括当前进程相关系统模块、打开的文件、进程ID、进程名称、进程文件路径等,运行状态包括当前CPU上的程序计数器、堆栈指针、栈基指针、各通用寄存器,蜜罐页所对应内存在目标进程中的虚拟地址,以及当前运行的任务详细情况等,还包括当前程序计数器附近的代码快照和当前堆栈的部分快照。根据这些内容,可以粗略分析出进入蜜罐的目标进程的基本情况和当时所处的状态,为进一步的动态和静态分析提供帮助。
[0049]本发明所述蜜罐记录模块收集蜜罐模块和内省模块提交的数据,记录每个进入蜜罐进程的完整行为。具体保存内容包括:每个访问过蜜罐的进程详细信息,包括当前进程相关系统模块、打开的文件、进程ID、进程名称、进程文件路径等;对于每个进程,记录了其对相关蜜罐页在监视期间内的综合修改位图;对于各个进程还记录了相关蜜罐页的配置信息,即配置的CR3、虚拟地址和物理地址,以及进程访问各个蜜罐页时的运行状态,包括当前CPU上的程序计数器、堆栈指针、栈基指针、各通用寄存器、蜜罐页所对应内存在目标进程中的虚拟地址、当前运行的任务详细情况等;还有各进程在进入每个蜜罐页时,程序计数器附近的代码快照和堆栈指针附近的部分快照。
[0050]本发明的有益效果为:
[0051](I)相对于指令级别的监视,内存蜜罐不需要分析每一条执行指令来获取的内存操作内容,而是通过精细地设置硬件中的内存写权限,再通过和原内存快照的比较而得出进程具体修改的内容,这大大提高了效率。
[0052](2)内存蜜罐能在所有支持内存分页的硬件MMU的环境中运行,也弥补了之前方法只在软件虚拟机中使用的缺陷,使得监视内存活动的方法能够应用在运行于真实硬件上的操作系统中。
[0053](3)在实时分析中运用内存蜜罐可以直接监视使用直接内核对象操作技术的恶意软件,而不必使用软件虚拟化技术模拟硬件环境,控制模块提供一个从外部控制蜜罐的途径,可以是网络、串口或者从客户操作系统内部发送控制信号,由控制模块截获,并转发到蜜罐模块对应的控制接口中;控制信息包括命令号和命令参数,在执行完毕后,控制模块向外部返回结果是否成功;整个命令传递过程被加密,只有经解密后正确的信号才能被转发到蜜罐模块的控制接口中,其余的则被忽略,以保证整个蜜罐机制的透明性;其透明性将使恶意程序完全信任该实时分析平台,从而能进行有效的行为分析。
[0054](4)在计算机取证过程中,该方法能实时地获取所有进程在重要内存区域的活动,同时能够获取对应进程的详细信息和运行状态,提供了一条有效的在内存中获取易失性证据的途径。
[0055](5)作为一个蜜罐系统,本发明可以在一个真实运行的系统或者虚拟操作系统下部署高交互蜜罐,从而提供一个完全真实的未作任何修改的操作系统作为蜜罐,同时可以对进入蜜罐的进程进行监视、检测和分析。
[0056](6)本发明运行阶段,蜜罐模块通过内存虚拟化模块持续控制各进程对蜜罐的访问;该模块保证在多核系统中的不同进程在同一时间对单个蜜罐的互斥访问,能够满足准确性;蜜罐模块允许单个进程中的多个线程对蜜罐的同步访问,能够提高效率。
【专利附图】

【附图说明】
[0057]图1为内存蜜罐的结构示意图;
[0058]图2为蜜罐运行状态转移图;
[0059]图3为蜜罐个体运行状态转移图;
[0060]图4为蜜罐和记录模块结构示意图;
[0061]图5为蜜罐运行流程示意图。
【具体实施方式】
[0062]图1所示的为本发明的结构示意图,包括蜜罐模块、蜜罐记录模块、内省模块、控制模块和内存虚拟化模块。[0063]本实施例采用了硬件虚拟化技术,其中,内存虚拟化模块使用了 Intel VT中的EPT技术,控制从客户物理内存空间到真实物理内存空间的转换。为了在运行阶段独立控制各个CPU中的写权限,内存虚拟化模块建立了和CPU数量相等的二级转换页表,将各CPU中的EPTP指针配置为各个页表的PML4页地址。内存虚拟化模块映射客户物理地址到相同的真实物理地址。使得在关闭内存虚拟化模块后,客户虚拟机仍能正常运行。内存虚拟化模块控制所有EPT页表的Write access位,从而可以提供蜜罐控制所有内存页写权限的功能。这样,在客户操作系统访问客户物理内存时,只要当前的内存页被取消了写权限,将触发EPT的写保护事件,系统会在客户操作系统不知情的情况下对该事件进行处理。使用AMD-V中的RVI (NPT)技术同样可以实现相同的功能。在没有硬件虚拟化支持的硬件平台中,也可以使用软件虚拟化中的影子页表技术实现内存虚拟化。内省模块通过对操作系统中的数据结构进行解析,获取进程的详细信息和进程的运行状态。数据结构的定义来源于符号表,内省模块通过CR3和数据结构的虚拟地址查询操作系统中的页表获得目标数据结构的内容。控制模块截获CPWD事件,解析事件中相关的通用寄存器信息,获取控制信息并告知蜜罐模块。
[0064]蜜罐模块和蜜罐记录模块的结构可以参考图4。其中,蜜罐记录模块由进程记录器组成,进程记录器由一个或多个蜜罐记录器组成,每个蜜罐记录器对应一个正在运行的蜜罐页;一个进程记录器中,蜜罐模块中的蜜罐页至多只对应一个蜜罐记录器;不同的进程记录器中,对应相同蜜罐页的蜜罐记录器互相独立记录信息。
[0065]图2所示的为蜜罐的四个运行状态和四个状态转换过程。其步骤包括:
[0066]步骤1:配置过程,通过控制模块配置蜜罐模块监视的内存区域,配置的内容包括:内存页虚拟地址和虚拟地址对应的CR3值。内存页物理地址和该内存页是否属于内核空间可以通过分析页表结构和操作系统对虚拟地址范围的布局获得。
[0067]步骤2:启动过程,控制模块收到外部的启动命令。蜜罐模块使用内存虚拟化模块关闭各个CPU的EPT页表关于蜜罐区域的Write access页表权限。
[0068]步骤3:在运行状态,蜜罐模块通过内存虚拟化模块对EPT页表的Write access权限的持续控制,限制各进程对蜜罐的访问。对写权限的控制保证在多核系统中的不同进程在同一时间对单个蜜罐的互斥访问,同时允许单个进程中的多个线程对蜜罐的同步访问,具体的过程可以参考图5。蜜罐在运行阶段收集进程对蜜罐中每一个内存地址的修改情况,并生成修改位图不断提交到蜜罐记录模块中,同时提交的还有通过内省模块获得的进程详细信息和进程进入蜜罐时的运行状态。蜜罐记录模块收集并整理所有记录。
[0069]步骤4:停止过程,控制模块收到外部的停止命令。蜜罐模块向记录模块提交所有未提交的内容,并将EPT页表对应的Write access位置I。
[0070]步骤5:重置过程,控制模块收到外部的重置命令。蜜罐模块清除已配置的蜜罐页,记录模块清空所有记录。当重置完成后,进入重置状态,即返回步骤1,可重新配置蜜罐监视的内存区域。
[0071]图3所示的为蜜罐个体运行状态转移图,每个蜜罐个体的运行状态根据蜜罐模块当前的状态运行在各自的模式下,其步骤包括:
[0072]步骤1:配置阶段。通过蜜罐模块控制要监视的内存区域,每个内存页由一个蜜罐个体进行监视,蜜罐模块在该阶段将空闲的蜜罐个体配置上要监视的内存页,包括物理地址、虚拟地址、对应的CR3值,即成为蜜罐页。
[0073]步骤2:蜜罐页初始化状态。该状态可以从启动阶段转移过来,此时蜜罐页在开始监视一个新进程时要进行初始化工作,即把所有CPU核上的EPT页表对应该页内存的Writeaccess权限都置为0,打开内存屏障,并重置蜜罐中所有的已记录信息和状态。若是从蜜罐页提交记录状态转移过来,则蜜罐页的初始化不必控制Write access权限。并让客户操作系统继续运行。
[0074]步骤3:当蜜罐页初始化完毕后,有进程试图写入该页内存时,即会产生写保护权限事件,蜜罐模块将该事件交由蜜罐页处理。此时,目标进程暂停运行,通过内省模块获得目标进程的相关系统模块、打开的文件、进程ID、进程名称、进程文件路径,以及进程运行状态,包括程序计数器、堆栈指针、栈基指针、各通用寄存器、蜜罐页所对应内存在目标进程中的虚拟地址、当前运行的任务详细情况、程序计数器附近的代码快照和堆栈指针附近的部分快照,将所有内容挂接到对应的蜜罐页中。并在目标进程写入内存之前将获取内存页快照。之后,蜜罐页允许当 前进程在当前CPU的写操作,并返回客户虚拟机中。之后,目标进程才能在该CPU上写入蜜罐。
[0075]步骤4:在捕捉完目标进程后,有进程切换事件发生时,即当前CPU在切换进程上下文时,控制流将陷入虚拟机监视器。此时,蜜罐模块取消所有蜜罐页内存在当前核中的写权限,这样,在进程继续写入蜜罐页时,蜜罐页可以检查在切换进程后访问蜜罐页的是否还是目标进程。
[0076]步骤5:在捕捉完目标进程后,有缺页中断事件发生时,若被置换出的页是蜜罐页,系统将继续保存蜜罐页的当前状态,并在下次被置换进物理内存时更新其物理内存地址。
[0077]步骤6:追踪目标进程状态。在捕捉完进程后,若在其它核中有进程访问蜜罐页,或者在CPU进程切换事件发生后在蜜罐页中发生写入操作,蜜罐页将检查试图写入的进程是否是当前正在监视的进程。若是,则继续步骤4、步骤5和步骤6,即允许单个进程中的多个线程对蜜罐的同步访问;若否,则转入步骤7提交当前进程的监视记录,即保证不同进程在同一时间对单个蜜罐页的互斥访问。
[0078]步骤7:提交目标进程监视记录。在发现非目标进程试图访问蜜罐时,蜜罐页打开内存屏障,保护当前的改动记录,具体过程可以参考图5。蜜罐页启动记录提交过程,生成目标进程对内存的修改位图,更新到蜜罐记录模块的对应位置,同时将目标进程的详细信息和状态挂接到记录模块的对应位置中。若蜜罐模块正在进入停止阶段,则将EPT页表的Write access权限置为1,否则,自动转到步骤3继续运行。
[0079]步骤8:当蜜罐页处于停止阶段是,通过重置步骤将所有已配置的蜜罐页重置为空闲蜜罐。
[0080]图4所示的为蜜罐和记录模块的内部结构。其中,从空闲蜜罐中配置的η个蜜罐页包括蜜罐页a到蜜罐页x,n个蜜罐页即监视η块不同的物理内存页。在处理新的进程访问时,蜜罐页把记录信息提交到记录模块中。提交的方式是先根据HASH表搜索进程A到进程X的记录器,若不存在对应的进程记录器,则从空闲的记录器中分配一个,并保存对应进程的详细信息。获得对应的进程记录器后,蜜罐页继续通过HASH表搜索对应的蜜罐页记录器,若不存在对应的蜜罐页记录器,则从空闲的蜜罐记录器中分配一个。在获得对应的蜜罐页记录器后,蜜罐页将当前的修改位图更新到记录器中,并同时将获得的当前进程状态挂接到蜜罐页记录器中。
[0081]图5所示的为蜜罐运行流程示意图。蜜罐页对写权限的控制主要是为了允许单个进程中的多个线程对蜜罐的同步访问并保证不同进程在同一时间对单个蜜罐页的互斥访问。
[0082]系统通过内存屏障控制各个CPU之间的对同一个蜜罐页的写操作。在打开内存屏障时,蜜罐模块首先进入内存屏障临界区,再通过内存虚拟化模块取消所有CPU在EPT页表上对该内存页的写权限,然后通过IPI中断通知各CPU刷新TLB和页表缓存。打开内存屏障后,若在其它CPU上的进程试图访问相同的页,如图5中的进程B和进程A的线程2,硬件将产生写保护事件,陷入虚拟机监视器中运行,最后,这些进程将在内存屏障临界区外等待,直到进程A的线程I离开临界区位置。临界区通过自旋锁实现,当进程A的线程I获得自旋锁时,其余试图获得相同自旋锁的进程将暂停并等待该自旋锁被释放。
[0083]蜜罐首先使用内存屏障阻止所有试图写入相同内存页的进程,然后完成蜜罐页的初始化,之后离开内存屏障临界区。此后进程A的线程2进入临界区,蜜罐页发现该线程属于目标进程,随即允许其进入蜜罐,保证单个进程中的多个线程对蜜罐的同步访问。然后,进程B进入临界区,蜜罐页发现该进程不是当前监视的目标进程,马上向蜜罐记录模块提交蜜罐内部的记录,然后重新初始化蜜罐,此时蜜罐页的目标进程转为进程B,只有属于进程B的线程允许运行在当前蜜罐中。这保证了不同进程在同一时间对单个蜜罐页的互斥访问。这两个特性即保证了蜜罐记录的效率和精确性。
【权利要求】
1.一种用于收集和截获计算机内存行为的蜜罐机制,其特征在于:包括内存虚拟化模块、蜜罐模块、内省模块、控制模块和蜜罐记录模块; 所述内存虚拟化模块用于控制虚拟机内存操作权限,包括二级地址转换功能、和在地址转换过程中的读写及执行权限的控制,在发生违反读、写或执行权限的事件时,将当前CPU的控制流转到蜜罐模块的事件处理函数中,在函数返回后,恢复CPU的正常运行; 所述蜜罐模块由多个可配置的独立蜜罐个体组成,每个蜜罐个体对应操作系统中的一张内存页,即成为蜜罐页;蜜罐模块以蜜罐页为单位,在系统运行时监视多个核中的各个进程对蜜罐区域的精确修改情况,并由位图表示; 所述内省模块在蜜罐模块收集信息的同时,收集相关的进程详细信息和进程当时完整的运行时状态; 所述控制模块提供外部控制接口,并将控制命令信号转发到蜜罐模块对应的控制接口中,用于设置蜜罐模块监视的内存区域,启动、停止和重置蜜罐功能; 所述蜜罐记录模块收集蜜罐模块和内省模块提交的数据,记录每个进入蜜罐进程的完整行为。
2.根据权利要求1所述的一种用于收集和截获计算机内存行为的蜜罐机制,其特征在于:所述蜜罐记录模块由进程记录器组成,所述进程记录器由一个或多个蜜罐记录器组成,每个蜜罐记录器对应一个正在运行的蜜罐页;一个进程记录器中,蜜罐模块中的蜜罐页至多只对应一个蜜罐记录器;不同的进程记录器中,对应相同蜜罐页的蜜罐记录器互相独立记录信息,且各记录器仅在有记录内容时占用内存。
3.一种用于收集和截获计算机内存行为的蜜罐方法,其特征在于:具体步骤如下: (1)配置阶段,通过控制模块配置蜜罐模块监视的内存区域、即蜜罐区域; (2)启动阶段,控制模块接收到外部的启动命令后,将启动命令转发到蜜罐模块对应的控制接口中,蜜罐模块使用内存虚拟化模块关闭蜜罐区域的写权限,并捕捉任何试图写入蜜罐区域的进程行为; (3)运行阶段,蜜罐模块通过内存虚拟化模块持续控制试图写入蜜罐区域的进程对蜜罐的访问,并收集进程对蜜罐区域中内存的修改情况;内省模块收集相关的进程详细信息和进程进入蜜罐时的运行状态;蜜罐记录模块收集并整理蜜罐模块和内省模块不断提交的数据。 (4)停止阶段,控制模块收到外部的停止命令后,将停止命令转发到蜜罐模块对应的控制接口中,蜜罐模块向蜜罐记录模块提交所有数据,并打开蜜罐区域的写权限允许所有读写操作,获取蜜罐记录模块中记录的数据; (5)重置阶段,控制模块收到外部的重置命令后,将重置命令转发到蜜罐模块对应的控制接口中,蜜罐模块清除已配置的蜜罐,记录蜜罐模块清空所有数据; (6)当重置完成后,返回步骤(1),等待重新配置蜜罐模块监视的内存区域。
4.根据权利要求3所述的一种用于收集和截获计算机内存行为的蜜罐方法,其特征在于:所述蜜罐模块的具体运行步骤如下: (1)配置阶段,蜜罐模块获取空闲的蜜罐个体、并将空闲的蜜罐个体对应到目标内存页上,即成为蜜罐页; (2)运行阶段,利用蜜罐页的蜜罐个体监视目标内存页上的进程读写情况,同时通过内省模块获取操作系统中相关进程的详细信息,不断提交到蜜罐记录模块中;所述蜜罐页的具体运行步骤如下: a、初始化,打开内存屏障; b、捕捉目标进程,当有进程第一次访问蜜罐页对应的内存时,触发硬件保护事件,控制流陷入虚拟机监视器,目标进程暂停运行,蜜罐页截获写事件,通过内省模块获得目标进程详细信息和进程运行状态,将内省模块获得的目标进程详细信息和进程运行状态挂接到蜜罐页中;并在目标进程写入内存之前获取内存页快照,为目标进程生成内存修改位图做准备;之后,蜜罐页允许目标进程在当前CPU的写操作,并返回虚拟机中;之后,目标进程在当前CPU上写入蜜罐; C、进程切换事件处理,当前CPU在切换进程上下文时,将陷入虚拟机监视器;此时,蜜罐模块将取消所有蜜罐页内存在当前核中的写权限,这样,在进程继续写入蜜罐页时,蜜罐页可以检查在切换进程后访问蜜罐页的是否还是目标进程,如果是,则进入步骤d,如果否,则进入步骤f ; d、缺页事件处理,有缺页中断事件发生时,若系统发现被置换出的页属于蜜罐页,系统将继续保存蜜罐页的当前状态,并在下次被置换进物理内存时更新其物理内存地址; e、跟踪目标进程,在捕捉完进程后,若在其它核中有进程访问蜜罐页,或者在CPU进程切换事件发生后在蜜罐页中发生写入操作,蜜罐页将检查试图写入的进程是否是当前正在监视的进程,若是 ,则继续步骤C、步骤d和步骤e,允许单个进程中的多个线程对蜜罐的同步访问;若否,则打开内存屏障保护当前的改动记录,并转入步骤f提交目标进程的监视记录,保证不同进程在同一时间对单个蜜罐页的互斥访问; f、提交目标进程监视记录,蜜罐页启动提交过程,将当前的内存页内容和步骤b中快照内存页内容逐BYTE进行对比,生成一个为当前内存页1/8大小的修改情况位图,更新到蜜罐记录模块的对应位置,同时将目标进程的详细信息和捕捉到的目标进程的状态挂接到蜜罐记录模块的对应位置中;之后转到步骤a,为新的进程初始化蜜罐页;若蜜罐模块正在进入停止阶段,则打开所有写权限。 (3)停止阶段,蜜罐模块控制所有蜜罐页完成最后一次提交,并停止蜜罐的运行。
5.根据权利要求4所述的一种用于收集和截获计算机内存行为的蜜罐方法,其特征在于:所述步骤2)中步骤a和步骤e中所述的打开内存屏障的具体步骤如下: (1)控制流进入内存屏障对应的临界区; (2)内存虚拟化模块取消客户虚拟机在所有CPU上对目标内存页的写权限; (3)使用中断告知所有CPU页表权限已改动,各CPU收到中断后,第一时间刷新TLB和页表结构缓存,并返回是否成功,若是则进入步骤(4),若否则返回步骤(2); (4)当所有CPU都返回已成功刷新缓存,即成功打开内存屏障。
6.根据权利要求5所述的一种用于收集和截获计算机内存行为的蜜罐方法,其特征在于:所述内存屏障在满足以下条件时:a、控制流离开内存屏障对应的临界区;b、所有CPU上对目标内存页的写权限被等待的CPU打开;内存屏障自动关闭。
7.根据权利要求4所述的一种用于收集和截获计算机内存行为的蜜罐方法,其特征在于:所述权利要求3中步骤I)配置阶段,通过控制模块配置蜜罐模块监视的内存区域、即蜜罐区域;具体步骤如下:(I)控制模块告知蜜罐模块要求配置的内存页,蜜罐模块在内存中分配空闲蜜罐个体,具体配置过程可通过步骤a、b或c进行: a、控制模块告知蜜罐模块目标内存页的物理地址,蜜罐模块首先检查目标内存页的物理地址是否已配置蜜罐页,若否,则空闲蜜罐个体根据该物理地址初始化配置成蜜罐页,并返回步骤(1)继续等待配置; b、控制模块告知蜜罐模块目标内存页的虚拟地址,蜜罐模块根据客户虚拟机当前进程的页表结构基地址(CR3)和当前虚拟地址,通过查询物理内存中的页表获得对应的物理地址,蜜罐模块首先检查所述物理地址是否已配置蜜罐页,若否,则空闲蜜罐个体根据所述物理地址初始化配置成蜜罐页,并返回步骤(1)继续等待配置; C、控制模块告知蜜罐模块目标内存页的虚拟地址和对应CR3的值,蜜罐模块通过查询操作系统中的页表获得物理地址,蜜罐模块首先检查所述物理地址是否已配置蜜罐页,若否,则空闲蜜罐个体根据所述物理地址初始化配置成蜜罐页,并返回步骤(1)继续等待配置。
8.根据权利要求4所述的一种用于收集和截获计算机内存行为的蜜罐方法,其特征在于:所述权利要求3中步骤3)运行阶段中,当进程出现写保护事件时,蜜罐模块首先通过内存虚拟化模块获得发生写保护事件的物理地址,蜜罐模块根据物理地址查询HASH表找到唯一对应的蜜罐页,并将写保护事件转发到对应蜜罐页中,自行控制蜜罐页运行。
9.根据权利要求4所述一种用于收集和截获计算机内存行为的蜜罐方法,其特征在于:所述步骤f中蜜罐记录模块的对应位置的具体寻找步骤如下: (1)蜜罐页根据当前的目标进程,使用HASH表迅速寻找对应的进程记录器,若存在,进入步骤(3);若不存在,则进入步骤(2); (2)蜜罐记录模块分配一个空闲的进程记录器,并根据蜜罐页的进程详细信息初始化所述进程记录器,使得在下一次进入步骤(1)时,通过HASH表能够找到所述进程记录器; (3)蜜罐页根据其配置的目标内存页,使用HASH表迅速寻找对应的蜜罐记录器,若存在,则所述蜜罐记录器即为蜜罐记录模块的对应位置,若不存在,则进入步骤(4); (4)蜜罐记录模块分配一个空闲的蜜罐记录器,并根据蜜罐页的目标内存页配置信息初始化所述蜜罐记录器,使得在下一次进入步骤(3)时,通过HASH表能够找到所述蜜罐记录器;所述蜜罐记录器即为蜜罐记录模块的对应位置。
【文档编号】G06F21/56GK104021344SQ201410203373
【公开日】2014年9月3日 申请日期:2014年5月14日 优先权日:2014年5月14日
【发明者】伏晓, 程盈心, 骆斌, 杨瑞, 阮豪 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1