1. 为什么会有项目风险?
区块链技术由几个内置的安全功能组成,例如密码学、软件中介合同和身份控制。该技术通过启用分布式方式来验证访问、验证交易记录和维护隐私,从而提供显着水平的数据保护和完整性。
然而,尽管有这些安全性增强,区块链市场仍然充斥着安全问题。基于区块链的攻击来自外部参与者以及内部人员。其中许多黑客使用了常见的策略,例如网络钓鱼、社会工程、攻击传输中的数据或针对编码错误。新技术伴随着新的开发工具和方法,区块链也不例外。一种新的网络威胁正在出现,涉及区块链网络独有的策略。其中包括:51% 的攻击、加密劫持、闪电贷攻击、rugpull等
人为风险
人为风险是除技术外的一类因素,端点漏洞也是恶意行为者的入口点,例如设备、应用程序、钱包或第三方供应商级别的漏洞。员工和供应商人员也是目标。并非所有的区块链都是平等的,在市场讨论中经常被忽视的是,区块链架构存在很大差异,尤其是在涉及不同结构和组件如何引入安全权衡时。随着区块链的组件、算法和用途不断发展,攻击策略和威胁缓解技术也将不断发展。
缺乏监管
缺乏监管,智能合约不能替代合规性——它们不具有法律约束力。从洗钱到假冒,从隐私到诈骗,不明确的监管环境会减缓采用速度,并使网络犯罪分子猖獗。
逻辑漏洞
逻辑漏洞是指由于程序逻辑不严导致一些逻辑分支处理错误造成的漏洞。
在实际开发中,因为开发者水平不一没有安全意识,而且业务发展迅速内部测试没有及时到位,所以常常会出现类似的漏洞。
代码漏洞
这是指代码中的一个缺陷,它会产生损害安全性的潜在风险。此漏洞将允许黑客通过附加端点来提取数据、篡改合约或更糟的是擦除所有内容,从而利用代码。
2. 如何定义风险级别?
风险分级(致命、高风险、中风险、低风险、建议)
致命:存在致命风险及隐患,需要立即解决
高风险:存在高危风险及隐患,将引发相同问题,必须解决
中风险:存在中度风险及隐患,可能导致潜在风险,最终仍然需要解决
低风险:存在低风险及隐患,指各类处理不当或会引发警告信息的细节,这类问题可暂时搁置
建议:存在可优化的部分,这类问题可以搁置,但建议最终解决
分级标准(OKLink Audit)
定级主要依据漏洞的危害程度、利用难度,辅以其他因素综合判定,其中: 危害程度主要根据机密性影响(C)、完整性影响(I)、可用性影响(A) 三个维度定义; 利用难度主要根据攻击向量(AV)、攻击复杂度(AC)、认证(Au) 三个维度定义。
3. 有哪些常见的安全风险?
风险种类个数(50+)
重入攻击
注入攻击
权限绕过
Mempool抢跑
回滚
条件竞争
循环耗尽gas费
闪电贷高影响
经济模型不合理
可预见的随机数
投票权管理混乱
数据隐私泄露
链上时间使用不当
fallback函数编码不当
鉴权不当
opcode使用不当
内联汇编使用不当
构造函数不规范
返回值不规范
event不规范
关键字使用不规范
未遵循ERC标准
条件判断不规范
流动性枯竭风险
中心化风险
逻辑变更风险
整数溢出
函数可见性不当
变量初始化不当
合约间调用不当
变量不规范
重放攻击
随机存储位置写入
蜜罐逻辑
哈希碰撞
使用不推荐的方法
未遵循基本编码原则
第三方依赖风险
领奖逻辑不当
编码不规范
应急机制缺失
代码逻辑问题
计算精度丢失
无意义的合约
已弃用的合约
精度不匹配
代理使用不规范
资产安全
外部函数调用不当
多次初始化风险
未判断返回值
账户缺少签名者检查
缺少账户可写检查
程序逻辑缺陷
Hash算法使用不当
WriteFile权限过高
业务逻辑存在为题
过时的外部依赖
高频风险种类(高频的前五个)
针对已有的审计项目进行统计,我们发现以下5个风险出现频率较高。
循环耗尽gas
条件判断不规范
中心化风险
未遵循基本的编码原则
业务逻辑存在问题
3.1 它们的具体表现是什么?
每个种类风险的描述
循环耗尽gas:在以太坊区块链中,不能将交易设置为永久运行。交易可以运行直到达到gas限制。一旦发生这种情况,交易将出错,并且将返回“out of gas”错误。
条件判断不规范:智能合约代码中进行条件判断不规范,缺失必要检查。
中心化风险:智能合约部分函数接口权限由单一私钥控制,具有中心化风险。
未遵循基本的编码原则:没有遵循基本的编码原则,如变量命名错误等。
业务逻辑存在的问题:业务逻辑考虑不完善,比如退款情况考虑不周。
4. 行业经典案例与对应案例分析
案例1
北京时间 2022 年 8 月 2 日凌晨,Nomad Bridge 遭受攻击,导致价值约 1.9 亿美元的损失。
OKLink 链上卫士追踪显示,Nomad Bridge 攻击事件共涉及 1251个 ETH 地址,涉及 14 个币种,涉案金额约 1.9 亿美金;其中包含 12个 ENS 地址,ENS 地址涉案金额超 6980 万美金,约占总金额的38%;在利用漏洞获利后,直接进行交易的地址数达 739 个,占比近60%。但值得注意的是并不是所有地址都是恶意攻击,已知已有白帽骇客公开表态愿意归还资金,OKLink 已对剩余的地址进行了监控,后期若发生异动,会通过微博、推特向用户同步。
案例分析(OKLink Audit)
对 Replica 合约的 process 函数进行分析,在require(acceptableRoot(messages[_messageHash]), “!proven”);这个判断条件中,messages[_messageHash]的值需要经过 acceptableRoot 函数的逻辑检验,返回值为 true 才能继续往下执行。
注意到 acceptableRoot 函数中,传入的 _root 参数,在confirmAt[_root] 大于 0 且小于等于block.timestamp的情况下,就会返回 true。
那么该漏洞的核心就在对confirmAt这个 mapping 赋值的过程。从initialize函数输入参数可以看到,_committedRoot使用了0x00。一般情况使用0值做初始化参数没有问题,但是在Nomad的这个场景下,就导致了任意message都能通过检测的安全漏洞。
链上卫士分析师建议在initialize函数中也进行严格的安全检查和判断。
案例2
北京时间2022年10月7日凌晨,BNB Chian跨链桥BSC Token Hub遭遇攻击。黑客利用跨链桥漏洞分两次共获取200万枚BNB,价值约5.66亿美元。
案例分析
BSCTokenHub是BNB信标链(BEP2)和BNB链(BEP20 或 BSC)之间的跨链桥。BNB链使用预编译合约0x65验证BNB信标链提交的IAVL的Proof,但BNB链对提交的Proof边界情况处理不足,它仅考虑了Proof只有一个Leaf的场景,对多个Leaves的处理逻辑不够严谨。黑客构造了一个包含多Leaves的Proof数据,绕过BNBChain上的校验,从而在BNB链造成了BNB增发。
5. 合约审计的业务流程
智能合约审计是审查用于与加密货币或区块链交互的智能合约代码的综合过程。执行此过程是为了发现代码中的错误、问题和安全漏洞,以便纠正和修复它们。它可以保护代码免受未来潜在错误的影响。
OKLink Audit采用静态扫码和人工验证相结合的审计方式,从根源处检查项目,确保项目安全。审计团队还拥有严格的漏洞评级标准,对每个漏洞设置三个级别的评分,分别是基础评分、时间评分和环境评分,确保审计结果的准确、专业。当然,专家团队也会提供针对性的修改建议,提升项目的安全性、隐私性及可用性。目前参与审计的项目涵盖公链、DeFi、L2、稳定币、钱包、NFT等多个板块。
2021 年,因黑客攻击、漏洞利用和欺诈造成的损失达到 13 亿美元。
2022 年第一季度,攻击型安全事件造成的损失高达约 12 亿美元,比去年同期(2021 年第一季度)的 1.3 亿美元增长了约 9 倍。它也高于 2021 年任何一个季度的损失金额。
在被攻击的项目中,70% 由第三方审计机构审计。然而,在剩下的 30% 未经审计的项目中,因攻击而遭受的损失占总损失额的 60% 以上。
6. 推荐哪些自动化审计工具?为什么?
智能合约静态扫描工具:slither, mythril
Slither
Slither是第一个开源的针对Solidity语言的静态分析框架。Slither速度非常快,准确性也非常高,它能够在不需要用户交互的情况下,在几秒钟之内找到真正的漏洞。该工具高度可配置,并且提供了多种API来帮助研究人员审计和分析Solidity代码。
Slither在检测智能合约漏洞时,其功能优于其他静态分析工具,在速度、检测准确性方面都有着先天优势。Slither包含了一整套针对Solidity(以太坊智能合约脚本语言)的专用静态分析工具,它可以用来检测可重用性、构造函数和方法访问等编码中的常见错误。
Mythril
Mythril是以太坊的官方合约漏洞检测工具,可以检测大量的智能合约安全问题,如整数溢出,任意地址写入,时间戳依赖等14种漏洞检测工具。可以发现常规漏洞,但是无法发现一个合约的业务逻辑问题,主要思想是利用符号执行去探索所有可能的不安全的路径。
Mythril集成了符号执行、控制流检查、污点分析等技术,并支持自定义漏洞检测逻辑来对智能合约进行分析,同时,Mythril由于可以通过多次符号执行来模拟现实区块链和智能合约被多次调用的情况,但是对于某些漏洞如重入、拒绝服务攻击的误报率比较高,也无法检测出一些常规逻辑错误。并且由于Mythril由于存在着多次符号执行,要探索的路径数量更多,也带来了较大的时间和空间开销。
7. 普通用户如何规避风险及如何应对已发生事件?
风险判断及检测工具(OKLink Audit)
1. TokenScanner
TokenScanner是OKLink Audit第一个对外推出的产品,目前有B端API产品,以及C端页面产品,也在和一些区块链钱包团队接洽帮助进行进行整套安全加固方案的建设。
目前API产品里面支持了9条EVM链的风险代币检测能力:POLY,OP,ARB,FTM,AVAX,OKC,TRON,页面上支持了ETH和BSC,其他链正在开发中,年底之前页面上会支持全部9条链的风险检测项,通过代币检测能力,我们检测了3,534,306 代币,通过我们的风险扫描,确定了106,474 个风险代币。
2. ArgusEye
结合OKLink的底层大数据能力与标签能力,针对这些数据信息我们对风险事件中的事发地址和上下游地址进行破解与规律性总结,搭建了一套可疑地址和风险交易的实时发现、跟踪分析及响应处置的机制。也会针对可能的安全事件做安全播报
风险应对(OKLink Audit)
1. TokenScanner
页面产品主要有3个产品功能:
1.风险扫描,基于代币模拟交易,合约分析,代币在DEX中的流动性,以及链上代币持有者信息,我们拥有4部分检测能力。
2.基于OKLink大数据能力,我们自研一套代币打分规则对代币进行打分,10分以下是极高风险代币包括有貔貅盘代币和rug pull代币,是高危预警建议用户不要购买,10-40是高风险,建议用户也不要持有该代币,40-80是中风险,80-100是低风险,用户可以自行斟酌购买。
3.代币分类器,对于特殊实现标准的代币通过分类器进行展示,类似于ERC677和777与某些DEX协议不兼容,可能会导致用户无法正常买入卖出,以及有rebase机制的代币,代币流通量会跟随币价动态变化,也就可能会导致用户发现自己钱包里面的代币突然减少了或是增多了。我们从用户视角出发设置的代币分类器帮助小白用户快速理解代币潜在风险。