智能合约安全测试指南
对于智能合约开发人员来说,知道如何安全地实现智能合约,并测试常见的陷阱和风险是很重要的。对于安全专业人员来说,有一个清晰的检查表可以帮助标准化测试方法,防止常见风险被忽视。基于这些原因,智能合约安全测试指南(SCSTG)应运而生。
由于智能合约的漏洞,在去中心化应用的世界中,利用和攻击一直都很普遍,可以从各种来源看到,例如:
与可以轻松打补丁的传统软件不同,大多数智能合约在部署后不能修改,允许在部署后修改智能合约的逻辑可能会为外部和内部参与者的攻击提供机会。因此,在智能合约的开发中,安全性即使不是最重要的,也是优先项。
对于智能合约开发人员来说,知道如何安全地实现智能合约,并测试常见的陷阱和风险是很重要的。对于安全专业人员来说,有一个清晰的检查表可以帮助标准化测试方法,防止常见风险被忽视。基于这些原因,智能合约安全测试指南(SCSTG)应运而生。
SCSTG是一个基于风险的指南,供智能合约安全专业人员和开发人员在智能合约安全测试时参考。介绍不同类别智能合约安全问题的特征和验证流程,并举例说明易受攻击的合约或功能,以及从根源上解决或降低风险的解决方案。
风险分为以下9类:
- 架构和设计
实现安全的智能合约需要适当的架构和设计。这个测试类别涉及到编译器的使用、智能合约调用体系架构的设计以及角色和权限的设计。
- 访问控制
访问控制是通过防止用户超出其授权权限范围来实施策略。不适当的访问控制可能导致未经授权的信息披露、数据操纵或丢失,或执行超出用户能力的业务功能。
- 错误处理和日志记录
错误处理和日志记录是使智能合约中的错误可追溯的关键,根据执行结果将执行流程引导到正确的路径,让用户知道合约在哪里以及如何失败,并可以追踪过去的操作在智能合约上完成。
- 业务逻辑
业务逻辑流通常应该是连续的,按顺序处理,不能被绕过。当智能合约的合法处理流程的使用方式可能对用户或智能合约的所有者产生不利影响时,就可能发生业务逻辑漏洞。
- 区块链数据
应该正确地使用区块链上的数据(包括存储、检索和修改),以保持数据的完整性(有时是机密性)。这包括链上数据操纵的风险,比如利用闪贷进行价格操纵。
- 外部组件
智能合约可以通过继承以前开发的智能合约或调用其他合约的功能实现互联。如果操作不当,使用不安全的外部组件可能会造成不希望的或有害的影响,例如重入攻击。
- 算术
在不同的编程语言和平台上的数学运算可能会有不同的工作方式。在智能合约中进行的算术运算应该能够安全地处理所有可能值的范围。
- 拒绝服务
不正确的合约逻辑会影响合约的可用性。应该确保智能合约能够在不受内部或外部因素干扰的情况下,按照设计正常运行。
- 最佳实践
根据每个开发人员的风格,智能合约可以以多种方式实现。然而,遵循最佳实践可以提高智能合约的代码质量,使其更干净、更易读或更高效。
完整的智能合约安全测试指南(SCSTG)可以在这里查看:https://inspex.gitbook.io/testing-guide