Chiral Analysis of Smart Contracts: Detecting Vulnerabilities from Relational Inconsistencies Across Business Paths
本文介绍了“手性分析”(chiral analysis),这是一种通过 ChiralDetector 工具实现的关联静态分析模型,它通过识别语义成对业务路径之间的不一致性来检测智能合约漏洞,从而有效地发现传统单函数分析器所遗漏的复杂逻辑漏洞。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
侦探的困境:当代码因“遗漏”而撒谎
想象你是一名正在繁华都市中破解谜团的侦探。通常情况下,你会寻找“冒烟的枪口”:破碎的窗户、泥泞的脚印或可疑的便条。在计算机代码的世界里,特别是运行在区块链上的“智能合约”中,传统的安全工具就像这样的侦探。它们逐行扫描代码,寻找明显的错误,比如门上没锁,或者计算中的数学错误。这些工具擅长发现“局部”漏洞——即那些发生在单个房间内的错误。
但如果罪案根本不在房间里呢?如果谜团在于:前门锁好了,但后门却大开着,而这两扇门本应属于同一个安全系统?在计算机科学中,这被称为“关系型”问题。这不在于某个损坏的零件,而在于两个本应匹配却不匹配的零件。本文探讨了一种捕捉这类隐蔽漏洞的新方法:通过比较成对的代码路径,将它们视为必须反映相同真相的镜像。如果一条路径说“停止”,而另一条路径说“前进”,那么系统就是破碎的,即便“停止”和“前进”本身看起来都完全无误。
论文:手性分析与镜像测试
这篇论文介绍了一种聪明的新方法,称为手性分析(Chiral Analysis)。“手性(Chiral)”一词源于化学,描述的是那些互为镜像但无法完美重叠的对象(例如你的左手和右手)。在智能合约的世界里,作者提出许多业务操作都是成对出现的:例如“单笔”交易与“批量”交易、“买入”与“卖出”、或是价格的“预览”与价格的“执行”。这些配对构成了代码中的“手性双生子”。
其核心思想简单而强大:将这些配对视为正在互相检查对方作业的过程。如果用户购买了一件物品,代码应该收取费用。如果同一用户稍后卖出该物品,代码处理资金的方式应当与最初的购买逻辑相符。如果“买入”路径按美元收费,而“卖出”路径却错误地以另一种货币进行退款;或者“批量”版本忘记了退还“单笔”版本会退还的资金,那么漏洞就产生了。作者认为,这些漏洞在标准扫描器面前是隐形的,因为每一行代码单独看都是正确的。只有当你把两条路径举到镜子前,发现它们并不匹配时,错误才会显现。
为了发现这些隐形错误,作者构建了一个名为 ChiralDetector 的原型工具。你可以把它想象成一个拥有明确工作职责的超级聪明实习生。首先,它读取整个代码库,并绘制出每一种可能的“业务路径”(就像追踪顾客在商店里的每条路线一样)。然后,它使用一个“静态排序器(static ranker)”——一套简单的规则——来猜测哪些路径可能是手性的双生子。例如,它可能会寻找一个名为 buy 的函数和一个名为 sell 的函数,且两者都涉及同一个银行账户。
一旦确定了潜在的双生子列表,它就会请出“重量级选手”:大语言模型(LLM),一种能够理解人类语言和代码的 AI。这个 AI 不仅仅是在寻找错误,它更像是一个逻辑学家。它会追问:“如果这两条路径应该是镜像,它们应该遵循什么规则?”它会检查七个特定的维度:
- 防护(Guards): 两条路径是否检查了相同的密码或权限?
- 参与者(Actors): 在两条路径中,是否都是同一个人在支付和接收资金?
- 状态(State): 两条路径是否以同样的方式更新数据库?
- 数值(Value): 它们处理费用和退款是否保持一致?
- 顺序(Order): 它们的执行顺序是否一致?
- 失败(Failure): 如果出现问题,两条路径是否以同样的方式崩溃或恢复?
- 外部(External): 它们是否信任相同的外部来源?
如果 AI 发现了不匹配,它不会立即大喊“有 Bug!”。它会将发现的结果传递给一个“严格验证器(strict validator)”。这个验证器就像一个持怀疑态度的编辑,试图证明 AI 是错的。它会问:“这真的是一个 Bug,还是仅仅是一种设计选择?”最后,该工具会将相似的发现归为一类,这样它报告的就不是 100 个微小的错误,而是那一个重大的根源问题。
结果:寻找隐藏的故障
作者在名为 Phi protocol 的真实项目中测试了这个系统。结果表明,这种方法是有效的,尽管仍处于开发阶段。
以下是他们在实验中观察到的情况:
- 工具首先寻找了 3,217 对代码路径。
- 在过滤掉明显不相关的路径后,保留了 1,643 对进行深入调查。
- AI 检测器发现了 201 个潜在问题(包括“可疑”和“已确认”的候选对象)。
- 在对相似报告进行分组并去除重复项后,这一数字缩减至 101 组。
- 严格验证器进一步将其削减至 44 个确认的正例。
- 最后,经过人类专家对根源问题的审查,团队确定了 13 个独特的、有效的议题。
这 13 个问题正是标准工具会错过的类型。例如:
- “证明”混淆: 系统允许将所有权的证明重用于其他物品,因为“买入”和“领取”路径未能将证明与特定物品正确绑定。
- 费用混乱: 系统的一部分按“基点”(百分比单位)计算费用,而另一部分却将同一个数字视为“wei”(极小的货币单位),导致巨大的财务错误。
- 退款陷阱: 当用户超额支付时,“单笔”交易路径将钱退还给了用户,但“批量”交易路径却意外地将退款发送到了中间合约,导致用户空手而归。
作者指出,这种方法特别擅长捕捉“业务逻辑”漏洞——即关于系统如何“思考”金钱和规则的错误——而非简单的拼写错误。他们注意到,该过程并非完美;它产生了很多“噪音”(误报)需要清理,并且依赖于 AI 是否足够聪明以识别出这种关系。然而,它能发现 13 个其他工具错过的独特且高影响力的议题,这一事实表明,通过“手性配对”的视角来审视代码是一个充满前景的新方向。
论文总结道,虽然这并不是解决所有安全问题的万灵药,但它提供了一种结构化的方式,去寻找那些隐藏在代码行之间的漏洞。通过将代码路径视为镜像,我们终于能够看到当倒影与本体不符时所产生的裂痕。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。