扫描只是第一步
扫描命令本身很简单,价值在于分类:一次列出的文件通常有几十个,其中绝大多数是发行版自带的正常程序。真正要关注的是构建在可写目录下的、属主异常的和最近三十天新增的条目。所以核查的输出不应是一长串路径,而是一张分了类的清单——基线内、基线外、近期新增,每类给出不同处置。
基本信息
| 加固项 | 提权面清点 |
|---|---|
| 适用平台 | Linux(RHEL/CentOS/Debian/Ubuntu) |
| 风险等级 | 高 |
| 判读 | 基线外的条目按可疑清单处理,逐一给出解释或清除 |
| 扫描范围 | SUID 与 SGID 两类,配合修改时间筛选 |
典型使用场景
- 首次核查:建立发行版默认清单,作为后续比对基准
- 周期巡检:重点看与上期相比新增的条目
- 事件排查:攻击者常用 SUID 程序维持提权能力
- 变更复核:安装软件后确认引入了哪些提权程序
- 合规取证:把分类后的清单作为入侵防范的检查材料
核查命令
核查命令
find / -xdev -perm -4000 -type f 2>/dev/null | sort | head -40 # SUID 文件
find / -xdev -perm -2000 -type f 2>/dev/null | sort | head -20 # SGID 文件
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -newermt '-30 days' 2>/dev/null | head
find / -xdev -perm -4000 -type f -writable 2>/dev/null | head # 落在可写目录下的
find / -xdev -perm -4000 -type f -not -user root 2>/dev/null | head # 属主不是 root 的结果分类与判读
| 分类 | 特征 | 处置 |
|---|---|---|
| 基线内 | 属于发行版默认清单 | 记录归档,更新基线 |
| 基线外 | 不在默认清单中 | 逐个核实来源,无法解释则按可疑处理 |
| 近期新增 | 修改时间在近三十天内 | 与变更记录对照,无记录即重点排查 |
| 落在可写目录 | 文件所在目录任意用户可写 | 风险最高,优先处置 |
| 属主非 root | SUID 程序的属主不是 root | 确认是否被人为改写属主 |
结果按分类归档:把扫描输出拆成「基线内」与「基线外」两栏,基线外的每个文件都要给出解释或清除动作。这份分类清单比原始列表更适合作为证据保存,也更便于下一次比对。
两个执行细节:扫描时跳过其他文件系统会漏掉数据盘与网络挂载,多分区环境要按挂载点分别执行;另外现代发行版可能用能力位替代 SUID 来实现同类功能(例如仅授予网络相关能力),这类程序不出现在 SUID 清单里属于正常情况。
怎么得到可用的默认清单
最稳妥的办法是拿一台同版本的最小化安装主机跑一次扫描,得到该发行版的默认清单,再以它为基准比对生产机器。比这个更好的做法是把清单纳入配置管理:每次镜像更新后重新生成,基线随发行版演进同步变化,避免用一份过期清单长期比对产生大量误报。