Claude Code如何防御Bash注入

💡 原文英文,约2600词,阅读约需10分钟。
📝

内容提要

Claude Code允许AI安全地执行Bash命令,通过解析命令生成抽象语法树(AST)并与允许列表匹配,避免复杂的安全漏洞。新架构不再检测坏事物,而是只允许已知结构。

🎯

关键要点

  • Claude Code允许AI直接执行Bash命令,通过解析命令生成抽象语法树(AST)并与允许列表匹配,避免复杂的安全漏洞。

  • 新架构不再检测坏事物,而是只允许已知结构,采用AST解析和允许列表的方式。

  • 传统的安全方法依赖于正则表达式匹配,但Bash的引用规则复杂,容易导致安全漏洞。

  • Claude Code的设计哲学是:如果我们不理解它,就不允许它。

  • 新的架构完全放弃了“检测坏事物”的理念,转而采用“只允许我们理解的结构”的方法。

  • 在AST解析之前,Claude Code运行一系列预检查,以捕捉已知的Tree-Sitter/Bash差异。

  • Claude Code维护了一份大约20个eval-like命令的列表,任何出现在argv[0]中的命令都会被标记为过于复杂。

  • Bash的数组下标会被评估为算术表达式,可能导致安全漏洞。

  • Claude Code的BashTool通过用户默认的shell执行命令,Zsh的扩展机制可能导致安全问题。

  • AST分析不仅分解命令结构,还跟踪变量赋值范围,以确保变量的安全性。

  • Claude Code实现了对每个包装命令的完整标志解析逻辑,以确保安全。

  • 旧的23个正则表达式验证器仍在运行,作为安全网与新AST路径并行工作。

  • 代码注释详细记录了每个安全检查的背景和攻击故事,体现了对Bash安全研究的尊重。

  • 整体架构包括五层防御,每一层都默认阻止不安全的命令,体现了对Bash复杂性的尊重。

延伸问答

Claude Code如何执行Bash命令以确保安全?

Claude Code通过解析命令生成抽象语法树(AST),并与允许列表匹配,从而安全地执行Bash命令。

Claude Code的新架构与传统安全方法有什么不同?

新架构放弃了“检测坏事物”的理念,转而采用“只允许我们理解的结构”的方法,使用AST解析和允许列表。

Claude Code如何处理Bash的复杂引用规则?

Claude Code在AST解析之前运行预检查,以捕捉已知的Tree-Sitter/Bash差异,确保安全性。

Claude Code如何防止eval-like命令的安全风险?

Claude Code维护了一份eval-like命令的列表,任何出现在argv[0]中的命令都会被标记为过于复杂,从而避免风险。

Claude Code的五层防御架构是怎样的?

Claude Code的五层防御包括AST允许列表、预检查、语义检查、旧的正则表达式系统和YOLO分类器,每层都默认阻止不安全的命令。

Claude Code如何处理Zsh的扩展机制带来的安全问题?

Claude Code通过阻止zmodload命令和黑名单列出所有模块内建,来应对Zsh的扩展机制可能带来的安全问题。

➡️

继续阅读