Rootkit的类型、功能及主要技术
- 格式:docx
- 大小:18.99 KB
- 文档页数:5
【Linux】后门入侵检测工具一、rootkit简介rootkit是Linux平台下最常见的一种木马后门工具,它主要通过替换系统文件来达到入侵和和隐蔽的目的,这种木马比普通木马后门更加危险和隐蔽,普通的检测工具和检查手段很难发现这种木马。
rootkit攻击能力极强,对系统的危害很大,它通过一套工具来建立后门和隐藏行迹,从而让攻击者保住权限,以使它在任何时候都可以使用root权限登录到系统。
rootkit主要有两种类型:文件级别和内核级别,下面分别进行简单介绍。
1、文件级别rootkit文件级别的rootkit一般是通过程序漏洞或者系统漏洞进入系统后,通过修改系统的重要文件来达到隐藏自己的目的。
在系统遭受rootkit攻击后,合法的文件被木马程序替代,变成了外壳程序,而其内部是隐藏着的后门程序。
通常容易被rootkit替换的系统程序有login、ls、ps、ifconfig、du、find、netstat等,其中login程序是最经常被替换的,因为当访问Linux时,无论是通过本地登录还是远程登录,/bin/login 程序都会运行,系统将通过/bin/login来收集并核对用户的账号和密码,而rootkit就是利用这个程序的特点,使用一个带有根权限后门密码的/bin/login来替换系统的/bin/login,这样攻击者通过输入设定好的密码就能轻松进入系统。
此时,即使系统管理员修改root密码或者清除root密码,攻击者还是一样能通过root用户登录系统。
攻击者通常在进入Linux系统后,会进行一系列的攻击动作,最常见的是安装嗅探器收集本机或者网络中其他服务器的重要数据。
在默认情况下,Linux中也有一些系统文件会监控这些工具动作,例如ifconfig命令,所以,攻击者为了避免被发现,会想方设法替换其他系统文件,常见的就是ls、ps、ifconfig、du、find、netstat等。
如果这些文件都被替换,那么在系统层面就很难发现rootkit已经在系统中运行了。
挂钩技术—、WindowsRootKit概述2005年10月,RootKitRevealer的作者MarkRussinovich发现Sony公司使用RootKit以保护其电子出版物不受盗版侵权DMark在他的Blog上指出Sony公司不仅在消费者毫不知情的情况下(既没有明确告知消费者,也没有在软件的服务条款中提及)向消费者的电脑中安装了—个RootKit,而且知情的攻击者还可以利用这个RootKit隐藏自己的工具。
随后,RootKit 引起了人们广泛关注。
Rootkit是黑客在入侵目标系统后,开辟后门和隐藏行为的技术或者是工具。
当攻击者通过某种方式进入被入侵的系统并安装上RootKit就可以欺骗目标计算机的操作系统,从而达到隐藏所有修改并拥有操作系统控制权。
WindowsRootKit的核心技术就是隐藏技术,隐藏的内容包括文件、目录、进程、注册表项、网络端口、设备驱动器、网卡模式等。
RootKit最早出现于Unix系统中,随着计算机技术的发展,现在多种操作系统平台中都出现了RootKit。
其中Windows系统上的RootKit技术,尤其受到广泛重视,RootKit也分为几种:(一)早期RootKit工作原理是把系统中的一些程序替换成恶意的版本,当这些替换的程序运行时,就会自动隐藏特定的对象。
如称为RootKit之父的Cabanas病毒…(二)用户模式RootKit这种RootKit是安装在系统当前用户的安全上下文环境,替换、挂钩(hook!或者修改某些操作系统调用和DLL中的函数。
(三)内核模式RootKit现在的WindowsRootKit所使用的技术也从用户模式向内核模式发展,内核模式RootKit不仅能拦截底层的API调用,而且还会操作内核数据结构。
二、WindowsRootKit的检测技术WindowsRootKit检测技术总是伴随着Rootkit技术的发展而发展的,检测技术的发展也迫使WindowsRootKit技术不断更新。
Rootkit 是什么
Rootkit 是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit 一般都和木马、后门等其他恶意程序结合使用。
在悬念迭起的中外谍战片里,对战双方中的一派势力通常会派遣特工人员潜伏到对手阵营中。
这名卧底人员良好的伪装使得对手对此长时间毫无察觉;为了能够长期潜伏他不贸然采取高风险行为以免过早暴露自己;他赢得敌人的信任并因此身居要职,这使得他能够源源不断地获取重要情报并利用其独特渠道传送回去。
从某种意义上说这位不速之客就是Rootkit——持久并毫无察觉地驻留在目标计算机中,对系统进行操纵、并通过隐秘渠道收集数据的程序。
Rootkit 的三要素就是:隐藏、操纵、收集数据。
“Rootkit”中root 术语来自于unix 领域。
由于unix 主机系统管理员账号为root 账号,该账号拥有最小的安全限制,完全控制主机并拥有了管理员权限被称为“root”了这台电脑。
然而能够“root”一台主机并不意味着能持续地控制它,因为管理员完全可能发现了主机遭受入侵并采取清理措施。
因此Rootkit 的初始含义就在于“能维持root 权限的一套工具”。
Rootkit的基础知识和防御方法-电脑资料Rootkit的基础知识和防御方法好多人有一个误解,他们认为rootkit是用作获得系统root访问权限的工具,。
实际上,rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。
通常,攻击者通过远程攻击获得root访问权限,或者首先密码猜测或者密码强制破译的方式获得系统的访问权限。
进入系统后,如果他还没有获得root权限,再通过某些安全漏洞获得系统的root权限。
接着,攻击者会在侵入的主机中安装rootkit,然后他将经常通过rootkit的后门检查系统是否有其他的用户登录,如果只有自己,攻击者就开始着手清理日志中的有关信息。
通过rootkit的嗅探器获得其它系统的用户和密码之后,攻击者就会利用这些信息侵入其它的系统。
一全面认识rootkit:Rootkit出现于二十世纪90年代初,在1994年2月的一篇安全咨询报告中首先使用了rootkit这个名词。
这篇安全咨询就是CERT-CC的CA-1994-01,题目是Ongoing Network Monitoring Attacks,最新的修订时间是1997年9月19日。
从出现至今,rootkit的技术发展非常迅速,应用越来越广泛,检测难度也越来越大。
rootkit介绍Rootkit是一种奇特的程序,它具有隐身功能:无论静止时(作为文件存在),还是活动时,(作为进程存在),都不会被察觉。
换句话说,这种程序可能一直存在于我们的计算机中,但我们却浑然不知,这一功能正是许多人梦寐以求的——不论是计算机,还是计算机取证人员。
可以在入侵后置入Rootkit,秘密地窥探敏感信息,或等待时机,伺机而动;取证人员也可以利用Rootkit实时监控嫌疑人员的不法行为,它不仅能搜集证据,还有利于及时采取行动。
二了解Rootkit的攻击原理:要了解Rootkit的攻击原理,就必须从系统原理说起,我们知道,操作系统是由内核(Kernel)和外壳(Shell)两部分组成的,内核负责一切实际的工作,包括CPU任务调度、内存分配管理、设备管理、文件操作等,外壳是基于内核提供的交互功能而存在的界面,它负责指令传递和解释。
Rootkit技术rootkit的主要分类早期的rootkit主要为应用级rootkit,应用级rootkit主要通过替换login、ps、ls、netstat 等系统工具,或修改.rhosts等系统配置文件等实现隐藏及后门;硬件级rootkit主要指bios rootkit,可以在系统加载前获得控制权,通过向磁盘中写入文件,再由引导程序加载该文件重新获得控制权,也可以采用虚拟机技术,使整个操作系统运行在rootkit掌握之中;目前最常见的rootkit是内核级rootkit。
内核级rootkit又可分为lkm rootkit、非lkm rootkit。
lkm rootkit主要基于lkm技术,通过系统提供的接口加载到内核空间,成为内核的一部分,进而通过hook系统调用等技术实现隐藏、后门功能。
非lkm rootkit主要是指在系统不支持lkm机制时修改内核的一种方法,主要通过/dev/mem、/dev/kmem设备直接操作内存,从而对内核进行修改。
非lkm rootkit要实现对内核的修改,首先需要获得内核空间的内存,因此需要调用kmalloc分配内存,而kmalloc是内核空间的调用,无法在用户空间直接调用该函数,因此想到了通过int 0x80调用该函数的方法。
先选择一个不常见的系统调用号,在sys_call_table 中找到该项,通过写/dev/mem直接将其修改为kmalloc函数的地址,这样当我们在用户空间调用该系统调用时,就能通过int 0x80进入内核空间,执行kmalloc函数分配内存,并将分配好的内存地址由eax寄存器返回,从而我们得到了一块属于内核地址空间的内存,接着将要hack的函数写入该内存,并再次修改系统调用表,就能实现hook系统调用的功能。
rootkit的常见功能隐藏文件:通过strace ls可以发现ls命令其实是通过sys_getdents64获得文件目录的,因此可以通过修改sys_getdents64系统调用或者更底层的readdir实现隐藏文件及目录,还有对ext2文件系统直接进行修改的方法,不过实现起来不够方便,也有一些具体的限制。
一.Rootkit例子Rootkit 嵌入到MBR,Mebroot利用rootkit下载一个450KB的文件,将自身存储在硬盘的最后几个扇区,将自举管理程序写入MBR,实现隐藏磁盘访问,内核中实现,覆盖DISK.sys,调用DISK.sys,创建看门狗线程,如果没有安装,进行安装.查找NDIS隐藏和文档中未出现的函数,与NDIS通信,构造TCP/IP协义栈。
Rootkit一般有两种类型:用户模式和内核模式,用户模式的rootkit如HackerDefender100r容易被发现,但holy_father提供了HxDef的修改版本,命名为Silver andGold并开始销售,也能够防止系统级别的进程,内核模式的rootkit的运行级别与驱动程序是一个级别,内核rootkit不能工作于所有版本的Windows,增加了操作系统的不稳定性,每个rootkit都可以被探测到,但是准确探测的难度和时间超过了结果的价值二.钩子的艺术2.1 软钩子进程附加操作,对INT3中断指令的使用以截获程序流,FireFox挂钩,在PR_Write上设下一个钩子,当钩子命中时,读取栈上第二个参数所指向的ASCII字符串,如果这一字符串与我们之前定下的pattern变量相匹配时,它将被输出至控制台.如果将软钩子施加于调用频繁的函数身上时,目标进程的运行状态可能会极慢,或者会崩溃,因为软钩子所依赖的INT 3指令会导致中断处理例程接过控制权,直到相应的钩子代码执行完毕交还目标进程的控制权,若这一过程每秒钟需要发生上千次的话,大量的性能损失将不可能避免.2.2 硬钩子以硬编码形式向目标进程写入一条跳转指令,以使得同样使用汇编编写而成的钩子代码能够得以执行,软钩子适用于拦截那些调用次数少的函数,而调用次数多的函数,为了对目标进程施加最小的影响,硬钩子成为不二选择,硬钩子首要拦截对象是调用频繁的堆管理例程以及高密度的文件I/O操作。
Rootkit技术可以隐藏系统进程、系统文件、注册表、网络通信。
虽然Rootkit技术从1994年就开始迅速发展,但是直到2007年,国外的研究人员才开始把基于Windows启动过程的Rootkit检测技术与可信计算结合起来,从根源去解决这种攻击,但是这种检测思想实现难度大、成本高、通用性差,只能达到一个检测的目的,而不能真正的阻止这类Rootkit的运行。
2008年以后国内掀起了研究Rootkit技术的热潮,相继出现了Rootkit技术方面的成功实例。
其中包括:奇虎360公司的首席安全研究员李文彬于2008年6月提出了一种基于Boot.ini 的Rootkit-Tophet,并在其Blog中发表的一篇名为《 A new invisible Bootkit is on the way》的文章中进行了详细的描述,该Bootkit 技术能够绕过当前所有的防御软件。
在BIOS Rootkit的研究方面,国内起步较晚,相对成型的实例没有国外多。
国内目前在基于Windows 启动过程的Rootkit检测技术研究方面处于很初级的探索阶段,暂时还没有成型且可靠性高的检测技术出现,尤其在BIOS Rootkit的检测技术方面处于一个相对进展缓慢的状态。
国内还出现了通过TPM芯片去实现基于Windows启动过程的Rootkit的检测,这种检测方法的思想主要利用了可信计算的相关理论,能够检测出系统是否存在这类Rootkit,并且可以有效阻止Bootkit的运行,但是在BIOS Rootkit 的查杀方面可靠性不高,不能恢复操作系统的正常运行。
因此研究有效的并且可靠的检测和防御方法,对信启、安全技术的发展会起到很大的促进作用。
目前大部分的Anti Rootkit技术的实现都是使用了下列几种方法:Cross View(交叉检测技术)、基于行为的Rootkit检测技术和完整性校验技术。
而如今,Rootkit越来越向硬件层次渗透,试图在Windows系统启动之前就获得对系统的控制权,这样Rootkit 技术就不会检测到了。
Rootkit的类型、功能及主要技术Rootkit 的类型小结
1.固化Rootkits和BIOS Rootkits
固化程序是存于ROM中,通常很小,使用系统硬件和BIOS 创建顽固的软件镜像。
将制定的代码植入到BIOS 中,刷新BIOS,在BIOS 初始化的末尾获得运行机会。
重启无用、格式化无用,在硬盘上无法探测,现有的安全软件将大部分的扫描时间用在了对硬盘的扫描上。
本文整理:(第三方信息安全网)/
2 内核级Rootkits
内核级Rootkits(Kernelland Rootkits)是通过修改内核、增加额外的代码、直接修改系统
调用表、系统调用跳转(Syscall Jump),并能够替换一个操作系统的部分功能,包括内核和相关的设备驱动程序。
现在的操作系统大多没有强化内核和驱动程序的不同特性。
许多内核模式的Rootkit 是作为设备驱动程序而开发,或者作为可加载模块,如Linux 中的可加载模块或Windows 中的设备驱动程序,这类Rootkit 极其危险,它可获得不受限制的安全访问权。
如果代码中有任何一点错误,那么内核级别的任何代码操作都将对整个系统的稳定性产生深远的影响。
特点:无进程;无端口。
与用户级Rootkit 相比,与操作系统处于同一级别,可以修改或破坏由其它软件所发出的任何请求。
3 用户态Rootkits
用户态Rootkits(Userland Rootkits)是运行在Ring3 级的Rootkit,由于Ring3 级就是
用户应用级的程序,而且信任级别低,每一个程序运行,操作系统给这一层的最小权限。
用
户态Rootkit使用各种方法隐藏进程、文件,注入模块、修改注册表等。
4 应用级Rootkits
应用级Rootkits 通过具有特洛伊木马特征的伪装代码来替换普通的应用程序的二进制代码,也可以使用Hook、补丁、注入代码或其它方式来修改现有应用程序的行为。
5 代码库Rootkits
代码库Rootkits 用隐藏攻击者信息的方法进行补丁、Hook、替换系统调用。
这种Rootkit 可以通过检查代码库( 如Windows中DLL) 的改变而发现其踪迹。
实际上,很难检测一些应用程序和补丁包一起发行的多种程序库中的Rootkit。
6 虚拟化Rootkits与HypervisorRootkits
虚拟化Rootkit(Virtual Rootkits)是利用虚拟机技术的虚拟机Rootkit(是模仿软件虚
拟机形式的Rootkit)。
这种Rootkit 通过修改计算机的启动顺序而发生作用, 目的是加载
自己而不是原始的操作系统。
一旦加载到内存,虚拟化Rootkits 就会将原始的操作系统加载为一个虚拟机,这使得Rootkit 能够截获客户操作系统所发出的所有硬件请求。
Hypervisor Rootkits 是一种基于硬件或固化的Rootkit。
它具有管理员权限的管理程序,
可以在支持硬件协助虚拟化和未安装虚拟化软件的系统上安装基于Hypervisor 的Rootkit。
然后,这个基于Hypervisor 的Rootkit 将可以在比操作系统本身更高的权限级
别上运行。
特点:合法内核模式代码降低了检测出攻击者Hypervisor 模式代码的能力。
它是在硬件上运行的虚拟的环境,由于攻击者强行在真正的内核插入虚拟机,在硬件上运行,因此,这常被误认为是内核Rootkits。
在攻击者执行内核模式代码之前,Hypervisor Rootkits 不会
运行。
当一个系统被Hypervisor Rootkits 感染时,在该系统的Kernelland 没有任何迹象,这是与Hypervisor Rootkits 而不是真正的硬件交互。
因此,几乎是不可能从Kernelland、Userland 和应用层检测到。
在Rootkit 和Anti-Rootkit 的对抗中,取决于对该Hypervisor
层的检测和预防,以及在哪一层安装了Rootkit。
谁先去接近硬件就是赢者。
这意味着如果用户运行基于Userland 或Kernelland 的Anti-Rootkit 工具,无法检测到HypervisorRootkits,因为前者不是运行在真实的硬件上,但高于真正的硬件虚拟机。
rootkit的常见功能:
隐藏文件:通过strace ls可以发现ls命令其实是通过sys_getdents64获得文件目录的,
因此可以通过修改sys_getdents64系统调用或者更底层的readdir实现隐藏文件及目录,
还有对ext2文件系统直接进行修改的方法,不过实现起来不够方便,也有一些具体的限制。
隐藏进程:隐藏进程的方法和隐藏文件类似,ps命令是通过读取/proc文件系统下的进程目录获得进程信息的,只要能够隐藏/proc 文件系统下的进程目录就可以达到隐藏进程的效果,即hook sys_getdents64和readdir等。
隐藏连接:netstat命令是通过读取/proc文件系统下的net/tcp和net/udp文件获得当前
连接信息,因此可以通过hook sys_read 调用实现隐藏连接,也可以修改tcp4_seq_show
和udp4_seq_show等函数实现。
隐藏模块:lsmod命令主要是通过sys_query_module系统调用获得模块信息,可以通过hook sys_query_module 系统调用隐藏模块,也可以通过将模块从内核模块链表中摘除从而达到隐藏效果。
嗅探工具:嗅探工具可以通过libpcap库直接访问链路层,截获数据包,也可以通过linux 的netfilter框架在IP层的hook点上截获数据包。
嗅探器要获得网络上的其他数据包需要
将网卡设置为混杂模式,这是通过ioctl系统调用的SIOCSIFFLAGS命令实现的,查看网卡
的当前模式是通过SIOCGIFFLAGS命令,因此可以通过hook sys_ioctl隐藏网卡的混杂模式。
密码记录:密码记录可以通过hook sys_read系统调用实现,比如通过判断当前运行的进程名或者当前终端是否关闭回显,可以获取用户的输入密码。
hook sys_read还可以实现login 后门等其它功能。
日志擦除:传统的unix日志主要在/var/log/messages,/var/log/lastlog,/var/run/utmp,
/var /log/wtmp下,可以通过编写相应的工具对日志文件进行修改,还可以将HISTFILE等环境变设为/dev/null隐藏用户的一些操作信息。
内核后门:可以是本地的提权后门和网络的监听后门,本地的提权可以通过对内核模块发送定制命令实现,网络内核后门可以在IP层对进入主机的数据包进行监听,发现匹配的指定数据包后立刻启动回连进程。
rootkit的主要技术:
lkm注射、模块摘除、拦截中断(0x80、0x01)、劫持系统调用、运行时补丁、inline hook、端口反弹……
lkm注射:也是一种隐藏内核模块的方法,通过感染系统的lkm,在不影响原有功能的情况下将rootkit模块链接到系统lkm中,在模块运行时获得控制权,初始化后调用系统lkm
的初始化函数,lkm注射涉及到elf文件格式与模块加载机制。
模块摘除:主要是指将模块从模块链表中摘除从而隐藏模块的方法,最新加载的模块总是在模块链表的表头,因此可以在加载完rootkit模块后再加载一个清除模块将rootkit模块信息从链表中删除,再退出清除模块,新版本内核中也可以通过判断模块信息后直接
list_del。
拦截中断:主要通过sidt指令获得中断调用表的地址,进而获取中断处理程序的入口地址,修改对应的中断处理程序,如int 0x80,int 0x1等。
其中拦截int 0x1是较新的技术,主
要利用系统的调试机制,通过设置DR寄存器在要拦截的内存地址上下断点,从而在执行到指定指令时转入0x1中断的处理程序,通过修改0x1中断的处理程序即可实现想要的功能。
劫持系统调用:和拦截中断类似,但主要是对系统调用表进行修改,可以直接替换原系统调用表,也可以修改系统调用表的入口地址。
在2.4内核之前,内核的系统调用表地址是导出的,因此可以直接对其进行修改。
但在2.6内核之后,系统调用表的地址已经不再导出,需要对0x80中断处理程序进行分析从而获取系统调用表的地址。
运行时补丁:字符设备驱动程序和块设备驱动程序在加载时都会向系统注册一个Struct
file_operations结构实现指定的read、write等操作,文件系统也是如此,通过修改文件
系统的file_operations结构,可以实现新的read、write操作等。
inline hook:主要是指对内存中的内核函数直接修改,而不影响原先的功能,可以采用跳
转的办法,也可以修改对下层函数的call offset实现。
端口反弹:主要是为了更好的突破防火墙的限制,可以在客户端上监听80端口,而在服务器端通过对客户端的80端口进行回连,伪装成一个访问web服务的正常进程从而突破防火墙的限制。