Cointime

扫码下载App
iOS & Android

模糊测试:令人惊叹的 L1 审计工具

媒体

作者:Oleh Malanii Bartosz Barwikowski 编译:Cointime.com 237

第一层(L1)协议是区块链系统的骨干,对共识算法、交易格式和数据结构至关重要。然而,测试 L1 协议是一项复杂而具有挑战性的任务,因为它们的组成部分错综复杂,相互依赖。在这篇文章中,我们将讨论测试 L1 协议的困难,并探讨模糊法如何成为发现和减轻区块链系统协议层安全漏洞的有效解决方案。

模糊测试概述

1、什么是模糊测试?

模糊测试是一种区块链协议和智能合约的自动测试技术。它产生极端数量的半随机输入,并将其反馈给被测系统。模糊测试的目标是通过触发系统中的意外或无效行为来发现安全漏洞。

2、L1 模糊法

模糊测试是第 1 层审计的一个了不起的工具,特别是在测试虚拟机时,因为它可以自动化许多步骤,以确保 L1 的安全性和稳定性。最重要的是,数据并不像它看起来那样随机。Fuzzer 使用代码覆盖来检查哪些输入是有效的,哪些是无效的。通过这样做,它可以发现真正有价值的见解,这些见解是人眼无法发现的。

3、智能合约的模糊处理

对于智能合约,模糊处理涉及分析 ABI 或字节码,为其功能生成随机的有效输入,用这些输入执行合约,并检查结果以识别和报告任何弱点。

模糊测试的主要挑战:建立一个 Fuzz 目标

模糊测试是一种强大的测试方法,尤其是在大规模使用时,但它需要大量的资源和时间。建立一个模糊目标是最大的挑战,因为它需要大量的手工工作:

1、对目标进行标记

2、使用特定的格式

3、把所有东西上传到云端

为了确保高度的一致性并节省我们的时间,我们用一个叫 Hacken-Fuzz 的工具自动构建目标。

Hacken-Fuzz 工具可以自动完成设置模糊目标的所有过程。它适用于 C、C+、Rust、Go、JavaScript、JVM、Swift 和 Python。Hacken-Fuzz 之所以有效,是因为它能同时运行 50 台服务器,这要归功于我们基于 OSS-Fuzz 的基础设施。

使用案例: 何时使用模糊测试是合理的

有了正确的基础设施,你可以用模糊测试做一些惊人的事情,也就是说,用它来检测那些不可能人工检测的代码错误。这些包括导致节点崩溃的关键弱点,如无限循环、缓冲区溢出、不受控制的内存分配等。找到并解决这些漏洞可以保护区块链免受广泛的协议层攻击,如远程攻击、51% 和竞赛攻击。

对于智能合约,在整数溢出/下溢、拒绝服务的可能性、tokenomics 验证、gas 相关问题、委托调用验证和重入性等方面,模糊测试可能特别有用。

在执行大型、耗时的操作或验证人工分析以识别假阳性和被忽视的问题时,模糊测试尤其有用。虽然模糊测试是一种有价值的测试工具,但不应被认为是彻底审计的全面替代。

模糊测试能解决哪些挑战,以及如何解决?

在 Hacken,我们认为模糊测试是探索 L1 协议中安全漏洞的有效方法,原因如下。

1、模拟用户行为。

模糊法可以通过生成模仿用户行为的随机输入来模拟真实世界的场景。这意味着模糊法可以测试系统对各种攻击的鲁棒性,包括那些难以预测的攻击。

2、寻找隐藏的漏洞。

Fuzzing 可以发现其他测试方法可能会错过的安全漏洞。例如,人工测试或静态分析可能无法发现某些类型的逻辑错误或采取极端输入的竞赛条件。

3、L1的可扩展性。

模糊测试可以扩展到处理 L1 协议的复杂性及其相互依赖的组件。Fuzzing 可以产生许多输入并探索各种执行路径,增加发现安全漏洞的机会。

模糊测试的实际应用:最小值的案例

Hacken 模糊测试在我们作为审计师的日常工作中证明了其价值。我将分享我们的一个客户Minima 的区块链协议审计的一些细节。Minima 是一个 Java 项目,完全从零开始为智能手机构建区块链。他们自己开发了所有东西,包括虚拟机和它的语言。我们用模糊器发现了十几个关键问题,后来经过人工验证。我们的客户修复了所有的漏洞,所以我们可以在这里安全地讨论它们。

我们使用模糊测试来发现以下关键漏洞:

1、使用常量表达式的不可达退出条件的循环,又称无限循环。

2、两个与NULL指针解除引用有关的问题。

