指南:保护以太坊智能合约的开发者

在本文中,我们将介绍智能合约安全最佳实践、故障安全保护以及用于加强智能合约安全性的智能合约分析工具。

以太坊使用“智能合约”,或者是使用构建在区块链技术上的可编程软件程序,来支持去中心化应用程序(dApp)、NFT和DAO。以太坊智能合约提供的丰富功能允许web3开发者创建复杂的基于区块链的应用程序。

然而,智能合约的实验性增加了漏洞和错误,随着加密货币市值达到数万亿美元,黑帽黑客正在寻找智能合约中的弱点,以便加以利用。

在本文中,我们将介绍智能合约安全最佳实践、故障安全保护以及用于加强智能合约安全性的智能合约分析工具。

以太坊智能合约简介

以太坊的智能合约是用solidity语言编写的,这是一种类似于c++和Javascript的语言。以太坊智能合约运行在以太坊区块链上,它们的执行由以太坊虚拟机(EVM)管理,EVM是执行以太坊智能合约的虚拟超级计算机,分布在世界各地的多个节点上。

以太坊智能合约的架构可能与其他架构不同。智能合约可以是功能有限的简单合约,也可以是具有多种功能的复杂合约。

智能合约的4个好处

无论其设计意图如何,智能合约都提供了相同的好处:

  1. 不变性 智能合约不能轻易的被修改(除非预先设定了可以这样做的程序),这使得它们能够抵制未经批准的修改。一旦合约被验证并存在于区块链上,就需要花费大量精力来修改或升级智能合约代码。
  2. 信任 根据设计,智能合约在满足预定义条件时自动执行一组指令。这是在没有外部控制的情况下发生的,因此用户可以相信代码在没有人为介入的情况下也能工作。两个人可以在不相互信任的情况下进行交易,因为他们知道智能合约将充当公平的仲裁者。
  3. 成本效益 智能合约与法律文书的结合(智能法律合约)可以简化个人之间的交易,不再需要中间人。由于没有中介机构,各方在执行和执行协议上的花费就会减少。
  4. 速度 每个智能合约都是基于条件编程的(即,如果这个,那么那个)。当满足合约逻辑的规则时,这些程序化的行动就会立即发生。因此,交易发生的速度比使用旧系统时的速度要快。

确保以太坊智能合约安全的6种方法

运行在区块链上的智能合约将为世界各地的用户改变治理、金融、物联网和许多其他行业。然而,开发人员必须考虑所有的安全挑战,智能合约安全漏洞必须认真对待。

以下是web3开发者在以太坊和EVM兼容的区块链上构建dapp时必须使用的一些基本智能合约安全最佳实践。

  1. 认真执行智能合约审计

到2022年,在没有安全审计的情况下部署智能合约应该是一种犯罪。即便如此,许多开发者仍在推出未经审核的智能合约。Certik的DeFi安全报告显示,大多数被利用的智能合约都没有进行安全审计。

可以理解的是,雇佣智能合约审计者并不便宜。但正确的安全检查可以为我们节省更多的时间。在DeFi中,有数百万人因为代码中的漏洞而被黑客攻击。

一个好的区块链安全审核者会遵循一种经过了验证的审核流程来发现智能合约代码中的缺陷,并找出在开发过程中未被注意到的错误。此外,他们可以提供有用的建议,在部署之前修复和优化智能合约。

  1. 测试我们的代码

重复多次测试我们的代码,以发现错误和其他漏洞。

严格的测试可能是确保智能合约在部署到主网后能够按预期执行的最简单和最有效的方法。

将智能合约部署在测试网络中,观察是否有异常。这样,我们就可以知道协议是否会正常运行。

用于测试以太坊智能合约的测试网络包括:

  • Rinkeby
  • Kovan
  • Ropsten
  • Truffle

运行单元测试以隔离单个代码段

单元测试也是改进合约安全性的好方法。单元测试查看代码的单个部分,因此如果出现故障,我们就可以判断出哪里出了问题。

建议在将每个新功能集成到智能合约之前,对其运行单元测试。智能合约本质上是不可变的,如果以后出现漏洞,就不可能给代码打补丁。

  1. 与同事一起评审代码

如果我们在一个团队中工作,确保每个成员进行独立的代码审核并提供详细的反馈。单独开发人员可能希望找到一个值得信任的同事,在整个开发过程中对他们的智能合约代码进行同行评审,以提高安全性。

  1. 减少软件的复杂性

软件安全的最终原则是保持代码简单。代码越复杂,变量越多,出错的可能性就越大。

正如荷兰计算机科学家Edsger W. Dijkstra所说:“简单是可靠性的先决条件。”

