利用Wake的引导模糊测试检测抢跑漏洞

  • Ackee
  • 发布于 7小时前
  • 阅读 57

本文介绍了使用Wake的Manually Guided Fuzzing (MGF)技术来发现智能合约中的抢跑漏洞。通过分析合约逻辑、使用Python进行测试以及简化测试流程,MGF能够有效地揭示潜在的安全问题,文章通过两个具体的案例,展示了如何利用MGF发现盐值碰撞和ERC-721通证铸造中的抢跑漏洞,并强调了在测试中考虑各种边缘情况的重要性。

介绍

智能合约中的抢跑(Front-running)漏洞可能会构成严重的安全威胁。在本文中,我们将展示 Wake 的手动引导模糊测试 (Manually Guided Fuzzing, MGF) 如何使用差异模糊测试技术来发现此类漏洞。

什么是手动引导模糊测试?

手动引导模糊测试 (MGF) 是一种差异模糊测试,它:

  • 从多个角度分析合约逻辑
  • 使用 Python 测试 Solidity 合约,鼓励新的思考方式
  • 通过使用遗留逻辑模式简化测试
  • 使测试用例更易于理解和一致

示例 1:账户部署中的 Salt 冲突

让我们看看在使用 CREATE2 部署合约时可能发生的漏洞。如果 salt 计算被操纵,则可能发生地址冲突。

这是一个具有多个部署路径的场景:

当一个部署路径可以生成与另一个部署路径相同的 salt 时,就会出现漏洞,从而允许攻击者抢跑部署。

攻击场景

  1. 攻击者观察到使用带有回调的部署路径的待处理交易
  2. 攻击者计算直接部署路径的等效 creation_nonce
  3. 攻击者使用直接路径进行抢跑,部署到同一地址
  4. 受害者的交易失败(地址已部署)
  5. 预期的回调永远不会执行

测试的关键见解

  • 在测试部署函数时,始终考虑抢跑场景
  • 了解 salt 在合约部署中的使用方式和原因
  • 请记住 creation_nonce 是用户可控的
  • 使用相同的工厂时,部署地址仅取决于 salt(而不是调用者地址)

要发现这些漏洞,请尝试操纵变量以查找不同部署路径之间的相似之处。

例如,你可以设置 Path1 的 creation_nonce 以匹配 Path2 的 salt 计算。

示例 2:抢跑 ERC-721 Pass 的铸造

现在,让我们检查一下用于用户管理的 ERC-721 pass 合约。

Token 是不可转让的,并且任何人都可以为任何地址调用 mint 函数。因此,如果地址已经持有 pass,则根据设计,铸造会失败。

这种设置创造了抢跑的机会。攻击者可以使用他们自己的 affiliator 为受害者的地址铸造 pass,这会导致阻止受害者并将其永久链接到攻击者的联盟费用。

攻击影响

  • 攻击者看到待处理的为新成员铸造 token 的交易
  • 攻击者使用他们自己的 affiliator 地址进行抢跑
  • 受害者的交易失败(已经铸造)
  • 受害者永久链接到攻击者的 affiliator(因为 token 不可转让)
  • 攻击者从受害者的活动中获得联盟费用

来自 Wake 的测试见解

  • Wake 的外部视角有助于揭示合约逻辑中微妙的不变量
  • 测试“奇怪”的不变量通常可以发现隐藏的漏洞

创建 Flow 函数的最佳实践

为了最大程度地利用你的测试,请遵循以下原则:

  1. 使用通用的 Python 数据结构对合约状态进行建模,即使合约使用复杂的数据结构
  2. 使用打印语句和断言验证状态变量
  3. 测试合约不变量以了解底层逻辑

并使用以下七步方法:

  1. 使每个 flow 函数都专注于单个事务
  2. 对参数使用随机值
  3. 使用通用数据结构对状态进行建模
  4. 预测操作分支,包括 reverts
  5. 不要仅仅依赖于错误输出或事件参数来进行分支
  6. 断言即使是看似不必要的不变量
  7. 仔细比较所有可能的执行路径

结论

使用 Wake 进行手动引导模糊测试是一种发现抢跑漏洞的强大方法。

通过像攻击者一样思考并系统地测试边缘情况,MGF 可以帮助你发现传统测试可能遗漏的安全问题。

立即开始使用 Wake 进行手动引导模糊测试。

  • 原文链接: ackee.xyz/blog/uncoverin...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Ackee
Ackee
Cybersecurity experts | We audit Ethereum and Solana | Creators of @WakeFramework , Solidity (Wake) & @TridentSolana | Educational partner of Solana Foundation