慢雾 | 公链安全审计方案全面升级,打造更加安全的主网
背景
自 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 等,通过在审计过程中的互动,开发团队更加系统地认识到公链安全体系的构建方法,增强了主网的安全性和健壮性,提高用户对项目的认可。
慢雾建议各大项目定期为主网做一次安全审计,一方面能让投资者更放心,另一方面能更好地避免不必要的损失,为生态蓬勃发展添一份力。