Rootkit是指其主要功能为隐藏其他程式进程的
软件,可能是一个或一个以上的软件组合;广义而言,Rootkit也可视为一项技术。
Rootkit是什么?估计很多朋友并不明白,简单的说,Rootkit是一种特殊的
恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和
网络链接等信息,比较多见到的是Rootkit一般都和
木马、
后门等其他恶意程序结合使用。Rootkit通过加载特殊的驱动,修改系统
内核,进而达到隐藏信息的目的。技术是双刃剑,我们研究它的目的在于,透过我们的研究,用这项技术来保护我们的系统,使我们的系统更加健壮,充分发挥这个技术的正面应用。
在
网络安全中经常会遇到rootkit,NSA安全和
入侵检测术语字典( NSA Glossary of Terms Used in Security and Intrusion Detection)对rootkit的定义如下:A hacker security tool that captures passwords and message traffic to and from a computer. A collection of tools that allows a hacker to provide a backdoor into a system, collect information on other systems on the network,mask the fact that the system is compromised, and much more. Rootkit is a classic example of Trojan Horse software. Rootkit is available for a wide range of operating systems.
好多人有一个误解,他们认为rootkit是用作获得系统root访问权限的工具。实际上,rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。通常,攻击者通过远程攻击获得root访问权限,或者首先密码猜测或者密码强制破译的方式获得系统的访问权限。进入系统后,如果他还没有获得
root权限,再通过某些安全漏洞获得系统的root权限。接着,攻击者会在侵入的主机中安装rootkit,然后他将经常通过rootkit的
后门检查系统是否有其他的用户登录,如果只有自己,攻击者就开始着手清理
日志中的有关信息。通过rootkit的
嗅探器获得其它系统的用户和密码之后,攻击者就会利用这些信息侵入其它的系统。
最早Rootkit用于善意用途,但后来Rootkit也被
骇客用在入侵和攻击他人的
电脑系统上,电脑病毒、
间谍软件等也常使用Rootkit来隐藏踪迹,因此Rootkit已被大多数的防毒软件归类为具危害性的
恶意软件。Linux、Windows、Mac OS等
操作系统都有机会成为Rootkit的受害目标。
Rootkit出现于二十世纪90年代初,在1994年2月的一篇安全咨询报告中首先使用了rootkit这个名词。这篇安全资讯就是CERT-CC的CA-1994-01,题目是Ongoing Network Monitoring Attacks,最新的修订时间是1997年9月19日。从出现至今,rootkit的技术发展非常迅速,应用越来越广泛,检测难度也越来越大。
rootkit介绍Rootkit是一种奇特的程序,它具有隐身功能:无论静止时(作为文件存在),还是活动时,(作为进程存在),都不会被察觉。换句话说,这种程序可能一直存在于我们的计算机中,但我们却浑然不知,这一功能正是许多人梦寐以求的——不论是计算机
黑客,还是
计算机取证人员。
黑客可以在入侵后置入Rootkit,秘密地窥探敏感信息,或等待时机,伺机而动;取证人员也可以利用Rootkit
实时监控嫌疑人员的不法行为,它不仅能搜集证据,还有利于及时采取行动!
一、背景知识
我们通嫌常所说的智能机器,大至
超级计算机,中到个人PC,小至智能手机,通常都有两部分组成:
硬件和软件。并且,设备的智能是通过软件来实现的。所有软件中,有一种是必不可少的,那就是
操作系统。
操作系统可以简单理解为一组高度复用的核心程序,一方面,它要管理低层的
硬件设备,另一方面,为上层其它程序提供一个良好的运行环境。真是同人不同命,同为软件,
操作系统却享有至高无上的特权:它不仅管理
硬件,而且其他所有软件也都受制于它。
因为在
应用程序和
硬件之间隔着
操作系统,所以应用程序不能直接访问硬件,而是通过调用操作系统提供的
接口来使用
硬件。也就是说,对
应用程序而言,硬件是不可见的。当然,凡事是没有绝对的,
应用程序绕过
操作系统来直接访问
硬件也不是不可能的,但这样做会付出高昂的代价。设想一个软件开发商在开发一款功能丰富的软件,功能本身就够他头痛得了,现在他还得操心某个数据在某个
磁道的某个簇上,某个字符在某品牌显示器上的颜色的
二进制代码等等繁琐的事情,不用说财力和物力,单说开发周期就是无法容忍的。所以,现在的
应用程序都是使用
操作系统提供的简单明了的服务来访问系统的,因为毕竟没有谁愿意自讨苦吃。
从上文中我们已经了解,
内核在系统中处于核心枢纽的地位,下面我们具体介绍内核中与Rootkit紧密相关的几个主要功能,更重要的是这些功能对Rootkit的意义所在:
进程管理。进程可以简单理解为运行中的程序,它需要占用内存、CPU时间等
系统资源。现在的
操作系统大多支持多用户多任务,也就是说系统要并行运行多个程序。为此,
内核不仅要有专门代码来负责为进程或线程分配CPU时间,另一方面还要开辟一段内存区域存放用来记录这些进程详细情况的
数据结构。
内核是怎么知道系统中有多少进程、各进程的状态等信息的?就是通过这些
数据结构,换句话说它们就是内核感知进程存在的依据。因此,只要修改这些
数据结构,就能达到隐藏进程的目的。
文件访问。文件系统是
操作系统提供的最为重要的功能之一。
内核中的驱动程序把设备的柱面、
扇区等原始结构抽象成为更加易用的文件系统,并提供一个一致的
接口供上层程序调用。也就是说,这部分代码完全控制着对硬盘的访问,通过修改
内核的这部分代码,攻击者能够隐藏文件和
目录。
安全控制。对大部分
操作系统来说,因为系统中同时存在多个进程,为了避免各进程之间发生冲突,内核必须对各进程实施有效的隔离措施。比如,在MS-Windows系统中,每个进程都被强制规定了具体的权限和单独的内存范围。因此,对攻击者而言,只要对
内核中负责安全事务的代码稍事修改,整个安全机制就会全线崩溃。
内存管理。现在的
硬件平台(比如英特尔的奔腾系列处理器)的
内存管理机制已经复杂到可以将一个内存
地址转换成多个物理地址的地步。举例来说,进程A按照地址 0x0030030读取内存,它得到值的是“飞机”;然而,进程B也是按照同样的地址0x0030030来读取内存,但它取得的值却是“大炮”。像上面这样,同一个地址指向截然不同的两个
物理内存位置,并且每个位置存放不同的数据这种现象并不足以为怪——只不过是两个进程对
虚拟地址到
物理地址进行了不同的映射而已。如果这一点利用好了,我们可以让Rootkit躲避调试程序和取证软件的追踪。
上面介绍了内核的主要功能,以及它们对 Rootkit的重大意义。说到这里,我们就要切入正题了,即:只要我们颠覆(即修改)了
操作系统的核心服务(即内核),那么整个系统包括各种应用就完全处于我们的掌控之下了。要想颠覆内核,前提条件是能把我们的代码导入内核。
其中针对SunOS和Linux两种
操作系统的rootkit最多(树大招风:P)。所有的rootkit基本上都是由几个独立的程序组成的,一个典型rootkit包括:
1 以太网嗅探器程程序,用于获得网络上传输的用户名和密码等信息。
2
特洛伊木马程序,例如:inetd或者login,为攻击者提供
后门。
3 隐藏攻击者的
目录和进程的程序,例如:ps、netstat、rshd和ls等。
4 可能还包括一些日志清理工具,例如:zap、zap2或者z2,攻击者使用这些清理工具删除wtmp、utmp和lastlog等日志文件中有关自己行踪的条目。
一些复杂的rootkit还可以向攻击者提供telnet、shell和finger等服务。
还包括一些用来清理/var/log和/var/adm
目录中其它文件的一些
脚本。
攻击者使用rootkit中的相关程序替代系统原来的ps、ls、netstat和df等程序,使系统
管理员无法通过这些工具发现自己的踪迹。接着使用日志清理工具清理
系统日志,消除自己的踪迹。然后,攻击者会经常地通过安装的
后门进入系统查看
嗅探器的
日志,以发起其它的攻击。如果攻击者能够正确地安装rootkit并合理地清理了
日志文件,
系统管理员就会很难察觉系统已经被侵入,直到某一天其它系统的管理员和他联系或者
嗅探器的日志把
磁盘全部填满,他才会察觉已经大祸临头了。但是,大多数攻击者在清理
系统日志时不是非常小心或者干脆把系统日志全部删除了事,警觉的
系统管理员可以根据这些异常情况判断出系统被侵入。不过,在系统恢复和清理过程中,大多数常用的命令例如ps、df和ls已经不可信了。许多rootkit中有一个叫做FIX的程序,在安装rootkit之前,攻击者可以首先使用这个程序做一个系统
二进制代码的
快照,然后再安装替代程序。FIX能够根据原来的程序伪造替代程序的三个
时间戳(atime、ctime、mtime)、date、permission、所属用户和所属用户组。如果攻击者能够准确地使用这些优秀的
应用程序,并且在安装rootkit时行为谨慎,就会让
系统管理员很难发现。
LINUX ROOTKIT IV
前面说过,大部分rootkit是针对Linux和SunOS的,下面我们介绍一个非常典型的针对Linux系统的rootkit--Linux Rootkit IV。Linux Rootkit IV是一个开放源码的rootkit,是Lord Somer编写的,于1998年11月发布。不过,它不是第一个Linux Rootkit,在它之前有lrk、lnrk、lrk2和lrk3等Linux Rootkit。这些rootkit包括常用的rootkit组件,例如
嗅探器、日志编辑/删除工具、和
后门程序的。
经过这么多年的发展,Linux Rootkit IV功能变的越来越完善,具有的特征也越来越多。不过,虽然它的代码非常庞大,却非常易于安装和使用,只要执行make install就可以成功安装。如果你还要安装一个shadow工具,只要执行make shadow install就可以了。注意:Linux Rootkit IV只能用于Linux 2.x的内核。下面我们简单地介绍一下Linux Rootkit IV包含的各种工具,详细的介绍请参考其发布包的README文件。
隐藏入侵者行踪的程序
为了隐藏入侵者的行踪,Linux Rootkit IV的作者可谓煞费心机,编写了许多系统命令的替代程序,使用这些程序代替原有的系统命令,来隐藏入侵者的行踪。这些程序包括:
ls、find、du
这些程序会阻止显示入侵者的文件以及计算入侵者文件占用的空间。在编译之前,入侵者可以通过ROOTKIT_FILES_FILE设置自己的文件所处的位置,默认是/dev/ptyr。注意如果在编译时使用了SHOWFLAG选项,就可以使用ls -/命令列出所有的文件。这几个程序还能够自动隐藏所有名字为:ptyr、hack.dir和W4r3z的文件。
ps、top、pidof
这几个程序用来隐藏所有和入侵者相关的进程。
netstat
killall
不会杀死被入侵者隐藏的进程。
ifconfig
如果入侵者启动了
嗅探器,这个程序就阻止PROMISC标记的显示,使系统管理员难以发现网络
接口已经处于混杂模式下。
cro避ntab
隐藏有关攻击者的crontab条目。
tcpd
阻止向日志中记录某些连接
syslogd
过滤掉日志中的某些连接信息
提升本地普通用户权限的程玖序。运行
chfn,在它提示输入新的用户名时,如果用户输入rookit密码,他的权限就被提升为root。默认的rootkit密码是satori。
chsh
也是一个提升本地用户权限的程序。运行chsh,在它提示输入新的shell时,如果用户输入rootkit密码,他的权限就被提升为root。
passwd
和上面两个程序的作用相同。在提示你输入新密码时,如果输入rookit密码,权限就可以变成root。
login
允许使用任何帐户通过rootkit密码登录。如果使用root帐户登录被拒绝,可以尝试一下rewt。当使用
后门时,这个程序还能够禁止记录命令的历史记录。
这些程序为远程用户提供
后门,可以向远程用户提供inetd、rsh、ssh等服务,具体因版本而异。随着版本的升级,Linux Rootkit IV的功能也越来越强大,特征也越来越丰富。一般包括如下网络服务程序:
inetd
rshd
为攻击者提供远程shell服务。攻击者使用rsh -l rootkitpassword host command命令就可以启动一个远程root shell。
sshd
工具程序
所有不属于以上类型的程序都可以归如这个类型,它们实现一些诸如:
日志清理、报文
嗅探以及远程shell的端口绑定等功能,包括:
fix
文件属性伪造程序
linsniffer
报文嗅探器程序。
sniffchk
一个简单的bas澈h shell
脚本,检查系统中是否正有一个
嗅探器在运行。
wted
wtmp/utmp日志
编辑程序。你可以使用这个工具编辑所有wtmp或者utmp类型的文件。
z2
utmp/wtmp/lastlog日志清理工具。可以删除utmp/wtmp/lastlog日志文件中有关某个用户名的所有条目。不过,如果用于Linux系统需要手工修改其
源代码,设置日志文件的位置。
bindshell rootkit
在某个端口上绑定shell服务,默认端口是12497。为远程攻击者提供shell服务。
如何发现rootkit
很显然,只有使你的网络非常安全让攻击者无隙可乘,才能是自己的网络免受rootkit的影响。不过,恐怕没有人能够提供这个保证,但是在日常的网络管理维护中保持一些良好的习惯,能够在一定程度上减小由rootkit造成的损失,并及时发现rootkit的存在。
首先,不要在网络上使用明文传输密码,或者使用
一次性密码。这样,即使你的系统已经被安装了rootkit,攻击者也无法通过
网络监听,获得更多用户名和密码,从而避免入侵的蔓延。
使用
Tripwire和
aide等检测工具能够及时地帮助你发现攻击者的入侵,它们能够很好地提供系统完整性的检查。这类工具不同于其它的
入侵检测工具,它们不是通过所谓的攻击特征码来检测入侵行为,而是监视和检查
系统发生的变化。
Tripwire首先使用特定的特征码函数为需要监视的
系统文件和
目录建立一个特征数据库,所谓特征码函数就是使用任意的文件作为输入,产生一个固定大小的数据(特征码)的函数。入侵者如果对文件进行了修改,即使文件大小不变,也会破坏文件的特征码。利用这个数据库,
Tripwire可以很容易地发现系统的变化。而且文件的特征码几乎是不可能伪造的,系统的任何变化都逃不过
Tripwire的监视(当然,前提是你已经针对自己的系统做了准确的配置:P,关于Tripwire和
aide的使用请参考本站的相关文章)。最后,需要能够把这个特征码数据库放到安全的地方。
Rootkit 是一种特殊类型的
malware(
恶意软件)。Rootkit 之所以特殊是因为您不知道它们在做什么事情。Rootkit 基本上是无法检测到的,而且几乎不可能删除它们。虽然检测工具在不断增多,但是
恶意软件的开发者也在不断寻找新的途径来掩盖他们的踪迹。
Rootkit 的目的在于隐藏自己以及其他软件不被发现。它可以通过阻止用户识别和删除攻击者的软件来达到这个目的。Rootkit 几乎可以隐藏任何软件,包括文件服务器、
键盘记录器、Botnet 和 Remailer。许多 Rootkit 甚至可以隐藏大型的文件集合并允许攻击者在您的计算机上保存许多文件,而您无法看到这些文件。
Rootkit 本身不会像
病毒或
蠕虫那样影响计算机的运行。攻击者可以找出目标系统上的现有
漏洞。
漏洞可能包括:开放的
网络端口、未打
补丁的系统或者具有脆弱的
管理员密码的系统。在获得存在漏洞的系统的访问权限之后,攻击者便可手动安装一个 Rootkit。这种类型的偷偷摸摸的攻击通常不会触发自动执行的网络安全控制功能,例如
入侵检测系统。
找出 Rootkit 十分困难。有一些
软件包可以检测 Rootkit。这些软件包可划分为以下两类:基于签名的检查程序和基于行为的检查程序。基于签名(特征码)的检查程序,例如大多数病毒扫描程序,会检查
二进制文件是否为已知的 Rootkit。基于行为的检查程序试图通过查找一些代表 Rootkit 主要行为的隐藏元素来找出 Rootkit。一个流行的基于行为的 Rootkit 检查程序是 Rootkit Revealer.
在发现系统中存在 Rootkit 之后,能够采取的补救措施也较为有限。由于 Rootkit 可以将自身隐藏起来,所以您可能无法知道它们已经在系统中存在了多长的时间。而且您也不知道 Rootkit 已经对哪些信息造成了损害。对于找出的 Rootkit,最好的应对方法便是擦除并重新安
装系统。虽然这种手段很严厉,但是这是得到证明的唯一可以彻底删除 Rootkit 的方法。
防止 Rootkit 进入您的系统是能够使用的最佳办法。为了实现这个目的,可以使用与防范所有攻击计算机的
恶意软件一样的深入防卫策略。深度防卫的要素包括:病毒扫描程序、定期更新软件、在
主机和网络上安装
防火墙,以及
强密码策略等。
- 巧用 iLocker 清理恶意程序
iLocker 作为 iGuard 网页防篡改系统的文件驱动过滤模块所衍生出来的独立应用,是一个文件防护工具,可以在文件系统驱动层检查文件操作,根据规则对文件操作进行放行或拦截,可以灵活细致地对文件访 ...
- Django文件上传三种方式以及简单预览功能
主要内容: 一.文件长传的三种方式 二.简单预览功能实现 一.form表单上传 1.页面代码 <!DOCTYPE html> <html lang="en"> ...
- Rootkit Hunter恶意程序查杀
恶意程序,恶意代码检测 下载:https://pkgs.org/search/rkhunter 安装:rpm -ivh rkunter* Installed: #需要先安装 lsof.x86_64 ...
- Android手机安全软件的恶意程序检测靠谱吗--LBE安全大师、腾讯手机管家、360手机卫士恶意软件检测方法研究
转载请注明出处,谢谢. Android系统开放,各大论坛活跃,应用程序分发渠道广泛,这也就为恶意软件的传播提供了良好的环境.好在手机上安装了安全软件,是否能有效的检测出恶意软件呢?下边针对LBE安全大 ...
- Windows Dll Injection、Process Injection、API Hook、DLL后门/恶意程序入侵技术
catalogue 1. 引言2. 使用注册表注入DLL3. 使用Windows挂钩来注入DLL4. 使用远程线程来注入DLL5. 使用木马DLL来注入DLL6. 把DLL作为调试器来注入7. 使用c ...
- 利用ML&AI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定
利用ML&AI判定未知恶意程序 导语:0x01.前言 在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势.那么 ...
- [转载]中情局数千份机密文档泄露:各种0day工具、恶意程序应有尽有
转载:http://www.freebuf.com/news/128802.html 维基解密最近再度获取到了数千份文件——据说这些文件是来自CIA(中央情报局),文件细数了CIA所用的网络入侵工具及 ...
- 恶意程序入侵 dbuspm-session 发现了新的方法制这种恶意程序
直接从一台没服务器上把这两文件scp到当前的服务器上并替换这两个程序就ok了!!!!这种方法测试成功!!!! 出现了一个比效麻烦的事,服务器的负载正常,内存也正常,但就是很卡. 通过查找到线索:htt ...
- 谷歌添加百度翻译提示Google已将百度翻译标记为恶意程序并阻止安装,怎么办
进入谷歌浏览器的设置, 显示高级设置——隐私设置下七个选项中的第四个选项(启用针对网上诱骗和恶意软件的防护功能)把勾去掉,然后将百度翻译的CRX拖动到chrome的安装插件页面, 修改chrome的限 ...
随机推荐
- java 获取类路径
package com.jason.test; import java.io.File; import java.io.IOException; import java.net.URL; public ...
- c# winFrom Close报错 System.ObjectDisposedException:“无法访问已释放的对象。
System.ObjectDisposedException:“无法访问已释放的对象. ObjectDisposed_ObjectName_Name” 查了一下发现是 InitializeCompon ...
- CUDA 到底什么玩意
* CUDA与cuDNN * 什么是CUDA * CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA ...
- CUDA学习笔记1
最近要做三维重建就学习一下cuda的一些使用. CUDA并行变成的基本四路是把一个很大的任务划分成N个简单重复的操作,创建N个线程分别执行. CPU和GPU,有各自的存储空间: Host, CPU a ...
- 超级简单POI多sheet导出Excel实战
本章节主要基于上一章节单sheet导出的基础上进行改造实现多sheet的导出,上一章节参考地址:https://www.cnblogs.com/sunny1009/p/11437005.html 1. ...
- Git系列 —— 记一次Mac上git push时总是403的错误
问题: 今天从github上clone下一个项目,然后修改后git push时总是出现: remote:Permission to lixyou/rw-split-plugin.git defined ...
- http://www.cnblogs.com/xdp-gacl/p/4200090.html
孤傲苍狼 只为成功找方法,不为失败找借口! JavaWeb学习总结(五十)——文件上传和下载 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功 ...
- K8S学习笔记之Grafana App for Kubernetes的配置
Grafana有一套针对Kubernetes监控的APP,和Grafana-Zabbix App类似,但是配置咋一看比较麻烦,主要参数都是来自K8S. 这款APP的详细介绍请参考Grafana App ...
- 华为 S5700 交换机 批量修改端口方法
常常在配置交换机端口的时候需要将多个端口设置为相同的配置,当时各端口逐一去配置不仅慢,而且容易出错,这个时候就需要对端口进行批量设置,不仅快捷,而且避免了反复输出容易出错的情况.不同系列.不同版本交换 ...
- python自动备份阿里云数据库binlog
#coding:utf8from aliyunsdkcore import clientfrom aliyunsdkrds.request.v20140815 import DescribeBacku ...