Solidity智能合约的代码分析工具:概述

软件开发人员可能会不断犯错。这些错误可能从缺少分号或括号不匹配,到程序中的逻辑错误。虽然编译器可以通知语法错误,但有些其他错误却被忽视了。在典型的软件开发周期中,软件修订可以修复软件发布后发现的错误。

正如您已经了解的那样,智能合约是不可变的。一旦部署到区块链上,它将一直存在,直到区块链运行。这使得代码分析成为智能合约开发的重要组成部分。 什么是代码分析?

代码分析是对软件代码进行检查,以识别潜在问题或错误,验证其符合编码标准,并确保其具有高质量。代码分析可以通过静态方式进行,即检查代码而不执行它,也可以通过动态方式进行,即执行代码并分析其运行行为。

有许多工具和技术可用于进行代码分析。它们可以广泛分类为静态和动态代码分析工具。

静态代码分析用于在程序发布之前识别许多常见的编码问题。它涉及手动检查代码或使用工具自动化该过程。静态代码分析工具可以在不执行代码的情况下自动扫描代码。它们可以识别语法错误,检查编码标准的遵循情况,并查找潜在的安全漏洞。通常在代码部署之前的开发过程的早期进行静态代码分析。它可以帮助识别在测试过程中可能很难定位的问题,并通过在问题变得更加严重之前检测到问题,节省时间和资源。

动态代码分析涉及执行代码并分析其运行行为。它们可以识别运行时错误,测试代码的性能,并验证其行为是否符合预期。通常在代码部署后执行动态代码分析。它可以识别在测试期间可能不明显的问题,例如仅在特定条件下发生的性能瓶颈或安全漏洞。

让我介绍一些针对Solidity智能合约的流行智能合约分析工具。 Slither

Slither是一个开源的智能合约分析工具,用于静态分析代码。Slither将Solidity编译器生成的Solidity抽象语法树(AST)作为输入。Slither工具包括一组检测器,用于检测合约中的漏洞。它还提供关于合约的详细可视化信息,并提供优化代码的建议。Slither提供了用于交互的API。

抽象语法树是编译器广泛使用的数据结构,用于表示程序的结构。AST是表示形式语言源代码的树结构。树的每个节点都是代码中的一个构造。

Slither可以检测到的一些漏洞包括:

lua
错误的ABI编码器使用
向任意地址发送ERC20代币
通过值修改存储数组
错误的移位操作
多个构造函数方案
多个同名合约
检测未保护的变量
具有嵌套变量的公共映射
状态变量遮蔽
对self-destruct或suicide的未保护调用
未初始化的状态变量
未初始化的存储变量
未保护的可升级合约
向任意地址发送以太币

Slither为我们提供了合约的易读摘要。它还识别了特定合约继承的合约,并使用图形表示。Slither使用Python编写,因此需要Python 3进行安装和solc。

尽管Slither声称效果很好,但在某些情况下可能会出现误报和漏报。

分析工具可能同时存在误报和漏报。误报是指工具报告了一个不一定是错误的问题。漏报是未检测到的错误。一些相关研究还指出,许多缺陷在理论上可以被静态分析工具检测到,但由于工具的某些限制,在实践中未被检测到。

Mythril

Mythril是一个用于Solidity的智能合约分析工具,由ConsenSys公司用Python开发。它使用符号执行来分析源代码。Mythril通过执行代码并监视其在不同输入上的行为来分析代码。

Mythril的检测能力包括:

委托调用给不受信任的合约
依赖可预测的变量
未保护的以太提款
断言违规
重入
整数溢出和下溢
调用失败引发的拒绝服务攻击
未保护的SELF-DESTRUCT指令
未检查的调用返回值
写入任意存储位置
函数类型变量的任意跳转

如果Mythril发现合约中有任何问题,它将生成一份详细的报告,详细说明其识别的问题,并根据危险级别对漏洞进行评级。它也被用于MythX安全分析平台(与其他工具和技术结合使用)。

Echidna

Echidna是用Haskell编程语言开发的用于模糊测试和基于属性的测试的工具。模糊测试是一种包括生成随机输入并自动生成用于检测断言和自定义属性违规的测试的技术。

实际上,Echidna基于项目进行分析。在Echidna中,分析的第一步是基于源代码和输入/输出行为生成作为Solidity函数编写的不变式或测试用例。然后,使用随机交易执行这些不变式,然后审查测试结果。由于分析是基于项目特定的不变式进行的,不存在误报的机会。如果Echidna发现合约中有任何问题,它将生成一份详细的报告,详细说明其识别的问题,并提供触发问题的测试用例信息。

Securify v2.0

这是另一个用于Solidity智能合约分析的静态分析工具,得到了以太坊基金会和ChainSecurity的支持。它以Solidity编译器生成的EVM字节码作为输入。它可以检测EVM字节码中存在的漏洞。Securify可以分析多达37种漏洞。Securify仅支持扁平合约,不支持带有导入语句的合约。

Securify发现的一些漏洞包括:

意外的以太币余额
重入
通过tx.origin进行授权
未检查的发送
未使用的返回值
基于时间戳的区块值
浮动的编译指示

如果Securify发现合约中有任何问题,它将生成一份详细的报告,详细说明其识别的问题,并提供修复建议。报告可能还包括有关合约结构和依赖关系以及其行为摘要的信息。

RemixIDE静态代码分析插件

该工具是Remix IDE的插件,是在线Solidity编码平台。它既可作为浏览器版本,也可作为桌面版本使用。

Remix IDE检测到的一些漏洞包括:

重入
通过tx.origin进行授权
低级别调用
自毁
内联汇编使用

它还检测与燃气消耗相关的漏洞,以及基于代码优化的漏洞。总共有21个分析模块分为四个类别:安全性、燃气与经济性、ERC和其他。如果静态分析工具检测到合约中的问题,Remix IDE将显示相关的警告或错误消息。

总结

这些是一些常用的Solidity智能合约代码分析工具。它们可用于静态或动态分析智能合约,识别潜在的问题、漏洞和安全隐患,并提供修复建议。使用这些工具可以帮助开发人员在部署合约之前或之后进行代码验证和优化,以提高智能合约的质量和安全性。请注意,没有一种工具可以完全消除所有问题和漏洞,因此最佳实践是结合多种分析工具和技术,以确保合约的安全性和正确性。

附录




https://ethereum.org/en/developers/docs/smart-contracts/security/

展开阅读全文

页面更新:2024-03-01

标签:合约   以太   代码   智能   工具   变量   静态   漏洞   错误   测试

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top