背景
自 2009 年人类历史上第一个公链系统——比特币上线以来,据行情平台不完全记录,已经有三千多个公链项目诞生并且有过交易记录。
如今,整个公链的市值已经接近 1 万亿美元,而区块链安全却是这个庞大市场上悬挂着的达摩克利斯之剑,人们在享受资本狂欢的同时,却无时不在担心无处不在的黑客攻击。据慢雾 Hacked 档案库(hacked.slowmist.io)统计,由各种安全事件导致的损失已达数百亿美元。
2022 年 3 月 29 日,Ronin 跨链桥遭到黑客攻击,17.36 万个 ETH 和 2550 万 USDC 被盗,累计价值约 6.2 亿美元。这也是 DeFi 历史上损失金额最高的被盗事件,Ronin 发布报告表示,攻击者控制了九个验证节点私钥中的五个。人们不禁想问,如何能避免如此严重的安全事件,是否有可能通过安全审计去减少甚至避免此类安全问题?
通过分析 Ronin 攻击事件我们发现,主网被黑客攻陷,已经不是单纯的节点软件源代码漏洞所造成的,而是主网遭遇了传统黑客渗透攻击。慢雾早在创业之初就已经在尝试对公链主网进行安全审计,经过多年的实战和安全研究,我们积累了大量的经验和深厚的漏洞挖掘技术,我们向全行业公开我们的主网安全审计方法,希望能共同打造一个更加安全的区块链生态。
公链的发展现状
早期的公链,以山寨币为主,如狗狗币、点点币,大多诞生在 2013 年前后,以比特币作为主要竞争目标,试图创造一个比比特币更优的加密货币。
在 2017 年以太坊生态爆发以后,诞生了大量以以太坊为主要竞争目标的公链,例如 EOS、Solana、Fantom,它们提供更特别的共识机制、更好的智能合约编程平台和更高的交易性能。
然而由于新公链特性复杂,开发人员较少,用户较少,于是不少项目转而使用更加成熟的以太坊解决方案,例如 Polygon、BNB Chain、Ronin,开发者大量利用了以太坊的技术堆栈,使得区块链生态得以快速启动。以太坊二层网络也是当下十分热门的扩容解决方案,通过将零知识证明或欺诈证明技术,将计算外包到链下,大幅度提高交易性能,如 zkSync、Arbitrum、Optimism、StarkWare。
从山寨币到新公链,再到如今的以太坊侧链、二层架构,热点一直在改变,技术一直在进步。对于与公链利益息息相关的用户来说,层出不穷的公链,如何去评估它的安全性呢?
公链安全审计,审的是什么?
尽管没有一个系统可以做到绝对安全,但可以设计和构建适度安全的系统。实际上,如果一个安全系统符合一组特定的安全标准,则可以说它具有一定的信任级别。因此,可将信任构建到系统中,然后进行评估、认证和认可。
安全没有止境,对于公链来说更是如此。一个公链项目,动辄几十万行代码,对每一行源代码进行全量安全审计,看似合理,但所需要付出的时间和成本却是巨量的,对于一个快速发展迭代的行业来说是缺乏可行性的。
没有一层不变的方案,只有不断满足的需求。对于审计来说更是如此,我们需要关注行业的发展动向,了解当前区块链生态中突出存在的安全问题是什么,用户的安全需求是什么,以此为依据来制定安全审计方案,只有这样才能将审计成本控制在一个合理的范围内,同时满足用户的安全需求。
慢雾安全团队结合实际情况,制定了多种公链安全审计方案:
方案一:主网安全审计
从 P2P 网络、RPC 交互、共识账本、加密算法、账号及交易结构等层面排查审计目标是否存在已知的公链安全漏洞,采用“黑盒+灰盒”的策略,以最接近真实攻击的方式对项目进行完整的安全测试。我们关注的漏洞包括:
-
P2P 层:
女巫攻击
日食攻击
窃听攻击
拒绝服务攻击
BGP 劫持攻击
异形攻击
区块时间劫持
-
RPC 层:
窃听攻击
拒绝服务攻击
以太坊黑色情人节漏洞
Http 输入攻击
跨域钓鱼攻击
-
共识层:
长程攻击
贿赂攻击
种族攻击
拒绝产块攻击
抗审查制度
芬尼攻击
Vector76 攻击
替代历史攻击
51% 攻击
磨块攻击
币龄累积攻击
自私挖矿
区块双产攻击
-
加密:
密码攻击
私钥预测
长度扩展攻击
-
交易:
交易重放攻击
交易延展性攻击
时间锁定交易攻击
假充值攻击
权限后门攻击
(漏洞详情可参考:https://github.com/slowmist/Cryptocurrency-Security-Audit-Guide/blob/main/Blockchain-Common-Vulnerability-List.md)
举个例子:日食攻击,通常是由于节点的 P2P 通信被恶意节点完全占据,导致无法连接到正常的对等节点,这时我们可通过审查源代码里 P2P 相关模块,查看节点的最大连接数、单机允许的最大连接数等参数,是否在一个合理的范围,如果处于一个易受攻击的范围那就存在较大的风险,比如未限制单个 IP 的连接数,导致一个恶意主机可对任意节点发起日食攻击。
这种审计方法的特点是审计时长可控,可快速发现问题,避免项目出现常见的漏洞,我们推荐多数项目进行一轮全面的主网安全审计。
方案二:交易所上币审计
此方案审计方法与主网安全审计相同,不同的是审计条目更精简,主要关注账号和交易安全,包含的条目有:
-
私钥预测
-
后门攻击
-
不安全的加密库
-
交易延展性攻击
-
交易重放攻击
-
假充值攻击
-
RPC 盗窃
这种审计方案的特点是审计时长最短,成本较低,适合基于成熟项目二次开发的公链,例如基于 bitcoin-core/go-ethereum/bitshares/EOSIO 等。
方案三:源代码安全审计
源代码审计可以是全量代码,也可以是部分模块。
慢雾团队采用“白盒”策略对目标代码的安全测试,常用的方法有:
1. 静态源代码分析(SAST)
慢雾团队使用开源或商业代码扫描器检查代码质量,我们支持所有流行语言,例如 C/C++/Golang/Rust/Java/Nodejs/C#
2. 手动代码审查
慢雾团队手动逐行检查代码,寻找常见的编码缺陷,例如:
-
状态一致性
-
失败回滚
-
数值溢出
-
参数验证
-
错误句柄
-
边界检查
-
单元测试覆盖率
方案四:社区定制审计方案
我们根据一些公链的特点,定制了安全审计方案,例如波卡(Polkadot)和 Cosmos。
以波卡为例,波卡生态项目使用 Substrate 作为开发框架,开发者可以不用关注底层网络及账本等的实现方式,专注于业务逻辑的实现,我们根据这种情况,舍弃掉了公链审计项目中关于网络层、共识层、密码学等底层模块,增加了一些更加细致的审计条目,如下所示:
-
重放攻击
-
重排攻击
-
条件竞争攻击
-
权限控制攻击
-
区块数据依赖攻击
-
函数状态变量的显式可见性
-
算术精度误差
-
恶意 Event 事件审计
-
状态一致性审计
-
失败回滚审计
-
单元测试审计
-
数值溢出审计
-
参数校验审计
-
错误捕获审计
-
边界检查审计
完整的审计方案已在 https://github.com/slowmist/Cryptocurrency-Security-Audit-Guide 开源。
结语
在过去的几年时间内,已有近百个知名公链项目通过慢雾的不同类型公链安全审计,例如:PlatON、BHD、Acala、Eden、Metis 等,通过在审计过程中的互动,开发团队更加系统地认识到公链安全体系的构建方法,增强了主网的安全性和健壮性,提高用户对项目的认可。
慢雾建议各大项目定期为主网做一次安全审计,一方面能让投资者更放心,另一方面能更好地避免不必要的损失,为生态蓬勃发展添一份力。
往期回顾
慢雾导航
慢雾科技官网
https://www.slowmist.com/
慢雾区官网
https://slowmist.io/
慢雾 GitHub
https://github.com/slowmist
Telegram
https://t.me/slowmistteam
https://twitter.com/@slowmist_team
Medium
https://medium.com/@slowmist
知识星球
https://t.zsxq.com/Q3zNvvF
原文始发于微信公众号(慢雾科技):慢雾 | 公链安全审计方案全面升级,打造更加安全的主网