主页 > imtoken官方app > 智能合约审计指南

智能合约审计指南

imtoken官方app 2023-11-24 05:11:07

译文来自:登联翻译项目[1] 译者:翻译组[2] 校对:小熊[3]

图片来自 Unsplash[4]

背景

区块链技术正在改变各行各业的游戏规则,而智能合约是这一过程的关键部分。 智能合约有助于降低成本,同时还通过消除第三方中介来确保各方之间的信任来提高透明度。 如果您要编写智能合约,那么审核代码以确保其正常工作是至关重要的——并且没有任何错误或安全漏洞。 本指南将带您了解审计智能合约的基础知识和一些常见的智能合约漏洞。

第 1 部分:为什么要审计您的智能合约?

智能合约很重要,原因有很多。 它们可帮助您实现业务流程自动化并提高效率,从而节省您的时间和金钱。 但它如此受欢迎的最大原因是它通过消除人为错误来降低欺诈风险。 然而,这些好处是有代价的:在开发智能合约时很容易出错。 有缺陷的代码库可能会导致整个系统瘫痪,甚至容易受到黑客的攻击! 您可能听说过黑客事件。 您可能听说过基于以太坊的代币遭到黑客攻击。 这些黑客攻击是由于智能合约中的漏洞,这使得黑客能够窃取存储在这些合约中价值数百万美元的加密货币。

第二部分:如何开始审核

在开始审核之前,您应该首先进行安全审查。 为了识别智能合约中的任何问题和漏洞。

下一步就是了解合约的业务逻辑,你应该了解它为什么被创建,它为用户解决了什么问题,以及它如何与区块链上的其他合约一起工作。

接下来是技术架构分析:查看编写和部署此代码所涉及的所有部分,并了解它们是如何在 Solidity 等编程语言中实现的。

最后,进行威胁建模以了解不同的参与者(用户/最终用户)如何与系统交互。

第三部分:智能合约审计的不同阶段

智能合约审计的不同阶段包括:

确定审计目的和目标:

在这一步中,您需要设定智能合约审计的目的和目标。

确定审核范围:

在此步骤中,您将收集包含在审计范围内的所有资产,以确保没有遗漏任何内容。

审计计划:

审计的一个重要阶段是计划,它可以使审计高效地进行。

审核:

真正的工作,试图找出智能合约代码中的错误。

写审计报告:

现在您的所有辛勤工作都已结束,是时候报告您在审核期间发现的内容了。

第 4 部分:测试的一般方面

有许多不同类型的测试,但最重要的是要记住,您不应该相信未经测试的代码。 您可以通过多种方式测试您的智能合约代码,包括:

第 5 节:基本安全注意事项

作为智能合约开发者,确保代码安全是您的责任。 这是确保用户资金安全的唯一方法。

为确保适当的安全,必须遵循一些基本做法。 这些包括:

第 6 部分:常见的以太坊漏洞

以太坊智能合约容易受到一些黑客攻击。 最常见的漏洞是:

我们将在以下几点讨论一些常见的漏洞。 您还可以查看我的其他文章以了解有关重入和整数溢出/下溢漏洞的更多信息。

第 7 部分:存储变量漏洞

以太坊智能合约中最常见的安全漏洞之一是使用不安全的存储变量。 这些变量可用于存储敏感信息,如私钥和密码,如果保护不当,这些信息很容易被泄露。

有几种不同的方法来保护存储的变量,例如使用像 SafeMath 这样的库(SafeMath 从 0.8 开始就内置到 Solidity 中),它确保所有数学运算都以安全的方式完成。

其他方法包括使用硬件安全模块 (HSM) 来存储变量,或使用多重签名钱包来保护私钥。 防止存储漏洞的最佳方法是结合使用这些方法,因为每种方法都有自己的优点和缺点。 通过使用多层安全性,攻击者更难破坏存储在智能合约中的数据。

第 8 部分:滥用传输和发送

谈到智能合约时,需要牢记一些关键事项,以避免任何滥用。 首先以太坊循环问题,重要的是要记住智能合约是不可变的。 这意味着它们一旦部署就无法更改。 因此,在部署代码之前对代码进行双重和三次检查至关重要。

可能导致滥用智能合约的一个常见错误是混淆传输和发送功能。 这两个函数看起来很相似,但实际上它们做的事情是不同的。 transfer 可用于转移所有权,而 send 函数用于发送资产。

简而言之,滥用智能合约会产生严重后果。 在部署代码之前,请务必仔细检查并确保您了解传输和发送功能之间的区别。

