Linux隐藏进程检测排查后门:Linux隐藏进程检测指南

为什么隐藏进程是后门信号?

当攻击者成功入侵一台Linux服务器后,往往会通过加载内核模块(LKM)、劫持系统调用或者修改ps等命令来隐藏恶意进程。
普通的ps aux可能完全看不到异常,但系统资源却持续异常——这就是需要专门手段检测隐藏进程的原因。
本文从零开始,教你用原生工具和开源软件一步步揪出这些“隐身”进程。

准备工作:环境与权限

开始排查前先确认以下条件:

  • SSH登录权限:使用具有sudo权限的账号,因为部分检测命令需要读取/proc目录或安装工具。
  • 基础工具链:确保系统已安装psnetstatlsofawkgrep,一般默认都有。
  • 可用安装源:如果使用unhide工具,Debian/Ubuntu系可直接apt install unhide;CentOS/RHEL需要先启用EPEL源,然后yum install unhide。r> 如果无法联网,可以手动编译unhide源码(稍复杂,建议优先使用在线安装)。

核心操作:三步检测法

第一步:对比ps列表与/proc目录

正常Linux系统中,每个进程都有一个对应的/proc/PID目录。
如果某个进程被隐藏,ps看不到,但通过遍历/proc可能发现“幽灵”PID。
执行以下命令:

# 列出ps输出的PID(去重)
ps -eo pid | tail -n +2 | sort -n > ps_pids.txt
# 列出/proc下所有数字目录(即所有PID)
ls -1 /proc/ | grep -E '^[0-9]+$' | sort -n > proc_pids.txt
# 找出只在/proc中出现,但ps没有的PID
comm -23 proc_pids.txt ps_pids.txt

结果分析

  • 如果差集列表不为空,这些PID大概率属于隐藏进程内核线程。内核线程通常有特定的父进程(如kthreadd),可以通过/proc/PID/status中的Name字段判断。
  • 可疑的隐藏进程通常会绑定定时任务、监听未知端口或频繁读写木马文件。

第二步:使用unhide工具深度检测

unhide是一个专门检测隐藏进程、端口和系统调用的工具。
运行后会执行多种检测技术(如对比ps/proc、检查/sys、通过系统调用遍历等)。
执行:

sudo unhide proc

输出示例:

Unhide 20230512
[...]
Found hidden process: 12345
Process name: [可疑名称如 cron ]
Command: /tmp/.x /...

可选检测类型

  • unhide sys:检测是否有隐藏系统调用(高级后门常用)。
  • unhide port:检测隐藏端口(监听在非标准端口但不被netstat显示)。
  • unhide brute:暴力遍历PID范围(耗时长,慎用)。

第三步:检查文件句柄与网络连接

找到可疑PID后,立即查看其打开的文件和网络连接:

# 查看该进程启动命令行
cat /proc/12345/cmdline | strings
# 查看该进程所有打开的文件描述符
ls -la /proc/12345/fd/
# 查看网络连接(需root)
lsof -i -P -n | grep 12345
# 或使用ss/pnetstat:
netstat -tunap 2>/dev/null | grep 12345

重点检查

  • 是否有大量连接指向陌生IP。
  • 是否打开可疑脚本文件(如.sh.py.elf)或动态链接库(.so)。
  • 如果进程名被伪装成常见系统服务(如[kworker][watchdog]),但实际路径在/tmp/dev/shm,几乎可确定为后门。

常见问题与避坑指南

Q1:unhide输出大量内核线程怎么办?
内核线程(如[kthreadd][ksoftirqd])在/proc中可见但不会被普通ps列出,是正常现象。可以用ps -eo pid,comm --ppid 2过滤出所有内核线程,再与unhide结果比对剔除。

Q2:为什么comm -23结果为空?
可能ps版本差异导致输出格式不同,建议先ps -eo pid > file并检查是否有空行或标题。改用awk '{print $1}'更稳妥。

Q3:检测过程中系统负载飙升?
unhide brute模式会大量遍历PID,若在生产服务器使用,建议先使用proc模式,负载较低。如果必须使用brute,最好在业务低峰期执行。

Q4:发现隐藏进程后直接kill -9行吗?
不行!很多后门会注册进程重启(crontab、systemd定时器、驻留内存)。应先记录PID、命令行、文件路径,然后保留现场,用cp备份相关文件,再排查其启动方式(检查cron、systemd服务、用户级启动脚本)。确认无害后再kill -9并清理文件。

避坑要点

  • 不要只依赖单一检测方式,unhide也有一定误报(如某些Legacy内核线程)。
  • 部分rootkit会同时篡改/proc读取函数,此时/proc目录也可能被过滤。这种情况需结合内存取证工具(如LiME、Volatility)或重启后CD启动扫描。
  • 检测前不要重启服务器,否则攻击者创建的临时隐藏进程会消失,线索中断。

验证与后续处理

完成上述步骤后,执行以下确认结果是否已被清除:

# 再次对比ps与/proc
comm -23 <(ls -1 /proc/ | grep -E '^[0-9]+$' | sort) <(ps -eo pid | tail -n +2 | sort) | wc -l
# 重新运行unhide proc,确认无输出
test -z "$(sudo unhide proc 2>&1 | grep 'Found hidden process')" && echo "未发现隐藏进程"

如果一切正常,还需检查后门入口:

  • 排查/etc/crontab/var/spool/cron/下所有用户的定时任务。
  • 检查systemctl list-unit-files | grep enabled中可疑服务。
  • 使用rkhunterchkrootkit做全盘扫描。
  • 修改所有用户的密码、SSH密钥,并升级易受攻击的软件包。

最后,建议将检测脚本加入定时任务(如每天凌晨),结合日志告警,做到后门早发现、早处理。
如果你按照本文步骤掌握了Linux隐藏进程检测方法,下次再遇到服务器卡慢、CPU异常,就能有条理地排查,而不是盲目重装系统了。

分享到:
上一篇
服务器挖矿进程彻底查杀步骤:从发现到根除的完整指南
下一篇
网站恶意代码批量清理方法:零基础也能操作的完整教程
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意