这并不意味着我们应该避免构建功能丰富的智能合约,但是,我们应该从一个简单的架构开始,然后慢慢地使用简洁的代码和熟悉的模式扩展功能。

  1. 实现故障安全保护

在编写以太坊智能合约时,一条经验法则是“为失败做好准备”。无论我们测试多少次,我们都不可能覆盖所有可能影响智能合约的bug。因此,为我们的以太坊智能合约设计一个故障安全机制是必要的。

故障安全模式对于限制恶意攻击造成的损害很有用。一旦检测到异常的智能合约活动,它们就会被触发。

智能合约故障安全保护的4个例子

兼容EVM的智能合约的故障安全保护示例包括:

  1. 断路器

当发现错误和漏洞时,可以使用“断路器”来进行阻止。我们有两种选择来激活断路器:

  • 授予受信任的管理员触发断路器的权限。
  • 对断路器机制进行编程,使其一旦满足预置条件就被运行。

由于智能合约是自动化的,所以,当错误发生时,断路器会限制操作。

  1. 减速装置

减速装置是一种减少恶意行为的故障安全机制,尽管它不会阻止攻击,但减速装置给管理员足够的时间来采取纠正措施。

一个典型的减速装置来自于2016年臭名昭著的DAO黑客事件。该程序确保在 27 天之后没有人可以从 DAO 中提取资金,这将资金保留在了智能合约中,直到开发人员能够取回它们。

  1. 速度限制

速度限制可以控制特定时间范围内调用函数的频率,提供一种临时措施,以防止反复调用函数以耗尽锁定的资金(例如重入攻击)、发行大量ETH代币或执行多次提款的漏洞。

此外,可以使用合约级别的速度限制来控制在一个时间间隔内发布的代币数量。

考虑到恶意行为者在短时间内发布大量代币的漏洞数量,速度限制是加强智能合约安全性的一种很好的预防措施。

  1. 余额限制

余额限制通过限制单个智能合约中可以锁定的ETH的总量来降低智能合约的风险。

余额限制将监控智能合约中持有的资金余额。一旦达到阈值,该机制就会自动拒绝后续付款。

如果我们正在启动一个新的智能合约,在我们对合约的安全性有完全的信心之前,余额限制可能是一个很好的预防性安全措施。

  1. 设计安全访问控制机制

访问控制机制决定谁可以治理和修改合约的某些元素,这是我们的以太坊智能合约体系结构的关键路径。

如果错误的人获得了所有权或管理特权,他们可以重新编写合约来执行恶意交易。

为了防止错误的人获得管理权限,确保敏感功能需要多级授权才能被访问。

Web3开发者应该知道的4个智能合约安全工具

智能合约安全问题严重。以下是一些分析工具,可以帮助我们保护我们的智能合约免受漏洞的影响:

  1. Octopus Octopus是一款功能强大的分析工具,用分析智能合约字节码来深入理解内部行为。它与建立在流行区块链上的智能合约兼容,例如 NEO、比特币,当然还有以太坊。
  2. Oyente Oyente是一个自动化的智能合约审计工具,用于识别常见的智能合约安全漏洞。它由Validator、Explorer、CoreAnalysis工具和CGF构建器组成。每个组件都发挥着重要的作用;例如,Explorer运行智能合约,CoreAnalysis检测结果输出中的任何问题。
  3. Mythril Mythril是ConSensys构建的智能合约安全工具,可用于测试以太坊虚拟机(EVM)字节码。它结合污点分析、SMT解决和符号执行来发现智能合约代码中的漏洞。
  4. Securify Securify是一个由以太坊基金会支持的智能合约漏洞扫描器。这款流行的以太坊智能合约扫描器可以检测多达37个智能合约漏洞,并实现上下文特定的静态分析,以获得更准确的安全报告。

使用智能合约安全最佳实践保护我们的下一个项目

当运行正确时,智能合约技术可以支持各种用例。然而,智能合约是由人类编写的代码,有时是不完美的。

作为一名智能合约开发人员,在编写代码时必须遵循安全方面的最佳实践,包括运行详细的安全分析、利用多种安全分析工具和资源、进行同行评审、简化代码结构和实现故障安全机制。

Source:https://www.web3.university/article/a-developers-guide-to-securing-ethereum-smart-contracts

关于

ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。

本文首发于:https://mp.weixin.qq.com/s/WbpYpvY3clZHmx8K5yvbKQ

  • 发表于 2022-05-23 16:47
  • 阅读 ( 310 )
  • 学分 ( 0 )
  • 分类:DeFi

0 条评论

请先 登录 后评论
ChinaDeFi 去中心化金融社区
ChinaDeFi 去中心化金融社区

94 篇文章, 66 学分