第 9 部分:函数可见性漏洞

当谈到智能合约中功能的可见性时,主要有两种类型的漏洞可能会发生。 第一种类型的漏洞是当一个不应公开的函数被标记为公开时。 如果函数未正确标记为私有,或者可见性被意外设置为公共,就会发生这种情况。 任何有权访问合约的人都可以利用这种类型的漏洞,并可能导致合约被破坏。

第二种类型的漏洞是当一个函数在不应该的时候被私有化。 如果不小心将可见性设置为私有,或者未正确标记为公共,就会发生这种情况。 任何有权访问合约的人都可以利用这种类型的漏洞,并可能导致合约被破坏。

第 10 部分:整数算术错误

在编写智能合约时,一定要注意整数算术错误。 当您使用太大或太小的整数执行计算时,会发生这些错误。

例如以太坊循环问题,假设您正在尝试计算智能合约中所有代币的总价值。 每个令牌的值都存储为一个整数。 如果合约中有超过 2,147,483,647 个代币,则总价值将太大而无法用单个整数变量完全表示。 这将导致错误。

为了避免这种情况,您可以使用像 SafeMath 这样的库(Solidity 从 0.8 开始就内置了 SafeMath),它可以帮助您安全地进行整数运算。

第 11 部分:循环和递归的漏洞

正如我们所见,循环和递归在编程中可以发挥巨大的作用。 但是,它们也可能被滥用来制造漏洞。

这方面的一个例子就是所谓的“无限循环”。 这是程序陷入循环并且永远不会退出的时候。 这可能会导致程序崩溃,或者更糟的是,耗尽其运行所在系统的所有资源,从而导致拒绝服务攻击。 这对智能合约不利,因为它可能导致用户损失。

另一个例子是程序递归太深。 这也可能导致崩溃,或导致程序内存不足并被迫终止。

这两个漏洞都可能被攻击者利用,给系统或其用户带来问题。 因此,重要的是要了解它们并采取措施防止它们被利用。

第 12 部分:预防、检测、缓解和补救。

预防:防止智能合约问题的最佳方法是进行彻底和完整的测试过程。 这应该包括合约代码的单元测试,以及合约在预期环境中的功能测试。 为合同制定清晰明确的规范也很重要,这样所有相关方都能准确理解合同应该做什么。

检测:智能合约的问题通常可以通过监控合约的性能并将其与预期行为进行比较来检测。 如果有任何差异,这可能表明合同有问题。 静态分析工具还可用于检查合约代码中的错误或潜在漏洞。

缓解:如果在智能合约中发现问题,则必须采取措施缓解问题。 这可能涉及更改合约代码以解决问题,也可能涉及更改合约的使用方式。 例如,如果发现合约容易受到特定攻击,则可以通过更改合约的使用方式来缓解问题,从而使攻击不再可能。

补救措施:如果无法缓解问题,则可能需要采取措施来补救该问题。 这可能涉及用没有相同问题的较新版本替换合同,或者可能涉及完全停止使用合同。

第 13 部分:用于检测漏洞的自动化工具

随着智能合约越来越受欢迎,对可以扫描这些合约中漏洞的自动化工具的需求也越来越大。

有许多不同的自动漏洞扫描器,每个都有自己的优点和缺点:

Mythril 是一种流行的选择,它使用符号执行来分析合约并发现潜在的漏洞。

Oyente 是另一个流行的选择,它使用静态分析来查找潜在问题。

Securify 是一种较新的工具,它结合使用静态和动态分析来查找漏洞。

这些扫描仪并不总是 100% 准确,因此进行自己的测试和人工审查很重要。

智能合约黑客/审计资源

视频:

审计智能合约 - 以太坊应用程序的安全审查

了解如何审计以太坊智能合约 - 由 bloctrax 提供

[5] BHIS | 区块链安全与智能合约审计简介

智能合约101——如何审计NFT项目

先进的智能合约安全和审计工具

智能合约安全和审计 101

如何找到 Solidity 漏洞

高级智能合约黑客

学习攻击

练习

路线图:

真棒以太坊安全:

综上所述

本文提供了审计智能合约的指南。 通过了解审计流程,您可以更好地识别和纠正合同中的潜在漏洞。

原版的:

参考

[1]

登联翻译计划:

[2]

翻译团队:

[3]

小熊:

[4]

Unsplash:@michael_f?utm_source=medium&utm_medium=referral

[5]

: