在本文中,我们将介绍智能合约安全最佳实践、故障安全保护以及用于加强智能合约安全性的智能合约分析工具。
以太坊使用“智能合约”,或者是使用构建在区块链技术上的可编程软件程序,来支持去中心化应用程序(dApp)、NFT和DAO。以太坊智能合约提供的丰富功能允许web3开发者创建复杂的基于区块链的应用程序。
然而,智能合约的实验性增加了漏洞和错误,随着加密货币市值达到数万亿美元,黑帽黑客正在寻找智能合约中的弱点,以便加以利用。
在本文中,我们将介绍智能合约安全最佳实践、故障安全保护以及用于加强智能合约安全性的智能合约分析工具。
以太坊的智能合约是用solidity语言编写的,这是一种类似于c++和Javascript的语言。以太坊智能合约运行在以太坊区块链上,它们的执行由以太坊虚拟机(EVM)管理,EVM是执行以太坊智能合约的虚拟超级计算机,分布在世界各地的多个节点上。
以太坊智能合约的架构可能与其他架构不同。智能合约可以是功能有限的简单合约,也可以是具有多种功能的复杂合约。
无论其设计意图如何,智能合约都提供了相同的好处:
运行在区块链上的智能合约将为世界各地的用户改变治理、金融、物联网和许多其他行业。然而,开发人员必须考虑所有的安全挑战,智能合约安全漏洞必须认真对待。
以下是web3开发者在以太坊和EVM兼容的区块链上构建dapp时必须使用的一些基本智能合约安全最佳实践。
到2022年,在没有安全审计的情况下部署智能合约应该是一种犯罪。即便如此,许多开发者仍在推出未经审核的智能合约。Certik的DeFi安全报告显示,大多数被利用的智能合约都没有进行安全审计。
可以理解的是,雇佣智能合约审计者并不便宜。但正确的安全检查可以为我们节省更多的时间。在DeFi中,有数百万人因为代码中的漏洞而被黑客攻击。
一个好的区块链安全审核者会遵循一种经过了验证的审核流程来发现智能合约代码中的缺陷,并找出在开发过程中未被注意到的错误。此外,他们可以提供有用的建议,在部署之前修复和优化智能合约。
重复多次测试我们的代码,以发现错误和其他漏洞。
严格的测试可能是确保智能合约在部署到主网后能够按预期执行的最简单和最有效的方法。
将智能合约部署在测试网络中,观察是否有异常。这样,我们就可以知道协议是否会正常运行。
用于测试以太坊智能合约的测试网络包括:
运行单元测试以隔离单个代码段
单元测试也是改进合约安全性的好方法。单元测试查看代码的单个部分,因此如果出现故障,我们就可以判断出哪里出了问题。
建议在将每个新功能集成到智能合约之前,对其运行单元测试。智能合约本质上是不可变的,如果以后出现漏洞,就不可能给代码打补丁。
如果我们在一个团队中工作,确保每个成员进行独立的代码审核并提供详细的反馈。单独开发人员可能希望找到一个值得信任的同事,在整个开发过程中对他们的智能合约代码进行同行评审,以提高安全性。
软件安全的最终原则是保持代码简单。代码越复杂,变量越多,出错的可能性就越大。
正如荷兰计算机科学家Edsger W. Dijkstra所说:“简单是可靠性的先决条件。”
这并不意味着我们应该避免构建功能丰富的智能合约,但是,我们应该从一个简单的架构开始,然后慢慢地使用简洁的代码和熟悉的模式扩展功能。
在编写以太坊智能合约时,一条经验法则是“为失败做好准备”。无论我们测试多少次,我们都不可能覆盖所有可能影响智能合约的bug。因此,为我们的以太坊智能合约设计一个故障安全机制是必要的。
故障安全模式对于限制恶意攻击造成的损害很有用。一旦检测到异常的智能合约活动,它们就会被触发。
兼容EVM的智能合约的故障安全保护示例包括:
当发现错误和漏洞时,可以使用“断路器”来进行阻止。我们有两种选择来激活断路器:
由于智能合约是自动化的,所以,当错误发生时,断路器会限制操作。
减速装置是一种减少恶意行为的故障安全机制,尽管它不会阻止攻击,但减速装置给管理员足够的时间来采取纠正措施。
一个典型的减速装置来自于2016年臭名昭著的DAO黑客事件。该程序确保在 27 天之后没有人可以从 DAO 中提取资金,这将资金保留在了智能合约中,直到开发人员能够取回它们。
速度限制可以控制特定时间范围内调用函数的频率,提供一种临时措施,以防止反复调用函数以耗尽锁定的资金(例如重入攻击)、发行大量ETH代币或执行多次提款的漏洞。
此外,可以使用合约级别的速度限制来控制在一个时间间隔内发布的代币数量。
考虑到恶意行为者在短时间内发布大量代币的漏洞数量,速度限制是加强智能合约安全性的一种很好的预防措施。
余额限制通过限制单个智能合约中可以锁定的ETH的总量来降低智能合约的风险。
余额限制将监控智能合约中持有的资金余额。一旦达到阈值,该机制就会自动拒绝后续付款。
如果我们正在启动一个新的智能合约,在我们对合约的安全性有完全的信心之前,余额限制可能是一个很好的预防性安全措施。
访问控制机制决定谁可以治理和修改合约的某些元素,这是我们的以太坊智能合约体系结构的关键路径。
如果错误的人获得了所有权或管理特权,他们可以重新编写合约来执行恶意交易。
为了防止错误的人获得管理权限,确保敏感功能需要多级授权才能被访问。
智能合约安全问题严重。以下是一些分析工具,可以帮助我们保护我们的智能合约免受漏洞的影响:
当运行正确时,智能合约技术可以支持各种用例。然而,智能合约是由人类编写的代码,有时是不完美的。
作为一名智能合约开发人员,在编写代码时必须遵循安全方面的最佳实践,包括运行详细的安全分析、利用多种安全分析工具和资源、进行同行评审、简化代码结构和实现故障安全机制。
Source:https://www.web3.university/article/a-developers-guide-to-securing-ethereum-smart-contracts
ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!