The Superpower of Code Search for Deployed Contracts, Gary Thung - DeFi security Summit 2023
三句話摘要
使用代码搜索工具(Code Saw)进行以太坊智能合约审计的方法与应用 在智能合约数量和复杂度呈指数增长的时代,代码搜索工具通过函数级精确匹配和依赖关系可视化,为安全研究员提供了从成千上万份合约中快速定位特定风险模式的能力。 智能合约生态增长超出预期,代码量和执行复杂性都在指数级增长,这对开发者和安全研究员形成了前所未有的审计压力。Code Saw 通过函数级搜索功能让安全研究员能跨数百个合约快速定位特定漏洞模式,例如在 Compound V2 的重入漏洞被多个分叉协议沿用的情况下,仅需搜索函数签名就能找回所有风险合约。工具还能追踪不安全的 view 函数依赖关系,例如 Curve 的 get_virtual_price 函数虽然不修改状态但存在被操纵的风险,800 多个合约依赖此函数。此外代码搜索能快速识别开发团队自行实现的数据结构而非使用标准库版本的情况,以及追踪有漏洞库的供应链传播情况。
重點整理
重點- 1
智能合约生态增长超出预期,代码量和执行复杂性都在指数级增长,这对开发者和安全研究员形成了前所未有的审计压力。Code Saw 通过函数级搜索功能让安全研究员能跨数百个合约快速定位特定漏洞模式,例如在 Compound V2 的重入漏洞被多个分叉协议沿用的情况下,仅需搜索函数签名就能找回所有风险合约。工具还能追踪不安全的 view 函数依赖关系,例如 Curve 的 get_virtual_price 函数虽然不修改状态但存在被操纵的风险,800 多个合约依赖此函数。此外代码搜索能快速识别开发团队自行实现的数据结构而非使用标准库版本的情况,以及追踪有漏洞库的供应链传播情况。
實用技巧與重點
乾貨- 增长指标:
- 验证智能合约数量:自 2020 年增长 5 倍
- 代码总量:290 万行
- 平均交易合约调用:增加 3.3 倍(相比 2017 年)
- 平均交易存储读写:增加 4.1 倍(相比 2017 年)
- 工具名称:
- Code Saw(以太坊代码搜索公开工具)
- 具体漏洞类型与搜索方式:
- 重入漏洞(Re-entrancy):搜索函数签名 `doTransferOut`,Compound V2 版本返回 ~300 个合约
- 只读重入漏洞(Read-only re-entrancy):搜索 Curve 的 `get_virtual_price` 函数,返回 ~800 个依赖合约
- Merkle 证明不当实现:搜索 `merkleproof`、`merkleVerify`、`merkleTree` 等关键词
- 漏洞库传播:PRB Math 库漏洞,可通过特定 if 语句匹配追踪所有受影响合约
- 主要功能:
- 函数级搜索与直接跳转
- 调用依赖图(Sankey chart):通过合约间 gas 消耗加权显示值流和执行流
- 代理升级历史图表:展示以太坊顶级代理的升级趋势
- 合约版本 diff:对比升级前后逻辑合约的代码差异
結論
結論“在智能合约数量和复杂度呈指数增长的时代,代码搜索工具通过函数级精确匹配和依赖关系可视化,为安全研究员提供了从成千上万份合约中快速定位特定风险模式的能力。”
完整解析
詳細以太坊生态规模的快速扩张正在改变安全审计的复杂性。根据统计,自 2020 年以来链上验证的智能合约数量已增长 5 倍,这些合约总计超过 290 万行代码。更具挑战性的是,这些合约的行为也变得越来越复杂。平均每笔交易的合约间调用相比 2017 年增加了 3.3 倍,存储层面的读写操作增加了 4.1 倍,这意味着协议之间的可组合性在深度增加,攻击面也随之扩大。
面对这些挑战,Electric Capital 开发了 Code Saw 作为公开工具供安全研究员和开发者使用。代码搜索的核心价值在于快速定位特定风险模式的批量实例。以重入漏洞为例,当 Compound V2 被发现存在特定函数漏洞后,虽然官方及时修补,但许多分叉项目没有同步修复。通过在 Code Saw 搜索函数签名 `doTransferOut`,安全研究员能在约 300 个合约中逐一排查是否存在相同漏洞。更新的攻击向量如只读重入漏洞则源于 view 函数虽然不修改状态但其返回值可被操纵的特性;Curve 的 `get_virtual_price` 函数被约 800 个合约作为价格预言机依赖,任何一个依赖合约如果在调用此函数时被重入,就可能获得过时或被操纵的价格。
除了漏洞检测,代码搜索还能追踪数据结构和算法的实现质量。许多团队为了定制化或其他原因自行实现 Merkle 树等关键数据结构,而非使用 OpenZeppelin 等标准库,这些自实现版本往往成为隐患。最近一个案例中,安全审计师发现 PRB Math 库存在 bug,Code Saw 能通过搜索特定代码模式快速识别所有部署了漏洞版本的合约,从而填补了区块链生态缺乏传统包管理器的空白。
工具的可视化功能进一步增强了审计效率。通过 Sankey 图表展示合约间的调用依赖,研究员能清晰看到交易执行时的价值流向,这对理解多合约系统的交互逻辑至关重要。此外,代理合约升级历史图表能揭示以太坊中升级频率的长期趋势,而合约版本 diff 功能让审计人员能直观比对升级前后逻辑合约的变化。团队未来计划添加合约存储状态查看、代码注释众筹等功能,并扩展对非 Solidity 语言的支持。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