3、堆栈缓冲区溢出,原因是智能合约的递归解析使用了堆栈的所有空间,导致虚拟机崩溃。

4、另一个堆栈缓冲区溢出是由于缺乏括号限制而导致崩溃。

5、不受控制的内存分配,在十六进制值中有位移。

6、在电源功能期间,内存分配的大小值过大。

7、在通用函数中递归替换给定脚本的参数时,资源消耗会使节点崩溃。

8、多次调用 concat 函数时,不受控制的内存分配。

9、替换函数也有类似的问题,允许字符串呈指数级增长。它用 AA 替换了 "A",所以做得足够长,就会崩溃内存。

10、在 subset 函数中出现整数溢出,因为有可能指定起始位置高于结束位置。创建一个巨大的字符串,消耗了所有的内存。。

这些都是关键错误(即危险到足以使虚拟机崩溃)。人工是无法做到的,因为只有机器可以把测试做到极致,比如连接一个占用 2GB 内存的字符串或检查无限的数字。

模糊测试的缺点

尽管模糊测试有很多优点,但它并不是一剂灵丹妙药;你需要一个全面的审计和一个有知识的开发人员来审查和验证代码错误。最重要的是,模糊器不会在一开始就发现所有的错误。以下是模糊处理的一些最紧迫的挑战:

1、你需要在发现问题后进行修复,否则模糊测试就不会发现其他问题。

模糊测试的问题是,在它发现一个关键问题后,你必须修复它,否则模糊测试会一次又一次地绊倒在同一个问题上,无法揭示代码库可能存在的所有问题。显然,我们不希望这样,所以你必须边走边修复每个检测到的项目。所以你修复了这个问题,然后再去模糊处理。你可能认为这是一个问题,但这也是一个很好的推动因素,实际上是为了解决发现的弱点。

2、对于复杂的 bug 来说是有问题的。

模糊法很难适用于需要很多步骤才能执行的 bug。例如,如果一个 bug 需要三个事务来执行,模糊法可能无法检测到它,因为产生这样的输入是很难的。

3、耗费时间。

生成许多输入并探索各种执行路径会花费很多时间,特别是对于复杂的 L1 协议。另外,我们也不知道每种类型的漏洞会花费多长时间。

4、可能会错过逻辑错误(除非是专门设计的)。

如果系统的设计不是为了检测逻辑错误,那么模糊测试可能不会发现逻辑错误。例如,如果系统没有适当的错误处理机制,模糊法可能无法检测到导致意外行为的逻辑错误。

5、有状态组件的问题。

对有状态的组件进行模糊测试需要跟踪系统的状态,这可能是一个挑战,特别是对于复杂的L1 协议。很难判断模糊器是否具备检测问题的能力。

6、对多线程应用程序来说是个问题。

最后,模糊处理很难应用于多线程应用程序,因为它需要跟踪系统的并发性,这可能是一个挑战,特别是对于复杂的 L1 协议。

结论

模糊化是区块链审计的一个了不起的工具,在测试虚拟机时特别有用,因为它可以自动化许多过程。在半随机测试中,没有一个人可以击败 fuzzer。尽管如此,你仍然需要 50-100 台以上的服务器来使其有效,当然,还需要设置目标的专业知识。

然而,不要误解我的意思——模糊测试并不能取代人工审查,只能使其更加有效。你仍然需要一个知识渊博、经验丰富、值得信赖的区块链审核员来验证模糊测试中发现的问题,检测随机输入生成所不能发现的问题,并为所有错误推荐适当的代码修复。

评论

所有评论

