在网络安全领域,攻击者为了隐蔽其恶意行为,常常采用多种技术隐藏进程。本文结合实际案例和公开资料,从黑客如何隐藏进程及如何发现隐藏进程两个方面进行深入分析。
一、黑客常用进程隐藏技术揭秘
(一)工具篡改与替换攻击
1. 函数钩子注入(Hook 技术)
攻击者通过注入自定义函数,劫持系统调用(如 readdir(), getdents()等),过滤掉恶意进程信息,使其不被 ps、ls 等工具显示。如Kaiji木马病毒检测与清除实战
2. 系统工具动态库或二进制文件篡改
通过修改 ps、ls等系统工具的动态链接库或二进制文件,注入过滤逻辑,隐藏恶意进程。
3. 系统工具替换
将系统原生工具(如 ps、top、netstat、lsof 等)替换为恶意版本,使这些工具自动忽略恶意进程。例如,用伪造的 ps 覆盖真实文件,隐藏指定进程。
(二)无文件进程攻击
无文件型恶意软件不依赖磁盘上的可执行文件,而是通过注入合法进程或内存驻留技术运行,导致传统基于文件的检测失效。
(三)内核级隐藏:模块劫持与驱动攻击
1. 恶意内核模块(LKM)
黑客加载自定义内核模块,修改内核进程链表,从内核层过滤进程信息,实现深度隐藏。
2. 文件系统挂载点劫持
修改 /proc、/sys 等虚拟文件系统的挂载信息,伪造进程列表。攻击者可能通过 mount -o remount 篡改挂载选项,或使用 chroot 隔离环境隐藏进程。
3. 内核模块的对抗性隐藏
部分高级 rootkit 会通过自定义信号(如 kill -41 发送的非标准信号)控制恶意内核模块,使其临时从内核模块列表中移除或篡改检测工具的输出结果,规避 lsmod 等命令的排查。
(四)进程残留与文件删除攻击
攻击者删除恶意文件后,若进程仍在运行,文件句柄仍保留在内存中,但进程依然存在并消耗资源。例如:一场与挖矿病毒的攻防实录:当常规手段全部失效后文件被删除,但进程持续运行,隐藏恶意行为。
二、如何发现隐藏进程
(一)基础工具校验:识破工具篡改
1. 校验工具完整性
- 使用 type命令检查系统工具路径,确认是否为原生路径,防止调用被替换的恶意工具。
type ps
- 使用 md5sum 校验文件哈希值,与官方值对比。
md5sum $(which ps)
- 从可信的渠道(如软件包的官方文档、原始安装介质等)获取到了正确的 MD5 值。
建议操作:可借助 BusyBox 轻量工具箱:在CentOS 7中快速安装BusyBox等独立工具集执行命令,对比系统原生工具输出。BusyBox 内置精简版 ps
、ls
等命令,其二进制文件独立于系统工具链,可规避被篡改的风险。
2. 包管理器验证
- 在 RPM 系统(如 CentOS/RHEL)中,使用 rpm -V检查文件是否被修改。
rpm -V procps-ng #若正常则无输出
- 校验结果符号含义:
符号 |
含义 |
S |
文件大小与数据库记录不一致 |
|
文件校验和不一致(可能被修改) |
|
文件修改时间与数据库记录不一致 |
|
文件模式或权限与数据库记录不一致 |
3. 常见命令及所属包
命令 |
所属 RPM 包 |
用途 |
find |
findutils |
文件搜索工具 |
|
coreutils |
文件列表显示 |
|
net-tools |
网络连接和端口查看 |
|
procps-ng |
进程查看工具 |
|
procps-ng |
系统资源监控 |
|
coreutils |
磁盘空间统计 |
|
net-tools |
网络接口配置 |
|
iputils |
网络连通性测试 |
|
openssh-clients |
SSH 客户端 |
|
systemd |
系统服务管理(CentOS 7+) |
4. 异常处理
若发现命令被篡改(rpm -V 有输出),可通过以下方式恢复:
# 恢复被篡改的 procps-ng 包
yum reinstall procps-ng -y
# 恢复所有被修改的包(谨慎使用)
yum reinstall $(rpm -Va | awk '{print $NF}' | xargs rpm -qf | sort -u) -y
(二)无文件进程检测
1. 使用 unhide 工具
unhide是专门检测隐藏进程的开源工具,支持多种检测技术。
unhide proc
该命令扫描 /proc文件系统,识别未被常规工具列出的进程。
2. 检查已删除但仍运行的文件
使用 lsof 查找被删除但仍被进程打开的文件:
lsof | grep deleted
这类文件可能是无文件攻击的一部分。
3. 恢复被删除的文件
通过 /proc/<pid>/fd/<fd>恢复文件:
cp /proc/<pid>/fd/<fd> /tmp/recovered_file
方便取证和分析恶意代码。
(三)内核级威胁排查
1. 检测恶意内核模块
- 使用 lsmod 查看已加载模块,过滤系统必需模块,排查可疑模块:
lsmod | grep -vE "loop|virtio|scsi"
- 若需移除可疑模块,执行:
rmmod suspicious_module
- 若模块被隐藏,可尝试发送特定信号:
kill -53 0 ##-53 0 切换当前终端所有内核驱动的可见状态,该操作依赖内核模块的信号处理逻辑,非通用检测方
- 结合 dmesg查看内核日志,发现异常加载信息。
2. 挂载点与文件系统检查
- 查看当前挂载点,排查非标准文件系统:
mount | grep -vE "ext4|xfs|tmpfs"
- 强制卸载可疑挂载点:
umount /path/to/mountpoint -l
参考链接
https://research.qianxin.com/archives/1898
https://forum.butian.net/share/3970
-End-
如果觉得我的分享有用
[点赞+分享+关注]
原文始发于微信公众号(网络个人修炼):如何识别 Linux 中的隐藏进程?一篇讲解黑客常用手法与检测手段
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论