关键在于“找得到、分得清、验得准”:先用find / -xdev -type f ( -perm -4000 -o -perm -2000 ) 2>/dev/null全盘扫描,再过滤可信路径,重点检查/tmp、/home、/opt等用户可控目录下的s位文件,结合属主、修改时间、file类型及哈希比对识别非原生程序,通过rpm -qf或dpkg -s溯源验证是否系统原生,并用strace和注入测试初筛滥用风险。

排查系统内被非法赋予S位权限的非原生二进制程序,关键在于“找得到、分得清、验得准”——即全面扫描所有S位文件,快速剔除可信系统组件,再对剩余目标做来源与行为双重验证。
一、全盘扫描并过滤可信路径
执行基础扫描命令,捕获全部带SUID/SGID位的可执行文件:
- find / -xdev -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null(-xdev避免跨挂载点误扫)
- 将结果导出后,先用grep排除明确可信路径:| grep -vE '^/usr/bin/|^/bin/|^/usr/sbin/|^/sbin/|^/usr/libexec/'
- 重点保留出现在/tmp、/home/*、/opt、/var/tmp、/usr/local/bin等用户可控目录下的结果——这些位置出现S位文件,90%以上属异常
二、识别非原生特征:三看一比
对筛选出的可疑文件,不依赖名字判断,而是观察四个客观指标:
- 看属主属组:ls -l 输出中若属主为普通用户(如www-data、deploy)或属组为nogroup,高度可疑;正常系统SUID程序属主应为root,属组多为root或wheel
- 看修改时间:stat -c "%y %n" 文件名,若mtime在最近7天内且早于系统更新周期,需警惕;尤其注意凌晨或非运维时段的变更
- 看文件类型:file 文件名,若显示“ELF 64-bit LSB pie executable”但无发行版标识,或显示“data”“POSIX shell script”(SUID脚本在多数Linux上被内核忽略,设了也无效,反而暴露意图)
- 比哈希值:对无法确认来源的二进制,sha256sum 与已知干净版本比对;若无可信源,可用strings 文件名 | grep -E '/bin/sh|/usr/bin/env|execve|setuid' 初筛调用行为
三、验证是否为系统原生包管理安装
原生程序通常由rpm/dpkg管理,可通过包溯源快速证伪:
- RHEL/CentOS:rpm -qf 文件路径;若返回“file ... is not owned by any package”,即为非原生
- Debian/Ubuntu:dpkg -S 文件路径;返回空或“no path found”同理
- 进一步验证包完整性:rpm -V 包名(检查权限、属主、哈希是否被篡改);若该包本不该含S位(如/usr/bin/wall),而当前有,则说明已被手动加权
四、动态行为初筛:是否可被滥用
静态分析后,对高风险目标做轻量级运行测试(建议在隔离环境):
- strace -e trace=execve,openat ./可疑文件 2>&1 | head -20,观察是否动态加载未知路径的so或执行shell命令
- 尝试传入简单注入字符串:./可疑文件 'id; echo test',若输出多条命令结果,说明未过滤输入,存在命令注入面
- 查CVE:searchsploit 文件名 或访问 cvedetails.com 搜索其版本号,确认是否存在公开提权漏洞










