Rootkit是一组计算机软件的合集,通常是恶意的,它的目的是在非授权的情况下维持系统最高权限(在Unix、Linux下为root,在Windows下为Administrator)来访问计算机。与病毒或者木马不同的是,Rootkit试图通过隐藏自己来防止被发现,以到达长期利用受害主机的目的。Rootkit和病毒或者木马一样,都会对Linux系统安全产生极大的威胁。
- 隐藏进程
- 隐藏文件
- 隐藏网络端口
- 后门功能
- 键盘记录器
- 用户态Rootkit(User-mode Rootkit):一般通过覆盖系统二进制和库文件来实现。它具有如下的特点:
- 它通常替换的二进制文件为ps、netstat、du、ping、lsof、ssh、sshd等,例如已知的Linux t0rn rootkit(https://www.sans.org/security-resources/malwarefaq/t0rn-rootkit,访问日期:2019年2月11日)替换的文件就包括ps(用于隐藏进程)、du(用于隐藏特定文件和目录)。
- 它也可能使用环境变量LD_PRELOAD和/etc/ld.so.preload、/etc/ld.so.conf等加载黑客自定义的恶意库文件来实现隐藏。例如,beurk(https://github.com/unix-thrust/beurk)这个Rootkit正是使用了这种技术。
- 它还可能直接在现有进程中加载恶意模块来实现隐藏。例如,在GitHub上托管的这个项目https://github.com/ChristianPapathanasiou/apache-rootkit就是在Apache进程中注入恶意动态加载库来实现远程控制和隐藏的Rootkit。
- 它不依赖于内核(Kernel-independent)。
- 需要为特定的平台而编译。
-
内核态Rootkit(Kernel-mode Rootkit):通常通过可加载内核模块(LoadableKernel Module,LKM)将恶意代码被直接加载进内核中。它具有如下的特点:
-
它直接访问/dev/{k,}mem。
-
更加隐蔽,更难以检测,通常包含后门。
(1)定位目标主机上的漏洞,这一般是通过网络扫描和Web应用扫描工具来实现的,使用的工具包括但不限于《Linux系统安全:纵深防御、安全扫描与入侵检测》中《第10章 Linux安全扫描工具》中提到的相关工具。
(2)利用漏洞提权。在步骤(1)中获得的权限可能不是root超级用户权限,此时黑客通过系统中的本地提权漏洞非法的获得root权限。
(3)提权成功后安装Rootkit。
(4)擦除痕迹,通过删除本地日志、操作历史等擦除痕迹。
(5)长期利用被植入了Rootkit的主机。黑客可能会把这些植入了Rootkit的主机作为挖矿机、发动DDoS分布式拒绝服务攻击的僵尸网络等等。
#insomod module.o
- 可以让内核保持比较小的尺寸,不至于内核过大过臃肿。
- 动态加载,避免重启系统。
- 常常用于加载驱动程序。
- 模块加载之后,与原有的内核代码地位等同。
- 可能会被恶意利用在内核中注入恶意代码,例如12.1节中提到的内核态Rootkit。
- 可能会导致一定的性能损失和内存开销。
- 代码不规范的模块可能会导致内核崩溃、系统宕机。
-
chkrootkit:这是一个shell脚本,用于检查系统二进制文件是否被rootkit修改。
-
ifpromisc.c:检查网络端口是否处于混杂模式(promiscuousmode)。
-
chklastlog.c:检查lastlog是否删除。
-
chkwtmp.c:检查wtmp是否删除。
-
check_wtmpx.c:检查wtmpx是否删除(仅适用于Solaris)
-
chkproc.c:检查可加载内核模块木马的痕迹。
-
chkdirs.c:检查可加载内核模块木马的痕迹。
-
strings.c:快捷的字符串替换。
-
chkutmp.c:检查utmp是否删除。
Chkrootkit可以识别的Rootkit如图1所示:
图1 Chkrootkit可识别的Rootkit
cd /opt #进入/opt目录
wgetftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz #下载源码包
2019-02-11 11:25:35 (17.9 KB/s) -‘chkrootkit.tar.gz’ saved [40031] #完成下载源码包
wgetftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.md5 #下载md5校验文件
2019-02-11 11:25:53 (3.18 MB/s) -‘chkrootkit.md5’ saved [52] #完成下载md5校验文件
md5sum chkrootkit.tar.gz #计算源码包md5
0c864b41cae9ef9381292b51104b0a04 chkrootkit.tar.gz #md5计算结果
cat chkrootkit.md5 #查看md5校验文件内容
0c864b41cae9ef9381292b51104b0a04 chkrootkit.tar.gz #和已下载源码包md5对比,文件完整性校验通过
tar zxvf chkrootkit.tar.gz #解压源码包
cd chkrootkit-0.52 #进入源码包解压目录make sense #编译安装
cd /opt/chkrootkit-0.52
./chkrootkit
- “INFECTED”:检测出了一个可能被已知rootkit修改过的命令。
- “not infected”:未检测出任何已知的rootkit指纹。
- “not tested”:未执行测试–在以下情形中发生这种情况:
这种测试是特定于某种操作系统的。
这种测试依赖于外部的程序,但这个程序不存在。
- “not found”:要检测命令对象不存在。
- “Vulnerable but disabled”:命令虽然被感染,但没有在使用中(例如,非运行状态或者在inetd.conf被注释掉了)
Rkhunter是Rootkit Hunter(Rootkit狩猎者)的缩写,是另一款常用的开源Rootkit检测工具。
Rkhunter的官方网站是https://rkhunter.sourceforge.net。
1.4.1 Rkhunter安装
使用如下命令安装Rkhunter:
cd/opt#进入/opt目录
wgethttps://sourceforge.net/projects/rkhunter/files/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz/download-Orkhunter-1.4.6.tar.gz#下载rkhunter源码包
tarzxfrkhunter-1.4.6.tar.gz#解压rkhunter源码包
cdrkhunter-1.4.6#进入解压后目录
./installer.sh --install #安装rkhunter
1.4.2 执行Rkhunter
在完成1.4.1的安装步骤后,Rkhunter的二进制可执行文件被存储在/usr/local/bin/rkhunter路径。
执行以下命令进行系统扫描:
/usr/local/bin/rkhunter -c
[ ] System checks summary
[ ] =====================
[ ]
[ ] File properties checks...
[ ] Required commands check failed
[checked: 130 ] Files
[3 ] Suspect files:
[ ]
[ ] Rootkit checks...
[checked : 434 ] Rootkits
[0 ] Possible rootkits:
[ ]
[ ] Applications checks...
[ ] All checks skipped
[ ]
[1 minuteand 47 seconds ] The system checks took:
[ ]
[22:12:43]Info: End date is Mon Feb 11 22:12:43 CST 2019 #系统检测结束的时间
Linux Rootkit作为黑客隐藏其恶意行为的关键技术,具有很强的隐蔽性和迷惑性。本文讲的两种工具,可以在一定程度上识别出常见Rootkit。对于新型的Rootkit,可以使用独立编译的Busybox等二进制进行对比分析。
本文主要内容摘要自胥峰新书《Linux系统安全:纵深防御、安全扫描与入侵检测》。通过学习《Linux系统安全:纵深防御、安全扫描与入侵检测》,可以系统性、整体化的构建Linux安全体系。
作者胥峰简介:
新钛云服首席解决方案架构师,十二年运维经验,曾长期在盛大游戏担任运维架构师,参与盛大游戏多款大型端游和手游的上线运维。资深Linux专家,拥有工信部高级信息系统项目管理师资格,著有畅销书《Linux系统安全:纵深防御、安全扫描与入侵检测》、《Linux运维最佳实践》,译著《DevOps:软件架构师行动指南》是DevOps领域的经典著作。
掌握保障信息系统安全的方法,推荐阅读《Linux系统安全:纵深防御、安全扫描与入侵检测》。
-
资深Linux系统安全/运维专家撰写
-
腾讯、阿里技术专家高度评价
-
从纵深防御、安全扫描、入侵检测3个维度阐释构建安全Linux系统的艺术