Linux进程名伪装:黑客如何隐藏恶意进程逃过安全检测
Linux进程名伪装技术(MITRE ATT&CK T1036)通过prctl和内存覆写修改/proc/pid/comm和cmdline,将恶意进程伪装成kworker等内核线程,绕过ps/top监控。安全分析师可使用eBPF工具(如Kunai)检测真实命令行与显示不一致的行为。本文提供PoC代码、检测方法和缓解建议。
🔍 High 其他
攻击者利用Linux进程名称存储机制,通过修改/proc/pid/comm和/proc/pid/cmdline,将恶意进程伪装成内核线程(如kworker)。PoC演示了使用prctl和直接覆写argv/environ内存区域的技术,可绕过ps、top等常规监控,但eBPF工具(如Kunai)能捕获真实命令行,发现伪装行为。
来源:SANS ISC | 2026-06-24 | 原文链接
🔍 关键发现
- Linux进程名存储于/proc/pid/comm(默认ps/top读取)和/proc/pid/cmdline(ps aux读取),均可被篡改
- 攻击者通过prctl(PR_SET_NAME)修改comm,通过覆写argv/environ连续内存块修改cmdline,最大15字符限制仅限comm
- eBPF工具Kunai可记录原始命令行,但无法获取实际可执行文件路径,形成检测盲区
- Windows上可通过修改PEB中的ImagePathName/CommandLine(用户态),但EPROCESS中的ImageFileName由内核保护不可篡改
⚔️ 攻击链分析
1. 攻击者编写或植入恶意进程,使用prctl设置comm为类似[kworker/0:1]的合法内核线程名;2. 调用自定义函数覆写argv/environ区域,使cmdline显示为伪装字符串;3. 恶意进程运行后,ps/top显示为内核线程,安全分析师难以察觉;4. 在执行敏感操作(如C2通信、提权)时继续隐藏进程名。
🚩 失陷指标 (IOC)
/proc//comm 内容与 /proc//cmdline 或者实际可执行文件路径不一致进程名类似 [kworker/*] 或 [kthreadd] 等内核线程格式,但属于普通用户权限
🛡️ 缓解建议
- ✅ 部署eBPF或审计框架(如Kunai、Falco)监控/proc/pid/cmdline与实际可执行文件路径的差异
- ✅ 定期检查/proc文件系统,对比/proc/pid/exe软链接指向的可执行文件与comm/cmdline内容
- ✅ 启用进程创建审计日志(如auditd),记录execve系统调用的完整参数
- ✅ 限制非root用户修改/proc/self/comm(默认允许),考虑内核参数kernel.dmesg_restrict等
涉及漏洞:[]
⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。
🤖 常见问题解答(FAQ)
❓ 如何检测Linux进程名伪装?
使用eBPF工具如Kunai对比execve时的真实命令行与/proc/pid/cmdline,或手动检查/proc/pid/exe与comm是否匹配。
❓ Windows上也能实现类似伪装吗?
可以,通过修改PEB中的ImagePathName和CommandLine(用户态),但内核态EPROCESS.ImageFileName由内存管理器保护,无法篡改。
❓ 伪装后的进程能否被SELinux检测?
SELinux基于进程安全上下文,不直接检查进程名,但可通过域转换规则限制;进程伪装不会改变上下文,但可能绕过基于名称的白名单。