分析Linux内核Rootkit 是做什么的?
概述
Linux内核Rootkit在ring 0层级运行,通过修改内核数据结构来隐藏进程、文件、网络连接和内核模块,从而逃避用户空间工具的检测。检测方法包括内存取证(使用Volatility3分析物理内存转储)和交叉视图分析(比较/proc、/sys和内核数据结构之间的不一致性)。本技能涵盖如何使用Volatility3 Linux插件检测系统调用表挂钩、隐藏的内核模块和修改过的函数指针,并辅以使用rkhunter和chkrootkit进行实时系统扫描。
何时使用
- 调查需要分析Linux内核Rootkit的安全事件时
- 为此领域构建检测规则或威胁狩猎查询时
- SOC分析师需要针对此类分析的结构化流程时
- 验证相关攻击技术的安全监控覆盖范围时
前提条件
- 已安装Volatility3(
pip install volatility3) - Linux内存转储(通过LiME、AVML或/proc/kcore获取)
- 与目标内核版本匹配的Volatility3 Linux符号表(ISF)
- 用于实时系统扫描的rkhunter和chkrootkit工具
- 用于对比的已知良好的内核映像
步骤
第1步:获取内存转储
使用LiME内核模块或AVML(云实例)捕获Linux物理内存。
第2步:使用Volatility3分析
运行linux.check_syscall、linux.lsmod、linux.hidden_modules和linux.check_idt插件以检测Rootkit构件。
第3步:交叉视图分析
比较来自/proc/modules、lsmod和/sys/module的模块列表,以识别在某个视图中隐藏但在另一个视图中存在的模块。
第4步:实时系统扫描
运行rkhunter和chkrootkit以检测已知的Rootkit签名、可疑文件和修改过的系统二进制文件。
预期输出
包含检测到的系统调用挂钩、隐藏的内核模块、修改过的IDT条目、可疑的/proc不一致性以及rkhunter发现的JSON报告。
示例输出
$ sudo python3 rootkit_analyzer.py --memory /evidence/linux-mem.lime --profile Ubuntu2204
Linux内核Rootkit分析报告
=====================================
内存映像: /evidence/linux-mem.lime
内核版本: 5.15.0-91-generic (Ubuntu 22.04 LTS)
分析时间: 2024-01-18 09:15:32 UTC
[+] 扫描系统调用表以查找挂钩...
系统调用表基址: 0xffffffff82200300
检查的系统调用总数: 449
检测到被挂钩的系统调用:
┌─────────┬──────────────────┬──────────────────────┬──────────────────────┐
│ NR │ 系统调用 │ 预期地址 │ 当前地址 │
├─────────┼──────────────────┼──────────────────────┼──────────────────────┤
│ 0 │ sys_read │ 0xffffffff8139a0e0 │ 0xffffffffc0a12000 │
│ 2 │ sys_open │ 0xffffffff8139b340 │ 0xffffffffc0a12180 │
│ 78 │ sys_getdents64 │ 0xffffffff813f5210 │ 0xffffffffc0a12300 │
│ 62 │ sys_kill │ 0xffffffff8110c4a0 │ 0xffffffffc0a12480 │
└─────────┴──────────────────┴──────────────────────┴──────────────────────┘
警告: 检测到4个系统调用挂钩 - 确认存在Rootkit行为
[+] 检查隐藏的内核模块...
已加载的模块 (lsmod): 147
kobject列表中的模块: 149
隐藏的模块:
- "netfilter_helper" at 0xffffffffc0a10000 (大小: 12288)
- "kworker_sched" at 0xffffffffc0a14000 (大小: 8192)
[+] 扫描/proc中的不一致性...
task_struct列表中的进程: 234
/proc中可见的进程: 231
隐藏的进程:
- PID 31337 命令: "[kworker/0:3]" (伪装成内核线程)
- PID 31442 命令: "rsyslogd" (伪装的,真正的rsyslogd是PID 892)
- PID 31500 命令: "" (未命名进程)
[+] 检查IDT条目...
扫描的IDT条目: 256
修改的条目: 0 (正常)
[+] 运行rkhunter扫描...
检查已知Rootkit: 68个变种已检查
Diamorphine rootkit: 警告 - 签名匹配
系统二进制文件检查:
/usr/bin/ps: 已修改 (SHA-256不匹配)
/usr/bin/netstat: 已修改 (SHA-256不匹配)
/usr/bin/ls: 已修改 (SHA-256不匹配)
/usr/sbin/ss: 正常
[+] 网络分析...
隐藏的连接 (不在/proc/net/tcp中):
已建立 0.0.0.0:0 -> 198.51.100.47:4443 (PID 31337)
已建立 0.0.0.0:0 -> 198.51.100.47:8080 (PID 31442)
总结:
Rootkit类型: 可加载内核模块 (LKM)
可能家族: Diamorphine变种
系统调用挂钩: 4个 (read, open, getdents64, kill)
隐藏模块: 2个
隐藏进程: 3个
隐藏连接: 2个 (C2: 198.51.100.47)
修改的二进制文件: 3个 (/usr/bin/ps, netstat, ls)
风险等级: 严重