应急响应——让Linux下的隐藏手段(Rootkit)无所遁形
字数 1748 2025-08-20 18:18:10
Linux Rootkit隐藏手段分析与应急响应指南
0x01 前言
本文全面总结Linux系统下黑灰产及恶意软件常用的Rootkit隐藏技术,涵盖五种主要隐藏手段的原理、实现方式、排查方法和恢复措施:
- 通过文件挂载实现隐藏
- 通过用户层劫持链接器或链接库实现隐藏
- 通过劫持系统环境变量实现隐藏
- 通过内核层劫持实现隐藏
- 通过eBPF完成的动态劫持内核逻辑实现隐藏
0x02 Rootkit隐藏技术详解
一、通过挂载/proc/pid实现pid隐藏
原理
- ps、netstat等命令通过遍历/proc目录获取进程信息
- 攻击者将目标pid对应的/proc/pid目录挂载到隐藏目录
实现方法
mount -o bind /home/.hidden /proc/9212
现象特征
- netstat显示网络连接但PID和Programname为空
- ps命令无法显示目标进程
排查方法
- 检查挂载信息:
cat /proc/
$$
/mountinfo
- 检查/proc目录异常:
ls -lai /proc
恢复方法
umount /proc/9212
二、用户层劫持加载器/连接器隐藏进程
原理
Linux动态库加载顺序:
- LD_PRELOAD环境变量指定的库
- /etc/ld.so.preload文件指定的库
- LD_LIBRARY_PATH环境变量路径
- /lib64等系统库路径
攻击者常用三种劫持方式:
- 通过LD_PRELOAD劫持
- 通过/etc/ld.so.preload劫持
- 替换关键系统库如libc.so.6
实现示例(/etc/ld.so.preload劫持)
- 编译恶意.so文件,重写readdir/readdir64函数
- 修改/etc/ld.so.preload添加恶意库路径
- 特定进程名称不返回结果
现象特征
- netstat显示连接但无PID和进程名
- ps命令完全无法发现目标进程
排查方法
- 检查环境变量:
echo $LD_PRELOAD
- 检查预加载文件:
cat /etc/ld.so.preload
- 检查动态链接器完整性:
readelf -l /bin/ps | grep interpreter
ls -l /lib64/ld-*
rpm -Vf /lib64/ld-2.17.so
快速排查技巧
- 检查命令依赖库:
ldd /usr/bin/ps
- 使用strace追踪:
strace -o result.txt -e trace=file -f ps
恢复方法
- 清除LD_PRELOAD:
unset LD_PRELOAD
- 清理/etc/ld.so.preload
- 修复被篡改的系统库
绕过隐藏技巧
- 强制指定LD_PRELOAD:
LD_PRELOAD=/lib64/libc.so.6 ps
- 使用静态编译工具如busybox
三、劫持shell环境实现隐藏
原理
- 修改/etc/profile.d/下的shell脚本
- 劫持环境变量覆盖常见命令(ps/ls/lsof等)
实现方法
- 在/etc/profile.d/添加恶意脚本
- 重定义命令别名或函数
现象特征
- 交互式shell下命令行为异常
- 特定文件/进程无法显示
排查方法
strace -e trace=file ls
恢复方法
- 检查并清理/etc/profile.d/可疑脚本
- 重新加载配置:
source /etc/profile
四、LKM内核劫持实现隐藏
原理
通过内核模块(LKM)劫持系统调用:
- 修改syscall表中的函数指针
- 常见劫持目标:getdents/getdents64/kill等
典型Rootkit案例
- Diamorphine(TeamTNT使用)
- Reptile(针对韩国公司)
- Adore-ng(APT41使用)
- Skidmap(针对Redis)
实现示例(Diamorphine)
- 编译加载内核模块
- 信号控制隐藏/显示:
kill -31 PID # 隐藏进程
kill -63 0 # 显示模块
排查方法
- 使用rootkit检测工具:
./chkrootkit | grep Warning
- 加载检测模块检查syscall表
- 检查内核日志:
dmesg | grep -i 'module'
- 检查/sys/module目录:
ls /sys/module
恢复方法
- 使用工具自带卸载功能
- 反向劫持恢复syscall表
- 计算原始函数地址:
cat /boot/System.map-$(uname -r) | grep sys_getdent
五、eBPF实现进程隐藏
原理
- 通过eBPF程序hook系统调用
- 篡改getdent/getdent64返回结果
实现示例
- 编写eBPF程序修改getdent64
- 加载运行隐藏程序
排查方法
- 检查可疑进程参数
- 分析异常进程行为
恢复方法
终止可疑eBPF相关进程
0x03 总结与最佳实践
综合排查流程
- 从用户层到内核层逐级排查
- 结合静态分析与动态追踪
- 使用多种工具交叉验证
推荐工具
- chkrootkit:rootkit检测
- Rkhunter:rootkit扫描
- strace:系统调用追踪
- busybox:静态编译工具集
关键防御措施
- 定期校验系统关键文件完整性
- 监控/proc、/sys等特殊目录变更
- 限制非特权用户的模块加载能力
- 实施最小权限原则
通过深入理解Rootkit技术原理,建立系统化的排查思路,结合自动化工具与手动分析,可有效应对Linux系统下的高级隐藏威胁。