linux中s位程序是提权攻击常见入口,需用find扫描全盘setuid(-4000)和setgid(-2000)文件,排除可信路径后重点检查非系统目录下文件,结合权限、属主、修改时间、包验证及哈希校验判断是否可疑,并测试其是否可被滥用。

Linux系统中S位(Setuid/Setgid)程序是提权攻击的常见入口,自动化巡检能快速定位高危文件,避免手动遗漏。
识别所有S位程序
Setuid(u+s)和Setgid(g+s)权限会使程序以文件所有者或所属组身份运行,一旦被恶意利用,极易导致权限提升。需全面扫描:
- 用
find / -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null扫描全盘S位文件(-4000为setuid,-2000为setgid) - 排除常规可信路径(如
/usr/bin/sudo、/bin/ping)可加过滤:| grep -v '^/usr/bin/\|^/bin/\|^/usr/sbin/,但注意不能盲目忽略,须结合实际确认 - 优先关注非系统默认路径下的S位文件,例如
/tmp、/home、/opt等用户可写目录中的可执行文件
校验文件完整性与来源
发现可疑S位程序后,不能仅看权限,还需判断其是否被篡改或非法植入:
- 用
ls -l查看属主、属组、修改时间;异常属主(如root属普通用户)、近期修改、无版本信息的二进制需重点怀疑 - 对已知系统命令,用
rpm -V <pkgname></pkgname>(CentOS/RHEL)或dpkg --verify <pkgname></pkgname>(Debian/Ubuntu)验证包完整性 - 无包管理器安装的程序,可用
sha256sum对比可信源哈希,或用file和strings检查是否含可疑字符串(如/bin/sh、execve调用、硬编码凭证)
检查S位程序是否可被滥用
部分S位程序本身设计安全,但若配置不当或存在漏洞,仍可能被利用:
- 运行
strace -e trace=execve ./suspicious_binary 2>&1 | grep exec观察是否动态调用其他命令(尤其带用户输入拼接的场景) - 测试是否允许传入shell元字符(如
;、$()、|),例如:./vuln_suid_cmd 'id; whoami' - 查阅CVE数据库(如
searchsploit或 cvedetails.com)确认该程序版本是否存在已知提权漏洞
自动化脚本示例(轻量级巡检)
以下 Bash 片段可集成进日常巡检任务(如cron):
#!/bin/bash LOG="/var/log/suid-scan-$(date +\%F).log" echo "=== SUID/SGID Scan $(date) ===" > "$LOG" find / -xdev -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null | while read f; do owner=$(stat -c "%U:%G" "$f" 2>/dev/null) size=$(stat -c "%s" "$f" 2>/dev/null) mtime=$(stat -c "%y" "$f" 2>/dev/null | cut -d' ' -f1) echo "[$mtime] $f ($owner, $size bytes)" >> "$LOG" done # 过滤出7天内新建或修改的S位文件(需额外处理)
建议配合日志分析工具(如awk/grep)定期比对历史结果,突出新增项。










