Linux系统安全之Rootkit原理解析与检测实践

简介: 本章将首先介绍Linux Rootkit的分类和原理,然后介绍用于检测Rootkit的工具和方法。

Rootkit是一组计算机软件的合集,通常是恶意的,它的目的是在非授权的情况下维持系统最高权限(在Unix、Linux下为root,在Windows下为Administrator)来访问计算机。与病毒或者木马不同的是,Rootkit试图通过隐藏自己来防止被发现,以到达长期利用受害主机的目的。Rootkit和病毒或者木马一样,都会对Linux系统安全产生极大的威胁。

本章将首先介绍Linux Rootkit的分类和原理,然后介绍用于检测Rootkit的工具和方法。接下来,本章将介绍病毒木马扫描技术。Webshell作为恶意代码的一种例子,也可以看做是一种特殊形式的木马,它以Web服务器运行环境为依托,实现黑客对受害主机长期隐蔽性的控制。在本章的最后部分,也对这种恶意代码的检测方法做了讲解。

1.1 Rootkit分类和原理

Rootkit的主要功能包括:

隐藏进程

隐藏文件

隐藏网络端口

后门功能

键盘记录器

Rootkit主要分为以下2种:

用户态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。

更加隐蔽,更难以检测,通常包含后门。

在这里需要指出的是,用于获得root权限的漏洞利用工具不是Rootkit;用于获得root权限的漏洞利用工具被称为提权工具。通常情况下,黑客攻击的动作序列为:

(1)定位目标主机上的漏洞,这一般是通过网络扫描和Web应用扫描工具来实现的,使用的工具包括但不限于《Linux系统安全:纵深防御、安全扫描与入侵检测》中《第10章 Linux安全扫描工具》中提到的相关工具。

(2)利用漏洞提权。在步骤(1)中获得的权限可能不是root超级用户权限,此时黑客通过系统中的本地提权漏洞非法的获得root权限。

(3)提权成功后安装Rootkit。

(4)擦除痕迹,通过删除本地日志、操作历史等擦除痕迹。

(5)长期利用被植入了Rootkit的主机。黑客可能会把这些植入了Rootkit的主机作为挖矿机、发动DDoS分布式拒绝服务攻击的僵尸网络等等。

1.2 可加载内核模块

Linux是单内核(monolithic kernel),即操作系统的大部分功能都被称为内核,并在特权模式下运行。通过可加载内核模块可以在运行时动态地更改Linux。可动态更改是指可以将新的功能加载到内核或者从内核去除某个功能。

加载一个模块使用如下命令(只有root有此权限):

#insomod module.o

使用可加载内核模块的优点有:

可以让内核保持比较小的尺寸,不至于内核过大过臃肿。

动态加载,避免重启系统。

常常用于加载驱动程序。

模块加载之后,与原有的内核代码地位等同。

但是,在带来便利性的同时,可加载内核模块也带来了如下的风险:

可能会被恶意利用在内核中注入恶意代码,例如12.1节中提到的内核态Rootkit。

可能会导致一定的性能损失和内存开销。

代码不规范的模块可能会导致内核崩溃、系统宕机。

1.3 利用Chkrootkit检查Rootkit

Chkrootkit是本地化的检测rootkit迹象的安全工具,其官方网站是http://www.chkrootkit.org。Chkrootkit包含:

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所示:

image.png

图1 Chkrootkit可识别的Rootkit

1.3.1 Chkrootkit安装

使用如下命令安装Chkrootkit:

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 #编译安装

1.3.2 执行Chkrootkit

经过1.3.1中的安装步骤后,在/opt/chkrootkit-0.52/目录下存储了编译后的二进制文件和相关脚本。执行Rootkit检查的命令如下:

cd /opt/chkrootkit-0.52
./chkrootkit

输出结果中可能包含的状态字段如下:

“INFECTED”:检测出了一个可能被已知rootkit修改过的命令。

“not infected”:未检测出任何已知的rootkit指纹。

“not tested”:未执行测试--在以下情形中发生这种情况:

        这种测试是特定于某种操作系统的。

        这种测试依赖于外部的程序,但这个程序不存在。

给定了一些特定的命令行选项(例如,-r)。
“not found”:要检测命令对象不存在。

