mt logoMyToken
Market cap:
0%
FGI:
0%
Cryptocurrencies:--
Exchanges --
ETH Gas:--
EN
USD
APP
Ap Store QR Code

Scan Download

欧易程序员1024献礼:链上安全手册

Collect
Share

1. 为什么会有项目风险?

区块链技术由几个内置的安全功能组成,例如密码学、软件中介合同和身份控制。该技术通过启用分布式方式来验证访问、验证交易记录和维护隐私,从而提供显着水平的数据保护和完整性。

然而,尽管有这些安全性增强,区块链市场仍然充斥着安全问题。基于区块链的攻击来自外部参与者以及内部人员。其中许多黑客使用了常见的策略,例如网络钓鱼、社会工程、攻击传输中的数据或针对编码错误。新技术伴随着新的开发工具和方法,区块链也不例外。一种新的网络威胁正在出现,涉及区块链网络独有的策略。其中包括:51% 的攻击、加密劫持、闪电贷攻击、rugpull等

  • 人为风险

人为风险是除技术外的一类因素,端点漏洞也是恶意行为者的入口点,例如设备、应用程序、 钱包 或第三方供应商级别的漏洞。员工和供应商人员也是目标。并非所有的区块链都是平等的,在市场讨论中经常被忽视的是,区块链架构存在很大差异,尤其是在涉及不同结构和组件如何引入安全权衡时。随着区块链的组件、算法和用途不断发展,攻击策略和威胁缓解技术也将不断发展。

  • 缺乏监管

缺乏监管, 智能合约 不能替代合规性 —— 它们不具有法律约束力。从洗钱到假冒,从隐私到诈骗,不明确的监管环境会减缓采用速度,并使网络犯罪分子猖獗。

  • 逻辑漏洞

逻辑漏洞是指由于程序逻辑不严导致一些逻辑分支处理错误造成的漏洞。

在实际开发中,因为 开发者 水平不一没有安全意识,而且业务发展迅速内部测试没有及时到位,所以常常会出现类似的漏洞。

代码漏洞

这是指代码中的一个缺陷,它会产生损害安全性的潜在风险。此漏洞将允许黑客通过附加端点来提取数据、篡改合约或更糟的是擦除所有内容,从而利用代码。

2. 如何定义风险级别?

  • 风险分 (致命、高风险、中风险、低风险、建议)

致命 存在致命风险及隐患,需要立即解决

高风险 存在高危风险及隐患,将引发相同问题,必须解决

中风险 存在中度风险及隐患,可能导致潜在风险,最终仍然需要解决

低风险 存在低风险及隐患,指各类处理不当或会引发警告信息的细节,这类问题可暂时搁置

建议 存在可优化的部分,这类问题可以搁置,但建议最终解决

  • 分级标准 OKLink Audit

定级主要依据漏洞的危害程度、利用难度,辅以其他因素综合判定,其中: 危害程度主要根据机密性影响 (C) 、完整性影响 (I) 、可用性影响 (A) 三个维度定义; 利用难度主要根据攻击向量 (AV) 、攻击复杂度 (AC) 、认证 (Au) 三个维度定义。

欧易程序员1024献礼:链上安全手册

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 机制的代币,代币流通量会跟随币价动态变化,也就可能会导致用户发现自己钱包里面的代币突然减少了或是增多了。我们从用户视角出发设置的代币分类器帮助小白用户快速理解代币潜在风险。

Disclaimer: The copyright of this article belongs to the original author and does not represent MyToken(www.mytokencap.com)Opinions and positions; please contact us if you have questions about content