智能合约的安全审计

智能合约就是用计算机语言取代了法律语言并由程序自动执行的合约。换句话说,智能合约就是传统合约的数字化版本,是运行在以太坊网络中的一段代码。

从技术层面来讲,智能合约可能更宽泛一些,它不一定是一个现实意义的合约,即使一个只打印 Hello World 的程序,只要部署到区块链上,我们也叫它做一个智能合约。

目前智能合约应用的领域主要集中在金融、游戏等行业,对应的去中心应用成为 defi、gamefi。

由于智能合约实际应用的时间并不长,基础设施不是很完善,再加上从业人员多从其他行业转过来,缺乏经验,所以频频爆出安全问题。

由于这些应用多涉及到金融领域,面对的是真金白银,而且很容易破解,所以是黑客们眼里最理想的攻击对象,一旦得手,很难再追回。

智能合约漏洞案例

今天,刚刚看到一个刚出校门的创业者,编写了一个随机猜数字游戏,其中使用了一段智能合约,就犯下了初级错误,被黑客轻松撸走合约中所有以太坊。

小伙子气得在”推上“痛骂,虽然数量不大,但也只能宣布创业失败,重新找工作上班去。

其实这个漏洞非常初级,就是使用了不恰当的随机数生成方法,我们后面再单独分析。

上面的案例损失很微小,历史上发生的智能合约漏洞事件,远比这个损失大得多。

2016年6月,The DAO安全漏洞,导致5000万美元的损失。

2017年7月,Parity多签名钱包两次安全漏洞,分别导致3000万美元、1.52亿美元的损失。

2018年4月,BEC被盗事件,由于一行代码的安全漏洞引发其9亿美元市值几乎归零。

正是以上发生的问题,使得智能合约的代码审查工作变得很重要,由此催生了一门新的行业:智能合约审计。

智能合约审计现状

智能合约审计机构的基本职责就是负责智能合约的审计,找出合约中潜在的安全问题,提供解决方案,出具一份审计报告。

另外,项目方使用专业的审计机构对代码进行审计,等于审计机构给与项目的安全性提供了背书,这对于项目的宣传和融资起到一定作用。

有些初始动机就不纯的项目方,为了割韭菜,往往会花大价钱找知名机构审计,这使得一些审计机构赚钱到手软。

挖金子的不一定能发财,卖铁锹的是真发财了。区块链相关的产业就是这样,提供基础服务或者衍生服务都在闷声发大财。

智能合约审计公司的水平参差不齐,比较牛皮叉的项目往往都是找几家交叉审计,比如:Aave V3前后有5份审计报告。

业内比较知名的审计机构有:OpenZeppelin、PeckShield、Certik。

其中,智能合约开发者都知道,OpenZeppelin 在业内大名鼎鼎,它们的智能合约代码库是以太坊开发者的宝库,OpenZeppelin代码库包含了经过社区审查的ERC代币标准、安全协议以及很多的辅助工具库。基于OpenZeppelin库开发合约,即可以提高代码的安全性,又可以提高开发效率。

OpenZeppelin的审计水平比较高,业务需要预约,先排队,因为业务量比较大。

PeckShield的审计非常严格和仔细,非常专业,还是比较负责任,收费也较高。

Certik也是比较知名的审计机构。

智能合约审计费用

那么审计公司的收费如何呢?不同的审计公司的报价差别很大。不知名的公司可能就1000多刀,头牌需要几万刀。

另外,也与智能合约的代码量何服务深度有关。

我们曾经使用了 PeckShield 派盾的服务,大约花了5万刀,但审核效果确实不错,很细致。

智能合约审计流程

智能合约的审计流程,通常分为三个层面:

工具扫描:通常有专门开发的工具,对代码进行扫描,但错误率比较高。

语法审核:由人工执行,从语法层面进行审核,比如常见的重放攻击、随机数攻击、数值溢出等。

业务审计:由人工执行,通常需要金融顾问参与,需要项目提供各种文档说明。

通常,工具扫描比较容易,语法审核的难度中等,而业务审计最难。

工具扫描的误报率一般比较高,需要人工再次甄别确认。

一般的审计公司都是执行前两项工作,只有那些头部公司才会进行第三项工作。

随机数攻击,就是针对智能合约的随机数生成算法进行攻击,预测智能合约的随机数。目前区块链上很多游戏都是采用的链上信息(如区块时间戳,未来区块哈希等)作为游戏合约的随机数源,也称随机数种子。使用这种随机数种子生成的随机 ...