推荐阅读

  • 土耳其提议使加密立法与国际标准保持一致

    土耳其执政党于 5 月 16 日向议会提交了加密法案草案。该法案重点关注加密服务提供商的许可和注册,并与国际标准保持一致。 该法案草案旨在更新现有法律,以全面管理新兴的加密货币市场。该法案的重点领域包括消费者保护、平台透明度以及遵守金融法规。拟议的立法旨在监管该行业的加密货币交易平台和其他服务提供商,要求他们获得土耳其资本市场委员会的许可。

  • 香港金管局:中交建工4家银行为香港数字人民币钱包运营机构

    香港金管局公布参与数字人民币香港跨境试点的机构,包括 : 一、数字人民币钱包运营机构为: 1. 中国银行、2. 交通银行、3. 中国建设银行、4. 中国工商银行。 二、提供“转数快”增值的香港银行支援由人民币户口增值为: 1. 中信银行(国际)有限公司、2. 创兴银行有限公司、3. 大新银行有限公司、4. 星展银行(香港)有限公司、5. 富邦银行(香港)有限公司、6. 众安银行有限公司。 三、提供即时港元兑人民币增值服务支援由人民币和港元户口增值为: 1. 天星银行有限公司、2. 中国银行(香港)有限公司 、3. 交通银行(香港)有限公司、4. 东亚银行有限公司、5. 中国建设银行(亚洲)股份有限公司、6. 招商永隆银行有限公司、7. 富融银行有限公司、8. 恒生银行有限公司、9. 香港上海滙丰银行有限公司、10. 中国工商银行(亚洲)有限公司、11. 渣打银行(香港)有限公司。

  • 过去24小时全网爆仓1.21亿美元,多单爆仓8292万美元

    据 Coinglass 数据显示,过去 24 小时全网爆仓 1.21 亿美元,其中多单爆仓 8292 万美元,空单爆仓 3832 万美元。比特币爆仓约 3497 万美元,以太坊爆仓约 2035 万美元。

  • 名义价值12亿美元的BTC期权和9.3亿美元的ETH期权即将到期

    Greeks.live数据显示,5月17日期权交割数据:1.8万张BTC期权即将到期,Put Call Ratio为0.63,最大痛点63000美元,名义价值12亿美元。 32万张ETH期权即将到期,Put Call Ratio为0.28,最大痛点3000美元,名义价值9.3亿美元。 Greeks.live表示,本周受美股Meme风潮的激励,BTC ETF也收获了明显的资金流入,BTC大幅上涨突破65000美元,但Meme以外的加密市场较为弱势,成交量继续下跌,BTC和ETH的期权数据分化就可以体现这一点。 从大宗交易和市场交易结构看,各主要期限IV下降趋势结束进入横盘,目前下跌的空间不大。BTC多空较为均衡,而ETH币价弱势导致市场信心持续减弱,卖出看涨成为绝对主力成交。

  • Binance协助中国台湾执法部门破获涉案近2亿新台币的重大虚拟资产案件

    5月17日消息,Binance发布公告称,近日,Binance金融犯罪合规部(FCC)联合中国台湾司法部调查局破获一起涉及虚拟资产洗钱的重大刑事案件,涉案金额近新台币2亿元。Binance在整个案件中为台湾犯罪斗士提供支持,提供关键情报和援助,在推进调查方面发挥了关键作用。 除了业务协助外,Binance还在台湾推出了一系列执法培训计划,与十多个不同单位合作,涉及千多名执法人员,这些努力都得到了非常积极的反馈。

  • Tether CEO:Tron Network上增发10亿枚USDT,已授权未发行

    5月17日,Tether CEO Paolo Ardoino表示,已于北京时间今日凌晨在Tron Network上增发10亿枚USDT,已授权未发行,这意味着该金额将用作下一期发行请求和链交换的库存。

  • 链上索引服务Subsquid完成总额1750万美元融资,DFG等参投

    链上索引服务Subsquid宣布通过CoinList社区销售完成630万美元融资,截至目前其融资总额已达到1750万美元,DFG、Hypersphere、Zee Prime、Blockchange和Lattice参投,据悉其原生代币SQD拟于本周五上市,而Subsquid SDK已与Google BigQuery集成,允许开发人员使用Google的技术来分析区块链数据,继而降低业内区块链和开发者社区大规模部署的数据成本。

  • Optimism 2024 Q1报告:EIP-4844的实施使L1提交成本降低了99%

    Optimism发布2024 Q1报告,其中日活地址达到89,000个(环比增长23%),每日交易量增至470,000笔(环比增长39%)。这些指标均略低于2023年第三季度的历史高点。 OP主网的稳定币市值达到8.09亿美元(环比增长32%)。过去六个月,USDT在OP主网上的市值大幅飙升,达到5.12亿美元(环比增长64%),占总市值的63%。 EIP-4844的实施使L1提交成本降低了99%,将平均每日成本从前几周的420,000美元减少到830美元。2024年Q1 OP主网的链上利润为200万美元(环比增长14%)。

  • Peaq通过CoinList Launch完成2000万美元募资

    适用于DePIN和机器RWA的Layer1区块链Peaq在X平台宣布,其通过5月9日至5月16日在CoinList上推出的原生代币Launch中完成2000万美元募资,截至目前超过14.5万名社区成员完成超3600万美元的超额认购,新资金将用于加速peqosystem的增长,并推动各种生态系统和社区计划的进一步巩固。

  • 印度NFT市场NFTFN完成5000万卢比融资

    印度NFT市场NFTFN宣布通过代币分配方式完成5000万印度卢比融资,约合60万美元,新资金将用于其拓展旗下低成本NFT交易平台SuperNova。