strace本身不标记非法行为,需显式指定-e trace=open,openat,openat2,stat,fstatat并配合-f、-s 256、-y、-o等参数捕获完整文件访问行为,再结合路径权限与上下文人工研判可疑读取。

直接用 strace 本身不会标记“非法”或“非授权”,它只忠实记录系统调用事实。真正识别潜在的非授权敏感文件读取,关键在于:选对要捕获的系统调用、加必要参数避免遗漏、再结合路径和上下文人工判断。
必须捕获的核心系统调用
默认 strace 不跟踪 open/openat 等文件访问调用,仅靠 strace ./app 会完全错过关键行为。需显式指定:
-
-e trace=open,openat,openat2,stat,fstatat:覆盖绝大多数敏感路径探测方式。其中openat2是内核 5.6+ 新增,在容器或 sandbox 场景下可能绕过传统 open/at 路径检查,漏掉它易导致误判。 - 只写
-e trace=open是常见错误——它捕获不到相对路径打开(如/proc/self/fd/3)、chroot 内路径,也看不到先stat判断再读取的试探行为。
关键参数一个都不能少
少了这些,日志要么不全、要么难读、要么无法回溯:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
-f:强制跟踪 fork 出的子进程。恶意载荷常通过 shell 脚本、execve 启动子进程加载配置或密钥,不加 -f 就等于关掉一半监控窗口。 -
-s 256:防止路径被截断(默认只显示前 32 字符)。像/home/attacker/.ssh/id_rsa或/tmp/secrets-prod.yaml这类长路径,截断后只剩/home/attacker/.ssh/i...,根本无法确认目标。 -
-y:把文件描述符(如read(3, ...))实时映射成对应路径。否则你看到write(4, "secret=xxx", 10),却不知道 fd 4 是指向/etc/shadow还是/dev/null。 -
-o trace.log:输出到文件而非终端。滚动日志极易丢失关键行,尤其在高频率调用场景下。
哪些路径读取值得警惕
不是所有 open 都可疑,重点看路径是否超出该进程合理权限边界:
-
/etc/shadow、/root/.ssh/id_rsa、/proc/*/mem:普通用户进程无权读取,出现即高度可疑。 -
/proc/self/environ、/proc/self/cmdline:常用于横向窃取父进程环境变量,尤其在容器中可能暴露密钥或 token。 -
/sys/kernel/security/*:SELinux/AppArmor 策略文件,非安全模块不应直接访问。 - 含
.env、secrets.yaml、config.json的路径,且位于/tmp、/home/otheruser等非应用自有目录:说明程序可能从不受控位置加载配置,存在注入或劫持风险。
辅助判断技巧
单看 open 行不够,要结合返回值、调用上下文交叉验证:
- 用
grep -E "(EACCES|EPERM)" trace.log快速筛出权限拒绝的尝试——有些攻击会先探测再绕过,失败调用反而是线索。 - 关注
stat后紧跟openat的组合:比如stat("/tmp/.creds", ...) = -1 ENOENT紧接着openat(AT_FDCWD, "/tmp/.creds", O_RDONLY),说明程序在主动寻找并读取临时凭证文件。 - 对比进程 UID 和路径所有权:如果 UID=1001 的进程 open 了
/root/.bash_history,而该文件属主是 root 且权限为 600,基本可判定为越权访问。










