欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

什么是内核级木马

来源:本站整理 作者:佚名 时间:2019-08-09 TAG: 我要投稿

一、什么是内核级木马

内核级木马一个无进程、无DLL、无启动项的、集多种Rootkit技术特征的独立功能远程控制后门程序。其利用线程注射DLL到系统进程,解除DLL映射并删除自身文件和启动项,关机时恢复。它是内核级的木马程序,主要部分工作在Ring0,因此有很强的隐蔽性和杀伤力。

二、内核级木马产生的意义

目前,传统应用层木马由于当下一些主动防御软件,杀毒的免费使用,各类反病毒工具对其技俩了如指掌,而木马能带来巨大危害的主要原因在其隐蔽性,各类反病毒工具的快速发展就导致木马谋取利益的成本大幅度提高,其带来的利益以及威胁程度呈现逐年下降的趋势。由于传统应用层木马的隐蔽性大幅度下降,黑客为了提升带来的效益以及获得被控主机更加持久的控制权,因而提升木马的隐藏技术就显得更加迫在眉睫。

内核级木马的隐藏主要使用内核Rootkit技术,内核Rootkit程序在使得远程黑客能够更长期的享有目标机器的底层系统控制权的同时在很大程度上不被杀毒软件发现,从而对被控主机造成更加严重的安全威胁,此外内核Rootkit不仅仅存在于Windows系统中,同样存在于LINUX等其他系统中。

而对于信息安全工作者,找出防御内核级木马的最有效途径自然是要深入了解内核木马的工作机制,内核Rootkit攻击技术,内核Rootkit隐藏技术,掌握其规律和特性,才能更好的找到应对此类木马的措施,以及对未来可能出现的安全隐患做好一些提前的防备。

三、内核木马于传统应用层木马隐藏技术对比

内核级木马隐藏主要有进程隐藏,文件隐藏,自启动隐藏,通信隐藏等,主要于木马的架构有关,那么对于一些主从型内核级木马,木马涉及到的功能模块越多自然对应涉及的隐藏项也就越多,甚至有时候还要做注册表隐藏,服务隐藏等。

3.1.进程隐藏

进程隐藏最初技术体系为最简单的混淆字符隐藏,如系统进程名为svchost.exe,木马进程名改为svch0st.exe隐藏,紧接着到注册服务隐藏,dll注入隐藏。现在内核级木马大部分通过进程控制块中的活动进程链表(ActiveProcessLinks)中摘除自身来达到隐藏,或通过从PspCidTable表中摘除自身等方法来达到隐藏目的。

3.2.文件隐藏

文件隐藏最初是通过存放于敏感目录(系统目录)并混淆文件名来实现,后来有些人通过挂钩应用层上的FindFirstFile,FindNextFile等API来实现该目的,现在在内核层隐藏文件方法一般试用FSDHook或FSD Inline Hook来实现。

3.3.自启动隐藏

自启动隐藏先后经历了添加注册表Run值,修改系统启动文件,注册为服务,修改定时程序,感染系统文件技术来实现,现在黑客开始关注于在硬盘固件,bios等地方做手脚来实现自启动隐藏。

3.4.通讯隐藏

对于通信隐藏来说,现在有些研究者已经实现了NDIS小端口驱动层的隐藏,不过主流的木马仍然在TDI层面上通信或者在NDIS中间层上通信。

四、内核级隐藏技术分析

应用层级隐藏技术由于处在ring3层,一般难以抵抗通过从内核层获取相应的信息的一些软件的检测,而在内核级隐藏技术中,由于各种方案有着不同的特点、所要达到的目的不同因而这些方案所使用的隐藏技术也各有差异,这一节中,将重点分析内核级木马可能用到的一些隐藏技术。

4.1自启动隐藏

对于应用层级的木马,自启动的方法可谓是五花八门,有捆绑文件、修改注册表项、加自启动快捷方式等,但是安全软件对应用层的检查比较严格,虽说对于内核层的自启动方法也有检查,不过相对来说,内核级的自启动一般要更有效一些。常见的内核级木马自启动方法主要有以下几点:

(1)注册为后台服务

跟应层级木马自启动中的注册为服务的原理一样,只不过前者是将应用程序注册为系统服务,这儿是把写好的驱动程序注册为系统服务,进而实现自启动。这种方法主要是把驱动程序注册为系统的一个服务(一般使用SCM ( Services Control Manager)接口来实现服务的安装、启动、停止等,使用这种方式加载的驱动程序是不可分页的,不需要考虑分页的问题,另外,一般也不会由于驱动的加载导致BSOD),在注册表中生成[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\“ServiceName”]子键,再在其中设置好自己的一些启动参数,如ImagePath等。普通的驱动程序一般就是采用这种方法加载的,内核级木马的驱动模块当然也可以使用这种方法,但由于涉及到在注册表中插入键值,首先,在加载的时候可能被拦截,另外,若是加载成功了,也需要在后续的代码中对该注册表项和服务项做隐藏。

(2)使用Native API ZwSetSystemInformation()

该方法使用了未文档化的API函数ZwSetSystemInformation(),可以在不创建注册表键的情况下实现驱动的加载,但是由于驱动程序的分页性,若在驱动运行过程中,通过该种方法加载的内核木马驱动被页换出,则对其的访问就会导致BSOD[11]。因而,若要使用该种方案,还需针对分页问题进行一定的设计,如migbot是通过将全部的操作代码复制到不分页的内存池来实现这个目的。

4.2文件隐藏

一般在应用层级实现的文件隐藏都是基于伪装,而并不是真正意义上的隐藏,也可以说只是在视觉上欺骗了用户,如将文件名修改为酷似系统文件的名字(通过使用一些易混淆的字符来实现)等。在内核中,可以通过修改文件操作时的内核处理流程来实现对文件的隐藏,进而使用户无法在系统中通过工具(使用同种或更上层方法来枚举文件的工具)来查看被隐藏的文件。常见的内核层的文件隐藏技术一般有一下几种:

(1)Hook ZwQueryDirectoryFile()函数

在Windows中,实现文件的枚举操作,最后都是调用Native API(in ntdll.dll)函数NtQueryDirectoryFile()来实现,接着通过中断进入内核,进而通过查询SSDT(System ServicesDescriptor Table,系统服务描述符表)表获得相应的函数ZwQueryDirectoryFile()的地址,进而调用真正的函数执行体来完成对文件的枚举。Hook SSDT表隐藏文件主要是篡改函数在SSDT表中的真实地址,让程序在枚举文件信息时首先进入修改后的地址对应的函数中执行,接着对待隐藏文件的信息进行过滤,让应用层以及通过该种机制获取文件信息的工具法枚举到被隐藏的文件。

(2)文件过滤驱

1) 过滤驱动程序:

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载