name=字段是内核记录的路径快照,非绝对路径,需结合inode=、dev=及事件链交叉验证;如cp操作中name="/etc/shadow"与name="/tmp/.shad"对应不同inode,可确认为复制而非重命名。

当看到 auditd 日志中 type=PATH 的条目,尤其是伴随 syscall=257(openat)、syscall=2(open)、syscall=4(write)或 syscall=263(unlinkat) 等调用时,name= 字段就是还原“哪个文件被改写”的第一关键线索——但它不是直接可信的路径名,而是内核在系统调用发生时刻解析出的路径快照,需结合上下文交叉验证。
一、Name字段本质:路径快照,非绝对路径
name= 记录的是该次系统调用所操作的路径字符串参数(如 openat(AT_FDCWD, "/etc/shadow", ...) 中的 /etc/shadow),但要注意:
- 若路径含软链接,
name=显示的是符号链接路径本身(如/etc/shadow -> /etc/shadow.real中的/etc/shadow),不是目标真实路径; - 若通过文件描述符(fd)操作(如
write(3, ...)),则不会触发PATH条目,name=不会出现; - 若进程先
chdir("/tmp")再open("a.txt", ...),name=就是"a.txt"(相对路径),而非/tmp/a.txt; - 多个
PATH条目可能共存于同一事件中(如renameat会同时记录name=源路径和name=目标路径)。
二、单靠name=不够,必须关联inode与事件链
真正确认“被改写的是否是预期文件”,要靠 inode= + dev= + 跨事件比对:
- 同一
type=PATH条目中,必含inode=123456 dev=fd:00字段(Linux 5.10+ 默认开启); - 若你监控的是
/etc/shadow,先用ls -i /etc/shadow记下它的 inode(比如是1048577),后续日志中只要inode=1048577出现在name=对应的 PATH 项里,就可确认操作对象没变; - 更强证据:观察
renameat或mv行为——ausearch -f /etc/shadow可能查到两条记录:一条name="/etc/shadow"(旧路径),一条name="/etc/shadow.bak"(新路径),但inode=相同 → 说明是重命名,非新建;若inode=不同 → 是覆盖写入或 cp + rm,原文件已消失。
三、实战还原步骤:从name=到真相
假设日志片段如下:
type=SYSCALL msg=audit(1717589000.001:789): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7fffabcd1234 a2=241 a3=0 items=2 ... type=PATH msg=audit(1717589000.001:789): item=0 name="/etc/shadow" inode=1048577 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 type=PATH msg=audit(1717589000.001:789): item=1 name="/tmp/.shad" inode=2097153 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=CREATE cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 type=EXECVE msg=audit(1717589000.001:789): argc=3 a0="cp" a1="/etc/shadow" a2="/tmp/.shad"
还原逻辑:
-
item=0 name="/etc/shadow"且inode=1048577→ 确认读取源是真实/etc/shadow; -
item=1 name="/tmp/.shad"且nametype=CREATE→ 新建文件,inode=2097153≠ 1048577 → 非重命名,是复制; -
EXECVE明确调用cp,佐证行为意图;
→ 结论:攻击者未直接改写/etc/shadow,而是复制一份到临时目录,后续可能篡改副本再覆盖回写(需继续追踪inode=2097153的后续write或renameat)。
四、避坑提醒:name=易被绕过,别只盯它
- 攻击者用
perl -e 'open $f, ">", "/etc/shadow"',name=仍为/etc/shadow,但若用echo > /proc/self/fd/3(fd 方式),则无PATH条目; -
name=可被mount --bind或overlayfs干扰,显示路径与实际存储位置不一致; - 所以生产环境规则必须配合
-F key=xxx+ausearch -k xxx -i(启用 inode 解析),不能只依赖ausearch -f /path。
不复杂但容易忽略。

















