unhide 是什么
unhide 用多条不同的系统调用路径交叉比对(例如遍历 /proc 与内核层面获取的进程、线程、端口清单),专门找那些被 rootkit 做手脚后「工具看不见」的对象,对治「ps 里没有对应进程、端口却在通信」这类情况。它分 quick 与 brute 两档:quick 快但覆盖有限,brute 更彻底也更慢。
基本信息
| 适用平台 | Linux(需 root 才能看到全部对象) |
|---|---|
| 模式 | quick 快速初筛 / brute 彻底扫描 |
| 检查范围 | 进程、线程、网络端口 |
| 命中标志 | 输出中出现 Found hidden |
| 交叉验证 | 结果配合 /proc 与 ss 手工确认 |
| 耗时 | quick 秒级;brute 数分钟到十几分钟 |
典型使用场景
- ps 与 ss 输出对不上(有连接却找不到进程)时定位被隐藏的进程
- 怀疑 rootkit 做了 PID 隐藏,需要一个独立视角来交叉验证
- 排查非预期监听端口,确认是否属于被隐藏的进程
- 在宿主机与容器两侧分别运行,对比差异以发现利用命名空间隐藏的对象
- 应急演练里验证隐藏检测工具链是否可用、命令是否记全
- 与 chkrootkit、rkhunter 结论互相印证,避免单点误判
两档扫描并保存结果
两档扫描并保存结果
unhide quick | tee /evidence/unhide_quick.txt # 先跑快速档
grep -i 'found hidden' /evidence/unhide_quick.txt # 只看命中项
unhide brute | tee /evidence/unhide_brute.txt # 彻底档,耗时更长
ps -eo pid,ppid,user,cmd --sort=start_time | tail -n 20 # 与进程表对照
ss -lntp | head -n 20 # 与监听端口对照两档模式对照
| 对比项 | quick | brute |
|---|---|---|
| 耗时 | 秒级 | 数分钟到十几分钟 |
| 覆盖路径 | 常用系统调用路径 | 更多交叉路径 |
| 适用阶段 | 初筛、赶时间 | 确认阶段、可等待 |
| 资源占用 | 低 | CPU 与 IO 占用明显 |
brute 模式在业务机上会明显抢占 CPU 与 IO:先记录当时的负载与关键指标作为对照,业务高峰时段不要跑。输出文件要连同扫描时间一起留档,否则事后无法说明「当时到底有没有隐藏对象」。
Found hidden 只表示「某一条路径看不到该对象」,内核线程、权限差异、procfs 挂载方式都会造成误报。必须回到 /proc/<PID> 手工确认成立后再动手处置。