关键在于精准识别非法SUID/SGID程序:先用find筛选非可信路径下的S位文件,再通过属主、时间、来源、包管理记录四维验证,最后测试利用可能性并留痕响应。

排查系统内被非法赋予S位权限的隐藏二进制漏洞程序,关键不是“找所有S位文件”,而是快速筛出**不该有S位、又不在可信路径、还具备滥用条件**的异常项。重点在“非法赋予”——即非系统默认安装、非管理员主动配置、却拥有setuid/setgid权限的可执行文件。
一、精准扫描+路径过滤,避开噪音
直接全盘扫描会产生大量干扰(如/usr/bin/sudo、/bin/ping),需结合排除与聚焦:
- 运行命令:find / -xdev -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null,-xdev避免跨挂载点(如/docker、/mnt)引入误报
- 立即过滤掉常见可信路径:| grep -vE '^/usr/bin/|^/bin/|^/usr/sbin/|^/sbin/|^/usr/libexec/'
- 重点关注以下三类高危位置:
— /tmp、/var/tmp、/dev/shm(临时目录,常被用于落地恶意SUID二进制)
— /home/*、/root(用户主目录下出现S位程序极可疑)
— /opt、/usr/local/bin、/usr/local/sbin(第三方软件区,若无明确业务需求,不应存在S位)
二、识别“非法赋予”的核心特征
一个S位文件是否非法,不能只看权限,要交叉验证四个维度:
- 属主异常:ls -l 显示属主为普通用户(如alice:alice)却带setuid root,或属主为nobody/nogroup——这基本可判定为入侵植入
- 时间异常:stat 查看 mtime(修改时间)与 ctime(状态变更时间)。若 mtime 在系统最近一次维护后、且远早于 atime(访问时间),说明文件可能被静默部署
- 来源不明:对非包管理器安装的文件,运行 file /path/to/binary 看是否为动态链接、是否有调试符号;再用 strings /path/to/binary | grep -E '/bin/sh|/usr/bin/env|execve|system\(' 检查是否硬编码调用shell
- 无对应包记录:在CentOS/RHEL上执行 rpm -qf /path/to/binary,返回“not owned by any package”即为非法;Debian/Ubuntu用 dpkg -S /path/to/binary
三、验证是否可被实际利用
即使确认是非法S位程序,也要判断它是否构成真实提权风险:
- 尝试传入简单payload测试行为:./suspicious_binary 'id; echo test',观察是否执行了分号后命令(说明未过滤shell元字符)
- 用 strace -e trace=execve,openat ./suspicious_binary 'dummy' 2>&1 | grep -E '(execve|openat)',看是否动态打开或执行外部文件(尤其是读取用户可控路径)
- 检查是否依赖环境变量:LD_PRELOAD=xxx ./suspicious_binary 或 PATH=/tmp:$PATH ./suspicious_binary,若能劫持加载或命令查找链,即存在绕过可能
四、自动化留痕与响应建议
发现可疑项后,不要立即删除,先固化证据:
- 备份原始文件:cp /path/to/binary /var/tmp/suid-backup-$(date +%s).bin
- 记录完整上下文:ls -la /path/to/binary && stat /path/to/binary && md5sum /path/to/binary >> /var/log/suid-suspicious.log
- 紧急处置:若确认非法,立即移除S位:chmod u-s,g-s /path/to/binary;后续再分析是否需彻底清除或溯源

















