一种新型内核态恶意代码的分析与研究_第1页
一种新型内核态恶意代码的分析与研究_第2页
一种新型内核态恶意代码的分析与研究_第3页
一种新型内核态恶意代码的分析与研究_第4页
一种新型内核态恶意代码的分析与研究_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一种新型内核态恶意代码的分析与研究

0启动型恶意代码的发展长期以来,内核rootkit一直在攻击操作系统的内核,并对系统安全构成了严重威胁。由于其运行在系统内核层,并拥有最高的系统控制权限,可以通过对内核进行一些特定的修改,并在其中添加恶意模块,实现在系统底层为恶意代码的运行提供后门和保护机制,从而成为了一种隐蔽性和破坏性极强的恶意程序。为了应对这种新的威胁,自从这种恶意程序出现以来,学界针对其进行检测和预防的相关研究在不断深入,对内核代码和数据结构的完整性保护方法也在持续更新。为了提高隐蔽效果,近几年来,内核态恶意代码进一步发展,出现了通过对系统的启动过程进行劫持来加载自身的恶意代码。这种恶意代码把自身存放在操作系统之外,例如BIOS以及其他主板插件的ROM、硬盘主引导区(MBR)等,能够在操作系统启动之前获得运行权,规避操作系统的防护措施,顺利进入并破坏系统,从而提高了其隐蔽性。其部分遵循了传统内核态Rootkit的原理并沿用了实现技术,通过实现操作系统启动劫持,在隐蔽性和破坏力上有了进一步的提高。本文将这种恶意代码称为启动型恶意代码。近几年来出现的一些流行的恶意代码如StonedBootkit、TDL系列、鬼影系列、BMW等都具有启动型恶意代码的特点。目前针对这种新型恶意代码的研究已经开展,文献[1]介绍了通过修改硬盘MBR对Windows操作系统进行启动的Bootkit,文献[2]介绍了一种通过修改NTLDR系统文件对Windows操作系统进行启动劫持的方法,文献[3]研究了计算机硬件后门的可行性并通过对主板网卡ROM进行修改实现了一个启动劫持的后门原型。这些研究主要针对一些使用特定启动劫持手段的恶意代码如Bootkit进行单独研究,没有对启动型恶意代码作为整体进行分析,在研究思路上也只对专注于其启动劫持方式,没有对这种恶意代码的存储模式、生命周期等进行分析。本文在以上研究的基础上,深入分析了几种典型的启动型恶意程序,重点研究其生命周期的运行原理和技术特点,进一步揭示了启动型恶意程序运行的一般规律和整体视图,并在此基础上对目前检测方法的研究现状和不足进行了分析,提出了改进建议。1恶意软件开发史本节将对启动型恶意程序出现背景和发展历史进行简要介绍,通过了解其发展脉络,有助于对其进行整体上的把握。1.1启动型病毒攻击启动型恶意代码出现的历史要远远久于恶意程序,1988年出现的PAKISTANIBRAIN病毒和1989年的Stoned病毒是最早的启动型恶意代码。这两种病毒通过感染硬盘的引导区(MBR)来感染整个操作系统,但并没有对系统进行后续的破坏。从现在的角度来看,这两种病毒很容易被检测和清除,但它们劫持操作系统启动的特性为后来出像的恶意代码提供了技术思路。1.2运行致命性程序在这一阶段出现了破坏力很强的恶意程序,如1992年的MICHEANGELO和1998年的CIH。这类恶意程序除了利用操作系统MBR进行启动劫持之外,在劫持成功之后还运行了致命性的承载程序对系统进行了破坏,如清除掉系统硬盘数据等。从技术上来说,由于在此阶段还没有出现恶意程序相关技术,这种恶意程序相比前一阶段虽然在功能上有所增强,具有较大的破坏力,但在隐藏性上并没有较大的改进,仍然不难被检测和清除。1.3bool式10d-2000年,在氨酸商2000年以后,内核Rootkit和使用Rootkit技术的恶意程序大量出现,Rootkit的隐藏特性使得它成为了操作系统完整性的破坏者。在此期间,出现了结合内核Rootkit和操作系统启动劫持的恶意程序,即Bootkit。这种恶意程序结合了Rootkit出色的隐藏能力、对操作系统内核拥有的高权限和先于操作系统运行自身的能力,凭借这些优势,Bootkit对操作系统安全构成了严重威胁。这一阶段出现的Bootkit有很多,如2009年黑帽大会上由PeterKleissner展示的stonedBootkit,2008—2011年欧美国家爆发的TDL系列魔影病毒以及2010年在中国大陆流行的鬼影病毒等。这类程序的共同特点是针对操作系统引导区(MBR)进行感染;通过感染MBR进一步感染操作系统启动文件,实现对操作系统的劫持;通过对操作系统的劫持隐蔽加载恶意程序驱动,从而在操作系统安全机制起作用之前完成恶意程序的加载和运行。这类恶意程序能够有效绕过操作系统的安全机制,而且,由于其能够对操作系统内核进行修改,甚至破坏恶意软件检测系统赖以生存的系统环境,导致整个操作系统处于一种不可信的状态,使得在线检测方法无法对其进行有效应对。目前针对Bootkit较为有效的检测手段大都采用离线式检测方法。1.4土壤深度扩展岩网(点)由于Bootkit的启动劫持通过感染MBR来实现,使得检测系统可以着重对MBR进行完整性保护来防止感染。在2010年前后,又陆续出现了新的启动型恶意程序,感染目标更加底层化,指向了BIOSROM、网卡ROM等主板固件ROM。在2009年的黑帽大会上,RafalWojtczuk和AlexanderTereshkin展示了如何通过堆溢出漏洞利用程序绕过InterBIOS的数字签名验证,对BIOS进行刷新。2011年出现的BMW病毒通过连续感染BIOSROM、MBR和Windows系统启动文件来获得操作系统控制权,被感染主机在不对BIOS进行处理的情况下无法将其彻底清除。除了BIOS之外,主板上的扩展ROM也是潜在的被利用对象,在系统启动的POST自检阶段,BIOS对各个扩展ROM进行检查,将其中存放的内容复制到内存中,并执行这些ROM中的初始化代码,对扩展ROM进行感染可以获得与感染BIOS同样的攻击效果,并且更加爱隐蔽和难以清除。文献[3]研究了对主板网卡ROM进行感染进而在主机启动阶段对其进行初始化之际感染MBR和操作系统。目前,在对固件ROM的利用方面,存在的一个前提条件是如何对固件ROM进行刷新。从棱镜门事件中我们可以看出完成这些步骤虽然比较困难,但仍然是可行的,因此利用固件ROM的恶意程序将对操作系统安全构成很大的挑战。2系统实现原理根据启动型恶意程序的运行于活动方式,将其生命周期划分为四个阶段:操作系统启动劫持、启动中劫持、加载恶意程序驱动以及启动后活动,分别分析每个阶段的实现原理,并在此基础上分析总结其使用的关键技术。2.1启动型恶意程序启动前劫持是指恶意代码在计算机加电启动到MBR开始引导操作系统这段时间内获取执行权,对计算机的控制行为。包括第一阶段对BIOSROM或其他固件ROM的劫持和第二阶段对MBR以及其它引导程序的劫持,在这两阶段中,计算机运行在实模式下,依靠BIOS中断来执行关键功能。首先,我们对计算机从开始启动到引导操作系统这一过程进行分析。图1展示了计算机启动过程中从BIOS到MBR的引导过程。在这一引导过程中,包含了两个重要的实模式中断INT13h和INT19h。BIOS通过19h中断从软盘、光盘或硬盘MBR中选择一个启动分区,然后使用13h中断将启动分区中的引导程序Bootloader加载到内存中,最后由Bootloader继续引导系统启动。启动型恶意程序利用系统这一启动方式的特点,采用逐级中断挂钩的方式对计算机在这一阶段的启动进行劫持,其大致的步骤如下:1)首先通过某种方式(如ISA模块)将恶意模块刷写到BIOSROM或者其他主板固件ROM当中,替换掉计算机启动时BIOS或主板固件ROM中需要在POST自检阶段运行的正常代码。2)系统重启时将运行固件ROM中的恶意代码,恶意代码挂钩BIOS19h中断,用定制的中断向量替换BIOS原有19h中断向量。3)恶意代码将系统控制权交还给BIOS,并由其继续引导计算机正常启动。4)BIOS在选择启动分区时引发19h中断,被恶意代码定制的中断向量截获。5)在新的19h中断处理程序中,恶意代码挂钩BIOS13h中断,使用定制的13h中断处理程序替换原有13h中断向量,并在新的中断处理程序中加入若干个特征码搜索匹配功能模块。6)恶意代码把系统控制权交还给BIOS,并由其继续加载MBR等启动分区中的Bootloader继续引导系统启动。图2展示了前面所述的劫持步骤,使用这种劫持方式的典型恶意程序是IceLordBootkit,它通过在BIOSROM中植入恶意模块依次劫持19h和13h中断,进而在操作系统启动之前获得执行权,并通过对13h中断进行挂钩,在挂钩程序中加入了代码特征搜索匹配模块,在下一阶段BIOS通过13h中断加载操作系统文件时,可以再次获取系统控制权并对操作系统内核进行修改。对主板上其他固件如网卡ROM的利用原理与利用BIOSROM类似,恶意程序开发者通过将ISA模块刷写到固件ROM,并替换固件原有的初始化代码,BIOS在POST自检阶段会调用主板上各固件ROM中的初始化程序,这时恶意程序就可以像IceLordBootkit一样获取系统控制权并执行一系列后续操作。2.2启动型恶意程序的加载启动中劫持是指从引导程序Bootloader加载操作系统启动文件到系统内核启动完成这一过程中进行劫持。操作系统的启动贯穿了实模式和保护模式,这一阶段之后计算机的运行和操作系统密切相关,并受到操作系统保护。目前出现的启动型恶意程序绝大多数基于Windows系列操作系统,因此在后续的讨论中主要以目前主流的Windowsvista/7/server2008等WindowsVistafamily操作系统为例进行启动中劫持分析。如图3所示,左边的实线流程表示操作系统正常启动的流程,右边的虚线流程表示被恶意程序劫持后系统的启动流程。在正常的启动流程中,操作系统的启动始于Bootloader加载操作系统启动文件,此时处理器仍然处于实模式,对硬盘的读写依赖BIOS的13h中断处理程序。首先,Bootloader通过13h中断读取操作系统第一个启动文件Bootmgr到内存。Bootmgr由一个16-bit的stub和一个32-bit的PE可执行文件Osloader两部分构成,其中stub运行在实模式下,用于把处理器切换到32-bit的保护模式,并且提供了访问16-bit实模式的接口。当Bootmgr被加载到内存后,首先运行stub,stub读取操作系统的启动配置数据(BCD),再跳转到Osloader执行,同时处理器模式切换到保护模式。接着,Osloader加载操作系统的第二阶段启动文件Winload.exe和Ntoskrnl到内存,并跳转到Winload.exe执行。Winload.exe进行系统初始化,然后跳转到Ntoskrnl继续执行初始化。Ntoskrnl是PE格式的操作系统内核映像,系统正是通过Nkoskrnl完成了操作系统启动的大部分工作,加载并运行系统运行所需要的各驱动程序,直到系统启动完成。启动型恶意程序对于操作系统启动中的劫持,就是在操作系统正常启动的流程中插入实现特定功能的目标代码,通过系统的正常启动,将恶意代码如木马、病毒等以驱动程序的形式,在不被管理员发现的情况下随着系统正常驱动程序一起加载并运行。而图3右半部分的虚线流程是一种典型的劫持方法,stonedBootkit就使用了这种方法,大致分为以下几个步骤:1)Bootloader调用13h中断读取Bootmgr,而13h中断在前述的启动前劫持中已被挂钩,调用13h中断将会使恶意代码获得控制权。2)在挂钩的13h中断处理程序中,首先调用正常的13h中断流程把Bootmgr读取到内存中,通过内存特征码查找技术把一段预先选定的特征码替换成callEntry指令,Entry处存放有恶意程序下一阶段运行所需要的一系列代码。3)将系统控制权交还给Bootmgr,系统开始正常运行,由stub跳转到Osloader执行,并把处理器切换到保护模式。在保护模式下,系统加载Winload.exe到内存。4)Osloader在跳转到Winload.exe之前执行到前面的特征码位置,此时特征码已被替换为callEntry指令,因此Osloader跳转到恶意程序的入口地址Entry继续执行。5)Entry处的恶意代码从Osloader开始的内存地址处通过查找特征码的方式搜索Winload.exe的地址,对Winload.exe进行挂钩,挂钩代码首先执行正常的Winload.exe,将Ntoskrnl加载到内存,然后在内存中查找Ntoskrnl的地址,对Ntoskrnl进行代码修补。6)被代码修补后的Ntoskrnl继续引导系统启动,对Ntoskrnl中用于加载驱动的关键函数和内核数据结构进行修改,利用Ntoskrnl的执行把恶意的驱动程序和系统正常的驱动程序一起加载并运行。整体上看,操作系统在这一阶段的启动分为实模式和保护模式两个阶段,启动型恶意程序在实模式阶段通过2.1节中挂钩的13h中断处理程序对这一阶段加载的启动文件进行代码修补,为保护模式阶段再次劫持系统提供入口。在保护模式阶段,恶意程序对这一阶段加载的启动文件根据需要依次进行代码修补,从而在系统正常启动中再次获取操作系统控制权。恶意程序在对操作系统启动中的整个劫持过程,每一阶段都遵循先读取启动文件,再对其在内存中的映像进行劫持,这一过程的劫持方式可以是挂钩,也可以是代码修补。最后通过Ntoskrnl的运行,将恶意驱动与系统正常的驱动程序一起加载运行。2.3)恶意程序驱动执行流程在操作系统PE格式的内核映像文件Ntoskrnl开始执行时,系统执行的实际上是内存中被代码修补过的Ntoskrnl映像。在这个被代码修补过的Ntoskrnl映像中,恶意程序驱动和其他正常的系统驱动一起被加载到了内存,并添加到驱动列表PsLoadedModuleList中,从而通过Ntoskrnl的运行,恶意程序驱动也得以执行。这个过程的关键部分是Hook_Winload对Ntoskrnl进行代码修补,其大致流程如图4所示。Hook_Winload通过调用内核映像Ntoskrnl中的一系列导出函数,将恶意程序驱动加载到内存,并将其与正常的系统启动驱动链接到一起,从而在Ntoskrnl运行时和系统启动驱动一起被执行。2.4临时加载器(恶意程序)当操作系统启动完成时,恶意程序驱动也随之启动并运行,该驱动可以具有一个完整运行态恶意程序的全部功能,也可以作为一个临时加载器。通过它来加载其他的恶意程序运行,大体上讲,它可以完成以下几种功能:1)作为恶意程序对恶意程序以及自身的活动(进程、文件、端口等)进行隐藏;2)进行键盘击键记录等隐蔽行为;3)对恶意程序检测系统所依赖的操作系统执行环境进行破坏;4)作为加载器引导其它恶意程序加载运行。2.5启动型恶意程序的代码填补在前四小节中,对启动型恶意程序按照其在操作系统启动中不同阶段的活动,简要介绍了其主要的执行流程,在每一阶段中,恶意程序都使用了一些特定的技术,其中有些技术是从早期恶意程序就开始大量使用的成熟技术,如挂钩和代码修补,另外一些技术是启动型恶意程序出现以后才开始运用的。1)挂钩技术挂钩技术是从恶意程序出现早期就有的成熟技术,它对内核中的重要函数指针、系统调用入口地址进行替换,从而当这些函数被调用执行时,跳转到其他的地址去执行,而这些地址是恶意程序恶意代码所在的地址。通过挂钩技术,实现了对系统控制流的劫持。启动型恶意程序多处利用了该技术,如实模式下对13h中断的劫持、保护模式下对Winload.exe的劫持等。2)代码修补技术与挂钩不同,代码修补技术不对函数地址直接进行替换,而是在函数体内部对其代码进行修改,使其跳转到恶意程序定制的代码序列执行。需要注意的是,在不了解函数内部工作机理的情况下,代码修补技术和挂钩技术通常在劫持了系统控制流并执行了定制的代码序列之后,还要执行原有的函数,完成系统正常的功能。这是因为恶意程序对操作系统控制流的劫持是有选择性、有目的的劫持,为了实现恶意代码的隐藏,恶意程序只对和自身相关的控制流进行劫持和重定向,而不破坏系统正常运行的功能。启动型恶意程序大量使用了代码修补技术,如实模式下对Bootmgr的修改以及保护模式下对Ntoskrnl的修改等。3)内存特征码扫描与定位启动型恶意程序在操作系统启动阶段为了持续获得执行权,对操作系统启动中加载各启动文件采用挂钩或代码修补方式进行了多级劫持。能够进行这种劫持的一个重要前提就是能够在内存中对劫持点进行定位,如挂钩需要定位内核中函数的地址,代码修补需要在内存的代码块中选择和定位修改点。启动型恶意程序采用了内核特征码的扫描与定位的方法来解决这一问题。4)内核导出函数地址提取为了使恶意的恶意程序驱动能够和正常的系统驱动程序一起随着操作系统启动被加载执行,需要对Ntoskrnl进行代码修补,利用其一系列导出函数将恶意程序驱动加载到内核内存,将驱动文件中的符号重定位并将恶意程序驱动链接到PsLoadedModuleList链表上。完成这些工作首先需要找到Ntoskrnl中各相关导出函数的地址,由于Ntoskrnl是PE格式的文件,因此可以定位其导出表的内存地址,并按照导出函数的哈希值在导出表处进行查找并定位。5)代码存储与访存表1展示了近几年的几个典型的启动型恶意程序在操作系统启动阶段的存储和访存方式,表的第2和第3列分别启动型恶意程序在实模式和保护模式下存储空间的选择,第4和第5列分别表示其在实模式和保护模式下访存方式的选择,第6列表示其访存层次。启动型恶意程序在存储和访存方式上,主要考虑了三方面的问题:一是可用空间的大小和方便性的问题,理论上计算机的所有存储空间包括硬盘空间和固件ROM等都是可以利用的,但实际上固件ROM的存储空间有限且刷写困难,因此启动型恶意程序大都会利用硬盘空间。另外,实模式下计算机的访存依赖13h中断,在保护模式下的访存依赖特定的文件系统。这也限制了恶意程序的访存方式。二是存储和访存的隐蔽性问题。理论上,在保护模式下,由于文件系统的存在,启动型恶意程序可以利用操作系统文件系统存储并使用系统调用来访存,但为了提高其隐蔽性,启动型恶意程序往往没有采取这种简单直接的方式,而操作系统对硬盘空间的利用往往不够充分,为恶意代码提供了一些可利用的保留空间。例如在Windows操作系统中,硬盘前53个扇区、硬盘最后一个分区结束位置到硬盘最后一个扇区之间都有保留的空间。因此,启动型恶意程序通常选择硬盘的保留空间来存储其文件,并通过实现一个自定义的文件系统来访问。三是单级访存与多级访存的选择问题。为了适应固件ROM和硬盘保留空间大小的限制,启动型恶意程序通常把后续的功能模块的访存安排在恶意驱动启动完成之后,也就是恶意程序启动完成后的运行阶段,只把启动直接相关的功能模块放在固件ROM和硬盘保留空间当中,采取两级或多级的访存和加载方式,在启动完成之后,再由恶意程序驱动来加载其他的恶意功能。表1展示的几种典型启动型恶意程序存储和访存方式的选择印证了这一点。3取得的主要成果目前针对启动型恶意程序检测的研究已经逐渐开展并取得了一些成果。下面对目前已知的检测方法进行简要介绍,主要包括ISA模块完整性检测、MBR完整性检测、中断向量表检测、基于可信计算的检测等。3.1isa模块检测ISA(IndustralStandardArchitecture)是一种旧的系统总线标准,目前已经被PCI(PeriphearlComponentInternect)总线标准所替代,但是为了保持与旧主板的兼容性,目前的BIOS仍然保留了对ISA标准的支持,而目前的针对BIOSROM的启动型恶意程序就是以ISA模块的方式存在于BIOSROM当中。因此,目前的检测方法根据ISA模块是否存在于BIOSROM当中来判断BIOSROM是否被修改。而MBR完整性检测则是针对MBRBootkit的,主要是采用了传统的完整性检测方法,对系统原始MBR进行备份,然后采用一些完整性检测算法进行判断。3.2修改企业的进程中断向量表(IVT)存储了所有中断处理程序入口地址,由于其功能的特殊性,启动型恶意程序多次对其进行了修改,如攻击BIOSROM的恶意程序修改了INT13h和INT19h中断,其中INT13h被恶意程序用于在实模式下对数据的存取操作,INT19h中断被用于在BIOS将启动权交给Bootloader时进行劫持。对中断向量表的检测方法有很多种,例如完整性检测、地址范围的检测等。3.3基于isa的检测可信计算的思想是在主板上增加一个名为TPM(TrustedPlatformModule)的芯片,通过TPM芯片,计算机能够在启动过程中从BIOS开始,对启动中的所有引导文件或代码进行完整性检测,并通过检测依次向后传递系统的信任链,通过逐级传递的方式确保之后启动的硬件和运行的代码都是安全可信的。而启动型恶意程序不可避免地要对一些计算机长期存储的代码或文件进行永久性修改和破坏,可信计算正是通过这种思想对启动型恶意程序进行检测。但是,目前针对启动型恶意程序的检测仍然存在一些问题。例如ISA模块检测只能对采用ISA方式破坏BIOSROM的攻击进行检测,目前的BIOS已经开始逐渐被UEFIBIOS所替代,而针对UEFI的攻击也已经出现,目前的检测方法对其无效。从根本上说ISA模块检测方法只关注了BIOSROM的刷写方法,依赖和恶意程序无关的工程方法,没有从启动型恶意程序挂钩13h和19h中断的原理入手,无法对其进行准确定位。针对MBR的完整性检测只能针对MBRBootkit,无法应对针对BIOSROM等固件ROM的攻击,中断向量表检测和基于可信计算的检测也面临同样的问题。总体上讲,在启动型恶意程序技术特点鲜明的情况下,目前的检测技术没有对这些特点进行准确把握和应对,大都采用了完整性检测这种相对粗放式的应对策略,具有较大的改进空间。另外,目前检测方法普遍存在的一个突出问题是过于

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论