“Vulnerable but disabled”:命令虽然被感染,但没有在使用中(例如,非运行状态或者在inetd.conf被注释掉了)

1.4 利用Rkhunter检查Rootkit

Rkhunter是Rootkit Hunter(Rootkit狩猎者)的缩写,是另一款常用的开源Rootkit检测工具。

Rkhunter的官方网站是http://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-O rkhunter-1.4.6.tar.gz #下载rkhunter源码包
tar zxf rkhunter-1.4.6.tar.gz #解压rkhunter源码包
cd rkhunter-1.4.6 #进入解压后目录
./installer.sh --install #安装rkhunter

1.4.2 执行Rkhunter

在完成1.4.1的安装步骤后,Rkhunter的二进制可执行文件被存储在/usr/local/bin/rkhunter路径。

执行以下命令进行系统扫描:

/usr/local/bin/rkhunter -c

执行完成后,扫描日志会写入/var/log/rkhunter.log文件中。重点关注该文件最后部分的内容即可,如下所示:

[22:12:42] System checks summary #系统检测结果汇总开始
[22:12:42] =====================
[22:12:42]
[22:12:42] File properties checks... #文件属性检测
[22:12:42] Required commands check failed
[22:12:42] Files checked: 130
[22:12:43] Suspect files: 3 #可疑的文件数量,如该数量不为0,则表示发现可疑文件,再从该日志中查找Warning的相关行进行详细分析
[22:12:43]
[22:12:43] Rootkit checks...
[22:12:43] Rootkits checked : 434
[22:12:43] Possible rootkits: 0 #可能的rootkit数量,如该数量不为0,则表示发现可疑文件,再从该日志中查找Warning的相关行进行详细分析
[22:12:43]
[22:12:43] Applications checks...
[22:12:43] All checks skipped
[22:12:43]
[22:12:43] The system checks took: 1 minuteand 47 seconds #系统检测花费的时间
[22:12:43]

[22:12:43]Info: End date is Mon Feb 11 22:12:43 CST 2019 #系统检测结束的时间

1.5总结

Linux Rootkit作为黑客隐藏其恶意行为的关键技术,具有很强的隐蔽性和迷惑性。本文讲的两种工具,可以在一定程度上识别出常见Rootkit。对于新型的Rootkit,可以使用独立编译的Busybox等二进制进行对比分析。

文章来源:微信公众号 新钛云服

目录
相关文章
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
10月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
3437 57
|
机器学习/深度学习 算法 数据挖掘
解析静态代理IP改善游戏体验的原理
静态代理IP通过提高网络稳定性和降低延迟,优化游戏体验。具体表现在加快游戏网络速度、实时玩家数据分析、优化游戏设计、简化更新流程、维护网络稳定性、提高连接可靠性、支持地区特性及提升访问速度等方面,确保更流畅、高效的游戏体验。
308 22
解析静态代理IP改善游戏体验的原理
|
机器学习/深度学习 数据可视化 PyTorch
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
790 7
深入解析图神经网络注意力机制:数学原理与可视化实现
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
945 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
1464 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
12月前
|
传感器 人工智能 监控
反向寻车系统怎么做?基本原理与系统组成解析
本文通过反向寻车系统的核心组成部分与技术分析,阐述反向寻车系统的工作原理,适用于适用于商场停车场、医院停车场及火车站停车场等。如需获取智慧停车场反向寻车技术方案前往文章最下方获取,如有项目合作及技术交流欢迎私信作者。
953 2
|
缓存 边缘计算 安全
阿里云CDN:全球加速网络的实践创新与价值解析
在数字化浪潮下,用户体验成为企业竞争力的核心。阿里云CDN凭借技术创新与全球化布局,提供高效稳定的加速解决方案。其三层优化体系(智能调度、缓存策略、安全防护)确保低延迟和高命中率,覆盖2800+全球节点,支持电商、教育、游戏等行业,帮助企业节省带宽成本,提升加载速度和安全性。未来,阿里云CDN将继续引领内容分发的行业标准。
672 7
|
Java 数据库 开发者
详细介绍SpringBoot启动流程及配置类解析原理
通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
1848 12