以太坊智能合约审计CheckList.docxVIP

  • 0
  • 0
  • 约3.42万字
  • 约 23页
  • 2026-03-17 发布于广东
  • 举报

以太坊智能合约审计CheckList

作者:知道创宇404区块链安全研究团队

时间:2018.11.12

在以太坊合约审计checkList中,我将以太坊合约审计中遇到的问题分为5大种,包括编码规范问题、设计缺陷问题、编码安全问题、编码设计问题、编码问题隐患。其中涵盖了超过29种会出现以太坊智能合约审计过程中遇到的问题。帮助智能合约的开发者和安全工作者快速入门智能合约安全。

本CheckList在完成过程中参考并整理兼容了各大区块链安全研究团队的研究成果,CheckList中如有不完善/错误的地方也欢迎大家提issue.

由于本文的目的主要是CheckList,所以文中不会包含太详细的漏洞/隐患信息,大部分漏洞分析在扫描报告中会有所提及。

以太坊智能合约审计CheckList目录

以太坊智能合约审计CheckList

以太坊合约审计checkList

1、编码规范问题

(1)编译器版本

(2)构造函数书写问题

(3)返回标准

(4)事件标准

(5)假充值问题

2、设计缺陷问题

(1)approve授权函数条件竞争

(2)循环Dos问题

[1]循环消耗问题

真实世界事件

[2]循环安全问题

3、编码安全问题

(1)溢出问题

[1]算术溢出

真实世界事件

[2]铸币烧币溢出问题

真实世界事件

(2)重入漏洞

真实世界事件

(3)call注入

真实世界事件

(4)权限控制

真实世界事件

(5)重放攻击

4、编码设计问题

(1)地址初始化问题

(2)判断函数问题

(3)余额判断问题

(4)转账函数问题

(5)代码外部调用设计问题

(6)错误处理

(7)弱随机数问题

真实世界事件

(8)变量覆盖问题

5、编码问题隐患

(1)语法特性问题

(2)数据私密问题

(3)数据可靠性

(4)gas消耗优化

(5)合约用户

(6)日志记录

(7)回调函数

(8)Owner权限问题

(9)用户鉴权问题

(10)条件竞争问题

真实世界事件

(11)未初始化的储存指针

(12)「输入假名」问题

真实世界事件

以太坊合约审计checkList审计系列报告

REF

1、编码规范问题

(1)编译器版本

合约代码中,应指定编译器版本。建议使用最新的编译器版本

pragmasolidity^0.4.25;

老版本的编译器可能会导致各种已知的安全问题,例如/631/#44-dividenddistributor

v0.4.23更新了一个编译器漏洞,在这个版本中如果同时使用了两种构造函数,即

contracta{

functiona()public{

...

}

constructor()public{

...

}

}

会忽略其中的一个构造函数,该问题只影响v0.4.22

v0.4.25修复了下面提到的未初始化存储指针问题。

https://etherscan.io/solcbuginfo

(2)构造函数书写问题

对应不同编译器版本应使用正确的构造函数,否则可能导致合约所有者变更

在小于0.4.22版本的solidify编译器语法要求中,合约构造函数必须和合约名字相等,名字受到大小写影响。如:

contractOwned{

functionOwned()public{

}

在0.4.22版本以后,引入了constructor关键字作为构造函数声明,但不需要function

contractOwned{

constructor()public{

}

如果没有按照对应的写法,构造函数就会被编译成一个普通函数,可以被任意人调用,会导致owner权限被窃取等更严重的后果。

(3)返回标准

遵循ERC20规范,要求transfer、approve函数应返回bool值,需要添加返回值代码

functiontransfer(address_to,uint256_value)publicreturns(boolsuccess)

而transferFrom返回结果应该和transfer返回结果一致。

(4)事件标准

遵循ERC20规范,要求transfer、approve函数触发相应的事件

functionapprove(address_spender,uint256_value)publicreturns(boolsucces

文档评论(0)

1亿VIP精品文档

相关文档