CN117725583A - 基于虚拟机自省的Linux恶意代码检测方法与系统 - Google Patents
基于虚拟机自省的Linux恶意代码检测方法与系统 Download PDFInfo
- Publication number
- CN117725583A CN117725583A CN202311759593.5A CN202311759593A CN117725583A CN 117725583 A CN117725583 A CN 117725583A CN 202311759593 A CN202311759593 A CN 202311759593A CN 117725583 A CN117725583 A CN 117725583A
- Authority
- CN
- China
- Prior art keywords
- virtual machine
- malicious code
- kernel
- malicious
- monitoring
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 47
- 230000015654 memory Effects 0.000 claims abstract description 99
- 238000000034 method Methods 0.000 claims abstract description 94
- 230000006399 behavior Effects 0.000 claims abstract description 93
- 238000012544 monitoring process Methods 0.000 claims abstract description 84
- 230000006870 function Effects 0.000 claims abstract description 80
- 230000008569 process Effects 0.000 claims abstract description 74
- 101710092886 Integrator complex subunit 3 Proteins 0.000 claims description 9
- 102100025254 Neurogenic locus notch homolog protein 4 Human genes 0.000 claims description 9
- 230000003993 interaction Effects 0.000 claims description 9
- 238000002347 injection Methods 0.000 claims description 8
- 239000007924 injection Substances 0.000 claims description 8
- 238000002955 isolation Methods 0.000 claims description 6
- 230000008447 perception Effects 0.000 claims description 6
- 238000013519 translation Methods 0.000 claims description 6
- 230000008859 change Effects 0.000 claims description 4
- 230000004048 modification Effects 0.000 claims description 4
- 238000012986 modification Methods 0.000 claims description 4
- 238000012545 processing Methods 0.000 claims description 4
- 238000012216 screening Methods 0.000 claims description 3
- 238000011895 specific detection Methods 0.000 claims description 3
- 230000001960 triggered effect Effects 0.000 claims description 3
- 230000009471 action Effects 0.000 claims description 2
- 238000012546 transfer Methods 0.000 claims description 2
- 244000035744 Hura crepitans Species 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 239000000523 sample Substances 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公布了一种基于虚拟机自省的Linux恶意代码检测方法与系统,包括虚拟机管理层子系统、监控虚拟机子系统、恶意代码执行虚拟机子系统;通过内联钩子和内存隐藏技术拦截并分析恶意代码进程调用的内核函数行为,通过扩展页表钩子技术拦截并分析恶意代码对关键的内核内存的敏感读写行为,从而获取恶意代码执行的具体流程和敏感内存操作信息。本发明实现恶意代码无感知且正常运行情况下,在操作系统外层的虚拟机管理层监控恶意代码执行流程,不需要在操作系统内部运行单独的监控进程,使得恶意代码难以检测和对抗监控系统,有效减少监控系统的攻击,提高监控透明性,并可对复杂的Linux内核Rootkit等恶意代码进行准确检测。
Description
技术领域
本发明涉及计算机安全技术领域,尤其涉及一种基于虚拟机自省的Linux恶意代码检测方法与系统。
背景技术
近年来,恶意软件的种类和数量都急剧增加。以APT(高级长期威胁,AdvancedPersistent Threat)攻击为代表的复杂恶意代码攻击对网络安全及传统检测防御方案造成了严重挑战。目前,Linux系统下检测恶意代码最通用的方案是沙箱技术,即通过沙箱技术构造一个隔离的威胁检测环境,然后将恶意样本在沙箱中进行隔离分析并最终确定是否暴露出了恶意行为。
然而在目前这种传统的检测方案中,负责监控的安全软件通常和恶意软件处于同一特权级别,一般都在操作系统内核层面,通过hook Linux系统调用或者利用Linux系统提供的探针等特殊机制来进行检测。但这种检测方案天然地具有一定的缺陷。一方面,由于安全软件与恶意代码处于同一层级,安全软件不可避免地暴露了较大的攻击面,安全软件很容易成为恶意代码的攻击目标,恶意代码可以直接跟安全软件进行对抗,一旦恶意代码找到安全软件的漏洞,则会利用该漏洞使其失效,甚至直接获得系统的最高权限,以便进一步从事非法活动。另一方面,传统的检测方案很难检查Linux内核模块是否为恶意软件,如很难检测内核Rootkit。而如今我们面临的安全威胁正变得越来越复杂,Rootkit等高复杂性恶意软件对传统的恶意代码检测方案构成了特别严重的挑战。
发明内容
为了克服上述现有技术的不足,本发明提供一种基于虚拟机自省的Linux恶意代码检测系统,可以在恶意代码无感知并且正常运行的情况下,在操作系统外层的虚拟机管理层面监控恶意代码执行流程,并且不需要在操作系统内部运行单独的监控进程,使得恶意代码难以检测和对抗监控系统,有效地减少了监控系统的攻击面,提高了监控的透明性,并能够对复杂的Linux内核Rootkit等恶意代码进行准确检测。
本发明提供的技术方案是:
一种基于虚拟机自省的Linux恶意代码检测方法,通过内联钩子(inline hook,内联钩子是一种在程序运行时修改函数执行流程的技术)结合内存隐藏的技术拦截并分析恶意代码进程调用的内核函数行为,通过虚拟机管理层面的扩展页表钩子(Extended PageTable hook)技术拦截并分析恶意代码对关键的内核内存的敏感读写行为,从而准确透明地获取恶意代码执行的具体流程和敏感内存操作信息。主要包括:确定检测规则阶段、恶意代码透明注入阶段、拦截恶意代码函数调用阶段、拦截恶意代码内存读写阶段、行为分析和判定阶段。本发明中各个阶段对于恶意代码都是透明无感知的,提高了检测系统的准确性、安全性、透明性。
其中:
确定检测规则阶段执行如下步骤:
步骤1,分析并总结出恶意代码可能暴露的恶意行为信息,包括但不限于恶意代码对Linux系统的内核函数的调用和对敏感内存读写行为(恶意代码行为);
步骤2,根据要检测的恶意代码行为信息形式化为具体的检测规则,检测规则包含但不限于:执行敏感系统调用对应的内核函数,对敏感内核内存进行读取、对敏感内核内存进行修改;
恶意代码透明注入阶段执行如下步骤:
步骤3,在恶意代码执行虚拟机的外层(操作系统的底层),将恶意代码的程序字节写入到执行虚拟机运行的Linux系统内核中,并模拟Linux创建线程过程启动恶意代码进程,从而透明无感知地将恶意代码注入到执行虚拟机中;
拦截恶意代码函数调用阶段执行如下步骤:
步骤4,在对应内核函数位置处通过内联hook技术埋下拦截点,同时结合内存隐藏技术将内联hook修改的内存数据进行隐藏,在进程触发拦截点时无感知地记录下来;
拦截恶意代码内存读写阶段执行如下步骤:
步骤5,使用EPT(扩展页表)hook技术,在对应的内存页面设置内存读拦截或者内存写拦截,在进程读写敏感内存时无感知地记录下来;
行为分析和判定阶段执行如下步骤:
步骤6,恶意代码进程在执行过程中,识别筛选恶意代码及其子进程相关的函数调用行为和内存读写行为,并进行记录和拦截,放行不在监控范围内的进程;
步骤7,根据步骤6拦截到的函数调用行为,解析函数调用参数、结构体、返回值等信息。根据步骤6拦截到的内存读写行为,解析内存段属性、内存读写内容等信息;
步骤8,将步骤7解析出的信息与步骤2形式化的检测规则进行比对,判定恶意代码行为是否与已知的恶意行为相匹配;
步骤9,将判定结果进行输出。
上述基于虚拟机自省的Linux恶意代码检测方法能够实现恶意代码进程函数调用行为、敏感内存操作行为的无感知透明监测,高效捕获得到恶意代码进程函数调用行为和敏感内存操作行为。
恶意代码可以遍历当前系统进程列表寻找可疑进程,从而检测自身是否运行在被监控环境中。本发明方法无需任何代理进程便可透明地注入并运行恶意代码进程,使得恶意代码无法通过系统运行状态对监控环境进行检测。
恶意代码可以读取Linux关键系统函数,通过判断系统函数指令是否被修改从而检测自身是否运行在被监控环境中。本发明方法通过内存隐藏技术将修改的指令内存进行隐藏,恶意代码无法读取到正确的内存信息,使得恶意代码无法通过内存特征对监控环境进行检测。
以内核Rootkit为代表的高复杂性恶意代码可以通过修改Linux内核关键代码和数据结构实现自我隐藏和对抗监控环境。本发明方法通过EPT扩展页表层面的拦截,直接作用于物理内存,恶意代码无法隐藏自己的恶意操作,实现了恶意代码检测的准确性和直观性。
利用上述虚拟机自省的Linux恶意代码检测方法,本发明实现了相应的虚拟机自省的Linux恶意代码检测系统,包括虚拟机管理层子系统、监控虚拟机子系统、恶意代码执行虚拟机子系统。
虚拟机管理层子系统位于监控虚拟机子系统和恶意代码执行虚拟机子系统的下层,能够管理和控制监控虚拟机和恶意代码执行虚拟机,包括监控虚拟机交互模块和恶意代码执行虚拟机交互模块,恶意代码执行虚拟机交互模块可以获取上层恶意代码执行虚拟机系统数据,监控虚拟机交互模块可以将恶意代码执行虚拟机中产生的各种事件转发给监控虚拟机系统,使得位于上层的监控虚拟机能够获取恶意代码执行虚拟机的各种行为数据,从而进行具体监控和检测;
监控虚拟机子系统位于虚拟机管理层子系统上层,与恶意代码执行虚拟机子系统处于同一层级,负责监控和检测恶意代码执行虚拟机子系统中运行的恶意代码,包括恶意代码透明注入模块、恶意代码进程追踪模块、函数执行透明监测模块、内存读写透明监测模块、行为解析模块、行为判定模块。监控虚拟机子系统可以通过虚拟机管理层子系统对恶意代码执行虚拟机中运行的恶意代码实现全面监控和检测。
恶意代码执行虚拟机子系统位于虚拟机管理层子系统上层,与监控虚拟机子系统同一层级,负责执行恶意代码进程。此子系统不包含任何模块,保证了子系统自身的透明性。由于恶意代码执行虚拟机子系统和监控虚拟机子系统独立属于不同的虚拟机系统,具有天然的隔离性,这种独有的架构能够隐藏负责监控的子系统的存在,使得恶意代码无法感知到自身正在被监控,能够更准确全面地获取恶意代码正常执行过程的行为信息。
与现有技术相比,本发明的有益效果是:
本发明提供一种基于虚拟机自省的Linux恶意代码检测方案及系统,通过在恶意代码执行的虚拟机外部对上层Linux系统内核函数和内存读写设置拦截点,获取并分析恶意代码的行为,监控虚拟机和恶意代码执行虚拟机处于不同机器中,此架构有效减小了监控系统暴露给恶意代码的攻击面,使得恶意代码无法察觉自身执行的虚拟环境,无法进行伪装和对抗,提高了检测系统的安全性、透明性和无感知性。本发明直接对上层Linux系统虚拟内存对应的物理内存进行拦截,使得恶意代码无法隐藏自身的恶意修改操作,能够有效检测以内核Rootkit为代表的高复杂性恶意样本,提高了检测系统的检测能力和准确性。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于虚拟机自省的Linux恶意代码检测系统的结构框图。
图2为本发明基于虚拟机自省的Linux恶意代码检测方法的流程框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
参照图1,图1是本发明实施例提供的基于虚拟机自省的Linux恶意代码检测系统的结构框图。该基于虚拟机自省的Linux恶意代码检测系统包括如下子系统:
子系统一、虚拟机管理层系统;
子系统二、监控虚拟机系统;
子系统三、恶意代码执行虚拟机系统。
子系统一位于子系统二和子系统三的下层,能够管理和控制子系统二和子系统三,包括如下模块:
模块一、监控虚拟机交互模块,负责将子系统三恶意代码执行虚拟机中产生的各种事件转发给子系统二监控虚拟机系统,使得位于上层的子系统二能够获取子系统三的各种行为数据,从而进行具体监控和检测;
模块二、恶意代码执行虚拟机交互模块,负责控制子系统三恶意代码执行虚拟机系统的开机、关机、恢复快照,并获取上层恶意代码执行虚拟机系统数据;
模块二和模块三共同组成了子系统一的控制模块。
子系统二位于子系统一上层,与子系统三处于同一层级,负责监控和检测子系统三中运行的恶意代码,包括如下模块:
模块三、恶意代码透明注入模块,将恶意代码程序透明无感知地注入到子系统三中Linux操作系统中,子系统三中Linux系统无需运行任何代理程序;
模块四、恶意代码进程追踪模块,将恶意代码通过exec、fork等方式创建的子进程、子线程都纳入到跟踪范围中,保证信息获取的全面性;
模块五、函数执行透明监测模块,通过内联hook结合内存隐藏的技术对子系统三中Linux系统内核函数进行拦截,并实时获取子系统三中拦截的函数执行情况;
模块六、内存读写透明监测模块,通过EPT扩展页表技术对子系统三中Linux系统敏感内存读写行为进行拦截,并实时获取子系统三中进程内存读写情况。
模块七、行为解析模块,对从模块五函数执行透明监测模块获取到的函数执行信息进行解析,并解析出函数调用参数、结构体等原型信息,对从模块六内存读写透明监测模块获取到的信息进行解析,并解析出读写内存地址、内存属性等信息。
模块八、行为判定模块,对从模块七中解析的信息依据检测规则判定进程行为是否合法。
子系统三位于子系统一上层,与子系统二处于同一层级,负责执行恶意代码进程。子系统三不包含任何模块,与子系统二独立属于不同的虚拟机系统,互相隔离。
参照图2,图2为本发明基于虚拟机自省的Linux恶意代码检测方法的流程框图。具体实施包括五个阶段。具体是:
阶段一:确定检测规则阶段;
阶段二:恶意代码透明注入阶段;
阶段三:拦截恶意代码函数调用阶段;
阶段四:拦截恶意代码内存读写阶段;
阶段五:行为分析和判定阶段;
其中阶段一包括如下步骤:
步骤1,分析并总结出恶意代码可能暴露的恶意行为信息;
进一步地,相关恶意信息包括但不限于:
执行敏感内核函数行为,所属进程执行了sys_connect、do_sys_open、do_sys_write等可疑的内核函数;
修改内核代码行为,所属进程通过inline hook方式修改Linux内核可执行段的关键内核函数指令字节进行控制流转移的行为;
修改内核数据行为,所述进程通过修改Linux内核数据段的sys_call_table系统调用表进行系统调用拦截的行为;
修改关键寄存器行为,所属进程通过修改MSR寄存器改变系统调用例程地址拦截系统调用的行为,所属进程通过修改IDTR、GDTR寄存器改变指向段描述符地址拦截系统调用的行为,所属进程通过修改CR寄存器改变页表翻译过程隐藏自身的行为。
步骤2,根据要检测的恶意代码行为信息形式化为具体的检测规则;
进一步地,检测规则包含但不限于:
恶意代码执行sys_connect等网络建立连接相关内核函数,并且函数参数是可疑地址时,触发规则,从而检测恶意代码可疑网络行为;
恶意代码执行do_sys_write等文件相关的内核函数,并且函数参数是敏感文件时,触发规则,从而检测恶意代码可疑文件读写行为;
恶意代码修改了Linux内核代码段,并且被篡改代码段对应了关键内核函数的地址,触发规则,从而检测Rootkit等内核恶意代码劫持内核函数的行为;
恶意代码修改了Linux内核数据段,并且被篡改数据段对应了系统调用表的地址,触发规则,从而检测Rootkit等内核恶意代码劫持Linux系统调用的行为;
恶意代码修改了MSR寄存器,触发规则,从而检测Rootkit等内核恶意代码劫持系统调用的行为;
恶意代码修改了CR寄存器,触发规则,从而检测Rootkit等内核恶意代码篡改页表翻译过程隐藏自身的行为。
其中阶段二包括如下步骤:
步骤3,将恶意代码透明无感知地注入到执行虚拟机中;
具体的,透明注入详细实现方案为:
监控虚拟机定位恶意代码执行虚拟机的Linux内核系统调用处理例程地址,在此地址处写入INT3指令(INT3指令是专门用来支持调试的一条指令,对应机器码0xCC),并在监控虚拟机中开启INT3指令事件回调;
进一步地,监控虚拟机在恶意代码执行虚拟机内部的Linux系统中分配一段内核空间,将注入代理程序的程序字节写入到分配的空间中;
进一步地,当恶意代码执行虚拟机内部的Linux系统执行任意系统调用时,会执行到INT3指令,此时INT3指令事件被虚拟机管理程序捕获,产生虚拟机退出事件,控制流转移到监控虚拟机中;
进一步地,监控虚拟机执行注入的代理程序,代理程序将真正要注入的恶意代码字节写入到恶意代码执行虚拟机内部的Linux系统内核空间中,依次调用call_usermodehelper_setup、call_usermodehelper_exec内核函数从操作系统内核态创建一个用户线程,即恶意代码进程对应的内核线程。
其中第三阶段包括如下步骤:
步骤4,在对应内核函数位置处通过内联hook技术埋下拦截点,同时结合内存隐藏技术将内联hook修改的内存数据进行隐藏,在进程触发拦截点时无感知地记录下来。
具体的,详细的实现方案为:
根据步骤2中的内核函数名称,查找恶意代码执行虚拟机中Linux系统内核符号表,确定内核函数地址;
进一步地,解析内核函数指令信息,在合适的指令位置处修改内核函数指令为跳转指令,跳转目标为预先设置的蹦床指令序列,蹦床指令序列中包含vmcall指令,当恶意代码执行虚拟机中Linux系统执行到拦截点时,会触发vmcall指令,产生虚拟机退出事件,从而控制流通过虚拟机管理层转移到监控虚拟机中。此过程如有指令涉及到内存寻址则需要进行重定位操作;
进一步地,监控虚拟机记录修改的指令位置地址,在此地址处设置EPT扩展页表读拦截,当恶意代码执行虚拟机中有进程读取此地址内存信息时,返回原有的修改前的内存数据,从而实现了内存隐藏,使得恶意代码无法感知到自己处于修改的监控系统中。
其中第四阶段包括如下步骤:
步骤5,使用EPT扩展页表技术在恶意代码执行虚拟机中对应的内存页面设置内存读拦截或者内存写拦截,在进程读写敏感内存时无感知地记录下来。
具体的,详细实现方案为:
根据步骤2中的敏感内存区域,如Linux内核代码段,首先根据恶意代码执行虚拟机中Linux内核加载地址和内核符号表定位内核代码段起始虚拟地址和结束虚拟地址,并通过页表翻译获取虚拟地址对应的物理地址。
进一步地,获取物理地址页对应的EPT Entry,若当前EPT Entry支持子页面权限,则后续操作力度为更细粒度的子页面;
进一步地,若设置内存读拦截,则将EPT页表的读标志位设为无效;若设置内存写拦截,则将EPT页表的写标志位设为无效。这样当恶意代码执行虚拟机进行访存时,由于页面标志无效从而触发EPT Violation,产生虚拟机退出事件,控制流通过虚拟机管理层转移到监控虚拟机中;
进一步地,监控虚拟机处理EPT Violation事件,解析恶意代码执行虚拟机中访存信息并记录。
其中第五阶段包括如下步骤:
步骤6,恶意代码进程在执行过程中,识别筛选恶意代码及其子进程相关的函数调用行为和内存读写行为,并进行记录和拦截。
进一步地,具体实现方案为:首先获取恶意代码起始进程标识符PID,放入监控链表中,若恶意代码有执行exec、fork等创建和复制子进程的行为,则解析子进程数据结构获取进程PID等信息,并将子进程也加入监控链表中,最后将所有被监控进程执行信息记录下来。
步骤7,根据步骤6拦截到的函数调用行为,解析函数调用参数、结构体、返回值等信息。根据步骤6拦截到的内存读写行为,解析内存段属性、内存读写内容等信息;
进一步地,需要解析的数据包括但不限于:
被调用函数名称;
被调用函数进程名称;
被调用函数进程命令行;
被调用函数书参数、返回值;
敏感内存读取或者修改的地址;
敏感内存读取或者修改的地址所对应的符号;
对敏感内存读取或者修改的进程信息;
对敏感内存读取或者修改的函数调用栈;
步骤8,将步骤7解析出的信息与步骤2形式化的检测规则进行比对,判定恶意代码行为是否与已知的恶意行为相匹配;
步骤9,将判定结果进行输出。
通过上述五个阶段的操作,实现基于虚拟机自省的Linux恶意代码检测。
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
Claims (7)
1.一种基于虚拟机自省的Linux恶意代码检测方法,其特征是,通过内联钩子技术和内存隐藏技术拦截并分析恶意代码进程调用的内核函数行为,通过虚拟机管理层面的扩展页表钩子技术拦截并分析恶意代码对关键的内核内存的敏感读写行为,从而准确透明地获取恶意代码执行的具体流程和敏感内存操作信息;主要包括:确定检测规则阶段、恶意代码透明注入阶段、拦截恶意代码函数调用阶段、拦截恶意代码内存读写阶段、行为分析和判定阶段;其中:
确定检测规则阶段执行如下步骤:
步骤1,获取恶意代码暴露的恶意行为信息,包括恶意代码对Linux系统的内核函数的调用和对敏感内存读写行为;
步骤2,将待检测的恶意代码行为形式化为具体的检测规则,检测规则包含:执行敏感系统调用对应的内核函数,对敏感内核内存进行读取、对敏感内核内存进行修改;
恶意代码透明注入阶段执行如下步骤:
步骤3,在恶意代码执行虚拟机的外层即操作系统的底层,将恶意代码程序的字节写入到执行虚拟机运行的Linux系统内核中,并模拟Linux创建线程过程启动恶意代码进程,从而透明无感知地将恶意代码注入到执行虚拟机中;包括:
31)通过监控虚拟机定位恶意代码执行虚拟机的Linux内核系统调用处理例程地址,在处理例程地址处写入INT3指令,并在监控虚拟机中开启INT3事件回调;
32)通过监控虚拟机在恶意代码执行虚拟机内部的Linux系统中分配一段内核空间,将注入代理程序的程序字节写入到分配的空间中;
33)当恶意代码执行虚拟机内部的Linux系统执行任意系统调用,执行到INT3指令时,通过虚拟机管理程序捕获INT3事件,产生虚拟机退出事件,控制流转移到监控虚拟机中;
34)通过监控虚拟机将真正要注入的恶意代码字节写入到恶意代码执行虚拟机内部的Linux系统内核空间中,调用操作系统内核函数从系统内核态创建一个用户线程,即恶意代码进程对应的内核线程;
拦截恶意代码函数调用阶段执行如下步骤:
步骤4,在对应内核函数位置处通过内联hook技术埋下拦截点,同时通过内存隐藏技术将内联hook修改的内存数据进行隐藏,在进程触发拦截点时无感知地进行记录;包括:
41)根据内核函数名称查找恶意代码执行虚拟机中Linux系统内核符号表,确定内核函数地址;
42)解析内核函数指令信息,在指令位置处修改内核函数指令为跳转指令,跳转目标为预先设置的蹦床指令序列;当恶意代码执行虚拟机中Linux系统执行到拦截点时,触发蹦床指令序列中的vmcall指令,产生虚拟机退出事件,从而控制流通过虚拟机管理层转移到监控虚拟机中;此过程当有指令涉及到内存寻址时,则进行重定位操作;
43)通过监控虚拟机记录修改的指令位置地址,在该地址处设置扩展页表读拦截,当恶意代码执行虚拟机中有进程读取此地址内存信息时,返回原有的修改前的内存数据,从而实现内存隐藏,使得恶意代码无法感知到自己处于修改的监控系统中;
拦截恶意代码内存读写阶段执行如下步骤:
步骤5,使用扩展页表hook技术,在对应的内存页面设置内存读拦截或者内存写拦截,使得在进程读写敏感内存时无感知地记录下来;包括:
51)根据敏感内存区域,首先根据恶意代码执行虚拟机中Linux内核加载地址和内核符号表定位内核代码段起始虚拟地址和结束虚拟地址,并通过页表翻译获取虚拟地址对应的物理地址;
52)获取物理地址页对应的EPT Entry;当当前EPT Entry支持子页面权限时,后续操作力度为更细粒度的子页面;
53)当设置内存读拦截时,将EPT页表的读标志位设为无效;当设置内存写拦截时,将EPT页表的写标志位设为无效;由此当恶意代码执行虚拟机进行访存时,页面标志无效,触发EPT Violation,产生虚拟机退出事件,控制流通过虚拟机管理层转移到监控虚拟机中;
54)通过监控虚拟机处理EPT Violation事件,解析恶意代码执行虚拟机中访存信息并记录;
行为分析和判定阶段执行如下步骤:
步骤6,恶意代码进程在执行过程中,识别筛选恶意代码及其子进程相关的函数调用行为和内存读写行为,并进行记录和拦截,放行不在监控范围内的进程;
步骤7,根据步骤6拦截到的函数调用行为,解析函数调用信息;根据步骤6拦截到的内存读写行为,解析内存段属性、内存读写内容信息;
步骤8,将步骤7解析出的信息与步骤2形式化的检测规则进行比对,判定恶意代码行为是否与已知的恶意行为相匹配;
步骤9,将判定结果进行输出;
通过上述步骤即可实现基于虚拟机自省的Linux恶意代码检测。
2.如权利要求1所述基于虚拟机自省的Linux恶意代码检测方法,其特征是,步骤34)中,调用内核函数具体是依次调用call_usermodehelper_setup、call_usermodehelper_exec内核函数。
3.如权利要求1所述基于虚拟机自省的Linux恶意代码检测方法,其特征是,步骤1中,恶意信息包括:执行敏感内核函数行为、修改内核代码行为、修改内核数据行为和修改关键寄存器行为;其中:
执行敏感内核函数行为指所属进程执行sys_connect、do_sys_open、do_sys_write可疑的内核函数;
修改内核代码行为指所属进程通过inline hook方式修改Linux内核可执行段的关键内核函数指令字节进行控制流转移的行为;
修改内核数据行为指所述进程通过修改Linux内核数据段的sys_call_table系统调用表进行系统调用拦截的行为;
修改关键寄存器行为指所属进程通过修改MSR寄存器改变系统调用例程地址拦截系统调用的行为,所属进程通过修改IDTR、GDTR寄存器改变指向段描述符地址拦截系统调用的行为,所属进程通过修改CR寄存器改变页表翻译过程隐藏自身的行为。
4.如权利要求1所述基于虚拟机自省的Linux恶意代码检测方法,其特征是,步骤2中,检测规则包含:
恶意代码执行网络建立连接相关内核函数,并且函数参数是可疑地址时,触发规则,从而检测恶意代码可疑网络行为;
恶意代码执行文件相关的内核函数,并且函数参数是敏感文件时,触发规则,从而检测恶意代码可疑文件读写行为;
恶意代码修改Linux内核代码段,并且被篡改代码段对应关键内核函数的地址,触发规则,从而检测Rootkit内核恶意代码劫持内核函数的行为;
恶意代码修改Linux内核数据段,并且被篡改数据段对应系统调用表的地址,触发规则,从而检测Rootkit内核恶意代码劫持Linux系统调用的行为;
恶意代码修改MSR寄存器,触发规则,从而检测Rootkit内核恶意代码劫持系统调用的行为;
恶意代码修改CR寄存器,触发规则,从而检测Rootkit内核恶意代码篡改页表翻译过程隐藏自身的行为。
5.如权利要求1所述基于虚拟机自省的Linux恶意代码检测方法,其特征是,步骤6的具体实现方法包括:
首先获取恶意代码起始进程PID,放入监控链表中;
当恶意代码有执行创建和复制子进程的行为时,解析子进程数据结构,获取进程信息,并将子进程也加入监控链表中;
再将所有被监控进程执行信息记录下来。
6.如权利要求1所述基于虚拟机自省的Linux恶意代码检测方法,其特征是,步骤7中,待解析的数据包括:被调用函数名称;被调用函数进程名称;被调用函数进程命令行;被调用函数书参数、返回值;敏感内存读取或者修改的地址;敏感内存读取或者修改的地址所对应的符号;对敏感内存读取或者修改的进程信息;对敏感内存读取或者修改的函数调用栈。
7.一种采用权利要求1所述基于虚拟机自省的Linux恶意代码检测方法实现的系统,其特征是,包括虚拟机管理层子系统、监控虚拟机子系统、恶意代码执行虚拟机子系统;其中:
虚拟机管理层子系统位于监控虚拟机子系统和恶意代码执行虚拟机子系统的下层,用于管理和控制监控虚拟机和恶意代码执行虚拟机,包括监控虚拟机交互模块和恶意代码执行虚拟机交互模块;其中,恶意代码执行虚拟机交互模块用于获取上层恶意代码执行虚拟机系统数据;监控虚拟机交互模块用于将恶意代码执行虚拟机中产生的各种事件转发给监控虚拟机系统,使得位于上层的监控虚拟机能够获取恶意代码执行虚拟机的各种行为数据,从而进行具体监控和检测;
监控虚拟机子系统位于虚拟机管理层子系统上层,与恶意代码执行虚拟机子系统处于同一层级,用于监控和检测恶意代码执行虚拟机子系统中运行的恶意代码,包括恶意代码透明注入模块、恶意代码进程追踪模块、函数执行透明监测模块、内存读写透明监测模块、行为解析模块、行为判定模块;监控虚拟机子系统通过虚拟机管理层子系统对恶意代码执行虚拟机中运行的恶意代码实现全面监控和检测;
恶意代码执行虚拟机子系统位于虚拟机管理层子系统上层,与监控虚拟机子系统同一层级,用于执行恶意代码进程;此子系统不包含任何模块;恶意代码执行虚拟机子系统和监控虚拟机子系统独立属于不同的虚拟机系统,隐藏监控虚拟机子系统的存在,使得恶意代码无法感知到自身正在被监控,由此获取恶意代码正常执行过程的行为信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311759593.5A CN117725583A (zh) | 2023-12-20 | 2023-12-20 | 基于虚拟机自省的Linux恶意代码检测方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311759593.5A CN117725583A (zh) | 2023-12-20 | 2023-12-20 | 基于虚拟机自省的Linux恶意代码检测方法与系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117725583A true CN117725583A (zh) | 2024-03-19 |
Family
ID=90203192
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311759593.5A Pending CN117725583A (zh) | 2023-12-20 | 2023-12-20 | 基于虚拟机自省的Linux恶意代码检测方法与系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117725583A (zh) |
-
2023
- 2023-12-20 CN CN202311759593.5A patent/CN117725583A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4518564B2 (ja) | 不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体 | |
RU2637997C1 (ru) | Система и способ обнаружения вредоносного кода в файле | |
Guo et al. | A study of the packer problem and its solutions | |
Volckaert et al. | Cloning your gadgets: Complete ROP attack immunity with multi-variant execution | |
US8117660B2 (en) | Secure control flows by monitoring control transfers | |
US11822654B2 (en) | System and method for runtime detection, analysis and signature determination of obfuscated malicious code | |
CN106055385B (zh) | 监控虚拟机进程的系统和方法、过滤page fault异常的方法 | |
JP2001216161A (ja) | メモリ装置、スタック保護システム、コンピュータシステム、コンパイラ、スタック保護方法、記憶媒体及びプログラム伝送装置 | |
CN108920253B (zh) | 一种无代理的虚拟机监控系统和监控方法 | |
Kawakoya et al. | Api chaser: Anti-analysis resistant malware analyzer | |
CN110058921B (zh) | 客户虚拟机内存动态隔离和监控方法及系统 | |
CN110737888B (zh) | 虚拟化平台操作系统内核数据攻击行为检测方法 | |
Feng et al. | Stealth measurements for cheat detection in on-line games | |
CN112257037A (zh) | 一种进程水印方法、系统及电子设备 | |
Neugschwandtner et al. | d Anubis–Dynamic Device Driver Analysis Based on Virtual Machine Introspection | |
CN111428240A (zh) | 一种用于检测软件的内存违规访问的方法及装置 | |
CN117725583A (zh) | 基于虚拟机自省的Linux恶意代码检测方法与系统 | |
Mori et al. | A tool for analyzing and detecting malicious mobile code | |
Caillat et al. | Prison: Tracking process interactions to contain malware | |
EP3293660A1 (en) | System and method of detecting malicious code in files | |
Aboughadareh et al. | Mixed-mode malware and its analysis | |
Kawakoya et al. | Stealth loader: Trace-free program loading for analysis evasion | |
Dai et al. | Holography: a hardware virtualization tool for malware analysis | |
CN112347499B (zh) | 一种程序自我保护的方法 | |
Shamshirsaz et al. | An Improved Process Supervision and Control Method for Malware Detection. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |