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月15日晚间要闻速递

    1. BTC突破64000美元

  • 美国4月CPI同比上升3.4%

    美国4月CPI同比上升3.4%,预估为3.4%,前值为3.5%;美国4月CPI环比上升0.3%,预估为0.4%,前值为0.4%。

  • BTC突破64000美元

    行情显示,BTC突破64000美元,现报64001美元,日内涨幅达到4.14%,行情波动较大,请做好风险控制。

  • Humanity Protocol以10亿美元估值完成3000万美元新一轮融资

    Humanity Protocol宣布以10亿美元估值完成3000万美元新一轮融资,Kingsway Capital领投,Animoca Brands、Blockchain.com和Shima Capital等参投。创始人Terence Kwok表示,该公司还在“KOL”中从有影响力的加密人物那里筹集了约150万美元。Kwok表示,该初创公司计划在第二季度推出其测试网络,目前等待名单约为50万人。在推出其技术时,计划首先发布一款应用程序,可以使用手机摄像头扫描人们的掌纹以确定他们的身份。 据悉,Humanity Protocol利用掌纹识别技术和零知识证明来确保用户的隐私和安全,旨在为建立Web3应用程序中的人类证明提供一种易于访问且非侵入性的方法。

  • 以太坊上假冒GME代币发生Rugpull

    据PeckShield监测,以太坊上假冒GameStop GME下跌100%。0xcbae开头地址抛售了1,434,204,649,380.8枚GME并兑换为93.2枚WETH(价值27万美元),注:Rugpull代币与合法代币名称相同。

  • ETH跌破2900美元

    行情显示,ETH跌破2900美元,现报2899.38美元,日内跌幅达到0.48%,行情波动较大,请做好风险控制。

  • 欧洲央行管委:我们很可能在六月开始降息

    欧洲央行管委维勒鲁瓦表示,我们很可能在六月开始降息。

  • 前FTX高管Ryan Salame请求法庭从宽处理,判处其18个月监禁

    根据周二提交的一份量刑备忘录,前FTX高管Ryan Salame于去年9月承认共谋非法政治献金以及共谋经营无证汇款业务的罪名 ,其律师请求法庭从宽处理,判处其18个月的刑期。RyanSalame在FTX和Alameda任职期间,为FTX客户管理电汇存款和法币兑换,利用Alameda的资金参与政治献金,并在巴哈马领导慈善活动。 在提交的文件中,其律师辩称,Salame在被关闭的公司中扮演的角色与欺诈的核心关系不大,更多的是操作性的。他们还提到了萨拉梅与当局的合作、真正的悔意、为解决药物滥用问题所做的努力,以及交易所倒闭给他造成的重大个人和经济损失。

  • 让 ICO 回归:分布式代币发行 (DTL)

    DTL 的核心焦点是将代币及其技术交到真实用户手中,而不仅仅是投机者。

  • 宏观思考:并非都是厄运和阴霾

    这可能是一次健康的重置。