首发 | 2020年区块链安全态势感知报告_NBS:bspt币未来前景

本文由国家互联网应急中心主编,授权金色财经首发。

主编:国家互联网应急中心

联合编制:成都链安科技有限公司

北京长亭科技有限公司

苏州链原信息科技有限公司

杭州派盾信安科技有限公司

天融信科技集团股份有限公司

北京知道创宇信息技术股份有限公司

杭州安恒信息技术股份有限公司

北京众享比特科技有限公司

真相网络科技(北京)有限公司

一、 2020年区块链安全状况综述

1. 2020年区块链安全状况

2. 2020年区块链安全事件监测情况

2.1. 公链安全事件发展趋势

2.2. 智能合约安全事件发展趋势

2.3. 外围系统安全事件发展趋势

二、 区块链重大突发安全事件论述

1. DeFi相关事件

2. /钓鱼相关事件

3. 勒索软件相关事件

4. 交易平台相关事件

5. 数字钱包相关事件

6. 公链相关事件

7. 其它相关事件

三、 攻击原理分析

1. 合约漏洞

2. 业务逻辑缺陷

3. DDoS攻击

4. 51%算力攻击

四、 CNVD区块链漏洞例举

1. 高危漏洞

2. 中危漏洞

五、 其他安全问题

1. 弹性供应漏洞

2. 清算漏洞

3. 时间锁定漏洞

六、 对策建议

参考文献 

2020年区块链安全状况

随着区块链技术的快速发展,以及项目与应用的数量不断增多,与之而来的相关安全事件的发生也变得频繁。据国家区块链漏洞库不完全统计显示,2020年度区块链领域发生的安全事件数量达555起,分别包括DeFi安全事件103起、/钓鱼事件204起、勒索软件事件143起、交易平台安全事件31起、数字钱包安全事件41起、公链安全事件17起以及其它安全事件16起,相比于2019年增长了近240%;所造成的经济损失高达179亿美元,环比2019年增长了130%。综上所述,全年区块链安全威胁风险等级为高,亟需各方高度重视。本章将从宏观角度对全球区块链安全态势进行分析。

2020年区块链安全事件监测情况

2020年区块链公链安全事件主要有17起,发生月份主要集中在7月、8月以及11月,其中11月安全事件发生数量最多,有4件。

图 1-2-1 全年区块链公链安全事件统计图 

2.智能合约安全事件发展趋势

2020 年区块链智能合约安全事件共 53 件,主要集中在 4 月、7 月、8 月、9 月、10 月以及 11 月,其中 11 月安 全事件发生数量最多,有 13 件。

图 1-2-2 全年区块链智能合约安全事件统计图 

3. 外围系统安全事件发展趋势

外围系统包括数字资产交易平台、中心化钱包、去中 心化钱包、矿池/矿场、矿机这五部分。2020 年全年区块 链外围系统安全事件共 183 起,主要集中在 5 月、6 月、 9 月以及 10 月,其中 5 月份安全事件发生数量最多,有 38 件。

图 1-2-3 全年区块链外围安全事件数量统计图

本章将针对六个安全事件高发领域进行重点分析。全年发生的安全事件多集中在 DeFi 领域,应用数量多,安 全技术不够完善,使用者安全意识差等都是导致 DeFi 领 域安全事件频发的原因。下面本文将对 DeFi、/钓鱼、 勒索软件、数字资产交易平台、钱包、公链和其它等领域 进行讨论并重点分析各领域的重大安全事件。

1.DeFi 相关事件

2020 年,据国家区块链漏洞库监测,DeFi 安全事件共 发生 103 起,集中在 7 月、8 月、9 月以及 11 月,主要因 为 DeFi 在 2020 年下半年开始有大量项目以及应用产生, 而随着项目以及应用增多,导致发生的安全事件显著增 多,其中 11 月安全事件发生数量最多,有 25 件。

图 2-1-1 全年 DeFi 安全事件数量统计图

智能合约还处于发展初期,相关业务逻辑的设计复杂、 代码实现不严谨、以及协议的灵活可组合性带来了许多潜 在的风险。目前智能合约正被迅速应用到各类 DeFi 项目中,DeFi 已然成为智能合约最大的应用场景。智能合约 的应用加快了去中心化金融的发展进程,但是由于代码开 源相互引用复制、功能繁多、运用灵活、开发者水平参差 不齐等特点,DeFi 项目中各类智能合约安全事件频发, 再加上大量虚拟数字资产存放在 DeFi 项目里面,使 DeFi 成为了黑客攻击的重点目标。

闪电贷本身是 DeFi 领域的创新,允许用户在无任何抵 押的情况下从中借出任何数量的可用资产,由于其无抵押 的性质,使其成为很多黑客实施攻击的本金。 如果该功能被黑客加以利用,就将导致安全事件的发生。黑客可以利用闪电贷借出高额资金,在某些平台上进行虚拟资产兑换,由于其数额巨大,致使平台上虚拟资产 价格异常变动,之后再将其资金赎回,使其虚拟资产价格 恢复正常,攻击者在这来回变动的价格基础上,从中进行 巨额套利。

本文通过从攻击方法、造成的损失和组合性风险 3 个 方面,挑选出 6 个具有代表性的攻击案例。前 3 个案例攻 击者通过利用闪电贷,操纵市场价格来进行套利,后 3 个案例是通过重入漏洞对项目进行攻击,下面本文将介绍黑 客具体是如何发起攻击并最终获利的。(该分析报告仅供 技术交流,请勿采用以下方法进行操作,否则后果自负)。 

(1) bZx 协议攻击事件北京时间 2020 年 02 月 15 日,bZx 协议遭受到第一次 攻击,攻击者获利大约 355,880 美元,项目方暂停除了借贷外的其他功能。北京时间 2 月 18 日,bZx 协议再次遭 到黑客攻击,攻击者通过控制预言机上虚拟资产价格的方 式从中获利。下面本文对第二次攻击进行简单分析介绍。 根据交易记录显示,首先攻击者通过闪电贷贷入了 7500 个 WETH,作为攻击的启动资金,如图 2-1-2 所示。

然后,攻击者拿出 540 个 WETH 来兑换 sUSD,总共兑换 了 92419.7 个 sUSD,如图 2-1-3。

图 2-1-3 交易流程

通过本次兑换,使得 sUSD 的价格在 Uniswap 上飙升, 接下来,攻击者以 20 个 WETH 为一组,进行了多次的 sUSD 兑换,如图 2-1-4 所示。

图 2-1-4 交易流程

而后,攻击者又从Synthetix上购买了 943837.58 个 sUSD,如图 2-1-5,此时,攻击者手中存在大量 sUSD,sUSD 的价格畸高。

图 2-1-5 交易流程

最后,攻击者将兑换来的 1099841.39 个 sUSD 通过 bZx 全部兑换为 WETH,共计兑换 6796 个 WETH。

图 2-1-6 交易流程图 2-1-7 交易流程

加上之前剩余的 WETH,攻击者共有 9878 个 WETH;在 归还完借来的7500WETH以后,攻击者共获利2378个WETH。 整个攻击流程如图 2-1-8 所示。图 2-1-8 攻击过程图

 (2) Harvest Finance 攻击事件

北京时间 2020 年 10 月 26 日,Harvest Finance 遭受 闪电贷攻击,该攻击事件共造成 2400 万美元的损失。本 次攻击是由于黑客控制预言机上数字货币价格导致的。 攻击者首先从闪电贷 UniswapV2 贷出 1800 多万 USDT 和 5000 万 USDC,并将 USDT 通过 Curve 兑换成 USDC,如 图 2-1-9。

图 2-1-9 交易流程

接下来黑客再向 Harvest 中存入 5000 万的 USDC,由于 上一步 USDT 兑换 USDC 的操作,使得 Curve y 池中 USDC 价格上升。与此同时,黑客将获得 Harvest 所铸 fUSDC, fUSDC 的价值将高于当时存入的 5000 万,如图 2-1-10。

图 2-1-10 交易流程

接下来,黑客再次通过 Curve,使用之前兑换的 USDC 将 USDT 赎回,并将 USDC 的价格拉回了正常水平。

图 2-1-11 交易流程

最后,黑客将获得的 fUSDC 全部兑换回 USDC,由图可 以看出,扣除手续费后,黑客最终获得 50,298,684 个 USDC,总共获利近 30 万 USDC,如图 2-1-12 所示。

图 2-1-12 交易流程

在这之后,黑客利用该攻击方式进行多次攻击。

图 2-1-13 交易流程

最终通过该攻击手法,黑客获利超 2400 万美元。

(3) Value DeFi 协议攻击事件

北京时间 2020 年 11 月 15 日,Value DeFi 协议遭受闪 电贷攻击,本次攻击是由于黑客操控 DAI/USDC/USD 池中 的价格引发的。

首先,攻击者通过闪电贷贷出 80000ETH 以备攻击使用。 其次,攻击者先通过 Uniswap V2 兑换出 116,000,000 个 DAI 与 31,000,000 个 USDT,如图 2-1-14。

图 2-1-14 交易流程

再 次 , 攻 击 者 将 2500 万 DAI 充 值 进 ValueMultiVaultBank 合约,如图 2-1-15,计算铸币 时会将 DAI 转换为 3CRV,此处铸了 2495.6 万的 3CRV,并 且攻击者获得与之等价的 mvUSD。

图 2-1-15 交易流程

此时,攻击者将剩下的 9100 万 DAI 和 3100 万 USDT 通 过 Curve 兑 换 成 USDC , 如 图 2-1-16 , 这 将 导 致 DAI/USDC/USD 池中 USDC 价格升高。

图 2-1-16 交易流程

完成兑换后,攻击者利用 mvUSD 提出 3CRV,由于上一 步的操作使得 USDC/3CRV 的值抬高,本次兑换将兑换出高 于之前所铸的 2500 万 3CRV,本次兑换获得 3309 万 3CRV, 如图 2-1-17。

图 2-1-17 交易流程

最后,攻击者紧接着通过 Curve 将 USDT 和 DAI 赎回, 并将 3CRV 兑换成 DAI,此次将兑换超 3300 万的 DAI,如 图 2-1-19,相比于之前存入的 2500 万 DAI 攻击者共获利 800 万 DAI。

图 2-1-18 交易流程

图 2-1-19 交易流程

 (4) Pickle Finance 被攻击事件

北京时间 11 月 22 日,DeFi 项目 Pickle Finance 遭到 黑客攻击,本次攻击事件是由于重入漏洞导致的,损失金 额高达 2000 万美元。

经国家区块链漏洞库国家区块链漏洞库技术专家团队 分析 ,合约漏 洞 存 在 于 ControllerV4 合 约 中 的 swapExactJarForJar 函数。从代码中可以看到,该函数共传入了六个参数;前四个参数攻击者分别可控, _fromJar、_toJar、_fromJarAmount、_toJarMinAmount, 通过可控函数,攻击者可以传入非法参数进行攻击。如图 2-1-20。

图 2-1-20 合约代码

攻 击 者 首 先 将 自 己 的 合 约 地 址 填 入 _fromJar 与 _toJar,并将_fromJarAmount 的值设为被攻击合约的账 户余额,约 2000 万。函数首先会取出_fromJar 与_toJar 的 token 地址,由于该参数被攻击者控制,攻击者可以调 用_fromJar 的 safeTransferFrom 函数,将数值 2000 万 作为参数传入合约,如图 2-1-21。

图 2-1-21 合约代码

随后,程序判断了合约中的 DAI 数量是否能达到攻击 者的兑换要求;如果不足,则通过其他方式兑换来补足 DAI 的差值,如图 2-1-22。

图 2-1-22 合约代码

最后,程序将账户中的 DAI 转移到攻击者账户上,攻 击者通过此攻击方法获利。如图 2-1-23。

图 2-1-23 合约代码 

(5) Lendf.Me 项目被攻击事件

北京时间 4 月 19 日,DeFi 项目 Lendf.Me 遭到黑客重 入攻击,攻击者不间断的利用合约重入漏洞对其发起攻 击,从而使自己的余额持续翻倍,最后掏空整个 Lendf.Me 的账户。经分析,该漏洞存在于 Lendf.Me 合约中 supply 函数。该漏洞导致黑客可以在 Lendf.Me 账户中余额不变 的情况下将余额取出。接下来从代码层面来分析本次攻击 事件发生的根本原因以及攻击流程。

首先浏览整个 supply 函数代码逻辑,可以发现该函数 流 程 首 先 获 取 了 用 户 当 前 的 账 户 余 额 并 保 存 在localResults.userSupplyCurrent 变 量 中 , 紧 接 着 , supply函数将用户当前账户余额与本次传入的参数相加, 得到了用户本次调用 supply 函数后最新余额值,并放在 localResults.userSupplyUpdated 变量中,如图 2-1-24。

图 2-1-24 合约代码

接下来 supply 函数调用了 doTransferln 函数,该函 数会调用到用户的钩子函数 tokensToSend,如图 2-1-25。

图 2-1-25 合约代码

此时,攻击者在自身钩子函数中,通过调用 Lendf.Me 合约中的 withdraw 函数,取出了自己的账户余额。 而程序回到 Lendf.Me 合约继续执行,在函数结尾处更 新用户余额,如图 2-1-26。

图 2-1-26

合约代码 由于之前程序已将攻击者最新余额赋值给了临时变 量,所以此时程序所用数据是攻击者取出余额之前的数 值,而并非当前最新余额值。因此,该合约执行完毕后, 攻击者余额并未减少,从而达到了窃取资产的目的。整个 攻击过程如图 2-1-27 所示。

图 2-1-27 攻击过程图

(6) OUSD 遭“经典重入攻击”事件

在本次攻击中,首先,攻击者通过 dYdX 闪电贷贷出 7 万枚 ETH,并将 ETH 兑换成了相应的 USDT 和 DAI。

其次,攻击者向 Vault 中转入 750 万的 USDT,从而使 自己的资产在 Vault 中占比达到 50%以上。

接下来,攻击者调用合约中的 mintMultiple()函数, 并将 2,050 万枚 DAI 与恶意合约中的虚假参数传入,铸币 函数接收到 2,050 万枚 DAI,但是在访问另一个参数时其 实调用的是攻击者的恶意合约,为了触发 rebase(),攻 击者在攻击合约中再次存入 2,000 枚 USDT。正常合约在 转账之后,会进行结算,更新 Vault 总价格,然后通过 rebase()进行分配,但此时合约被劫持,还未将这 2,050 万的 DAI 算入 Vault 总价格,所以在进行 rebase()的时 候,会将这 2,050 万枚 DAI 全部当作收益进行分配。

由于攻击者在 Vault 中占比超过 50%,所以攻击者会在 没有任何付出的情况下分配到超 1,025 万的 DAI;之后合 约正常执行,攻击者又获得由 oUSD.mint 所铸的 OUSD, 其价格与存入 DAI 相等。 最后,攻击者赎回之前存入的资金,并将获得的资金 归还闪电贷。最终,攻击者获利大约 33,27 万枚 OUSD。 攻击过程如下图 2-1-28 所示。

图 2-1-28 攻击过程图 

2./钓鱼相关事件

2020 年,据国家区块链漏洞库监测,/钓鱼安全事 件共发生 204 起,发生月份主要集中在 4 月、5 月以及 9 月,其中 4 月安全事件发生数量最多,有 40 件。

图 2-2-1 全年/钓鱼安全事件数量统计图

目前区块链技术发展时间较短,而且对于用户有一定 门槛要求,大多用户缺乏相关技术知识或者安全意识相对 薄弱,给了分子可乘之机。下面本文选出了具有代表 性的 3 个事件进行分析和讨论。

 (1) PIEXGO 事件

PIEXGO 是由一名叫做大空翼的人所创办的一家交易平 台,这位创始人之前在两年的时间内通过 IOTA 众筹达到 了 3.6 万倍的收益率,当时使用单价 0.001 元众筹了 10 万元的 IOTA,两年之后涨至单价 36 元。PIEXGO 平台吸引了大量追随者,短短一个月的时间, 大空翼就通过该平台的 PXG 币募集到约 1.5 亿人民币的 ETH。但在 PXG 上线交易前,原定的 10 亿发行量突然增发 10 倍,共发行了 100 亿,这使得 PXG 的价格出现断崖式下跌, 原本 0.06 元的募集价格,一度下跌至 0.01 元甚至归零。

在今年 5 月 26 日平台发布公告称其技术团队无法满足 平台发展,需将其关闭,而且平台 CTO 不配合交接而导致 无法提币,用户无法在其关闭之前将资产提出。

 (2) DCFplus 跑路事件

“DCFplus”项目上线后,最开始以 0.15 美元的价格 认购,但是 DCFplus 币大多被内部人员购走。 之后项目方通过场外大肆宣扬炒作,以 4 美元左右的 价格卖给他人,之后项目策划者又以 1 美元左右的价格进 行收购。一来一回,就取了投资人 70%左右的资金。最 后项目方携带取的赃款跑路。

 (3) Twitter 大规模入侵事件

北京时间 2020 年 7 月 15 日,Twitter 遭受到了史上最 为严重的安全事故,黑客通过入侵 Twitter 系统从而获得 用户账户权限。受害人群包括政界与商界名人,如:奥巴 马、拜登、比尔盖茨、巴菲特等,还包括大型互联网公司, 如:苹果、优步等。黑客通过他们的 Twitter 账号向外发送推文,称将比特币发送到特定地址,发送者将获得双倍 比特币的返还,这条推文其实是一条钓鱼信息。

截止事件发生当日,该特定地址已经收到超过 12 枚比 特币。折合人民币 80 多万元。

3.勒索软件相关事件

2020 年,据国家区块链漏洞库监测,勒索软件安全事 件共发生 143 起,发生月份主要集中在 6 月、8 月、9 月、 10 月、11 月以及 12 月,其中 10 月安全事件发生数量最 多,有 18 件。

图 2-3-1 全年勒索软件安全事件数量统计图

勒索软件选择的攻击目标大多是一些国有企业、大型 私人企业等,如加油站、医院、军队、学校等,这些机构 具有数据量大、数据机密、数据时效紧迫等特点,一旦被 勒索软件攻击,大多企业为了减少损失,会选择支付赎金。 而由于区块链上用户都是匿名的特性,资金转移后也很难 追回,所以大多黑客利用勒索软件进行勒索时往往都采用 加密货币的支付方式,这也为案件侦破带来了极大的困 难。下面本文选出了具有代表性的 2 个安全事件进行简要 分析。

 (1) 美国差旅公司 CWT 遭到黑客勒索软件攻击

美国差旅公司 CWT 受到勒索软件攻击,导致该公司 30 万台电脑被黑客锁定,该公司已向黑客支付了 450 万美元 的比特币赎金。 该黑客使用的是一款名为 Ragnar Locker 的勒索软件, 该软件通过加密计算机的文件来进行勒索攻击,被勒索软 件加密的文件将无法使用,只能通过黑客给出的密钥才能 够解密,而攻击者给出密钥的条件就是支付相应赎金。最 后 CWT 公司支付了 450 万美元的赎金。

 (2) 加州大学旧金山分校被勒索软件攻击。

加州大学旧金山分校被一个名为 Netwalker 的黑客团 伙进行了勒索软件攻击,被攻击后,该攻击者通过邮件向 该校发送赎金通知,并要求对方支付 300 万美元的赎金。 加州大学由于新冠疫情的影响,回复攻击者只能支付 78 万美元。最终经过双方谈判,加州大学支付了 116.4 个比特币(约 114 万美元),之后黑客也将解密程序发送给 了该校。

4.交易平台相关事件

2020 年,据国家区块链漏洞库监测,交易平台安全事 件共发生 31 起,发生月份主要集中在 2 月、5 月、9 月以 及 10 月,其中 5 月安全事件发生数量最多,有 5 件。

图 2-4-1 全年交易平台安全事件数量统计图

交易平台具有交易频繁、资金流动量大、系统庞大等 特点,系统维护难度相对较大,使得攻击者针对交易平台 进行攻击的频率相对较高。本文归纳了 4 个热点事件。

 (1) 交易平台 Travelex 遭受恶意软件攻击

位于伦敦的交易平台 Travelex 受到恶意软件攻击,导 致该网络系统长时间保持脱机状态,并且影响到了其服务 的相关企业,致使某些企业网络服务也处于脱机状态。黑 客要求其支付 230 万美元的赎金。

(2) 加密交易平台 Liquid 遭入侵

北京时间 11 月 13 日,Liquid 交易平台遭黑客入侵, 攻击者通过更改 DNS 记录,控制了内部大量电子邮件账 户,导致攻击者能够破坏部分基础设施以及访问交易平台 的文档。 目前,攻击者可能已经窃取了用户姓名、地址、电子 邮件、密码等信息。所幸用户资金未被窃取,相对安全。

 (3) 库币热钱包被盗

北京时间 9 月 26 日,库币热钱包发生盗窃事件,本次 事件共造成约 1.5 亿美元的虚拟资产损失,事件发生主要 原因是由于钱包私钥被泄露。 而与往常黑客不同的是,本次黑客在盗出大量虚拟资 产后,并未按照往常黑客那样销声匿迹或通过各种方式洗 币,而是将虚拟资产分别转到各大交易平台进行套现,随 后库币在联系各大中心化交易平台后,对黑客所盗的资金 进行了冻结。

 (4) 交易平台 Eterbase 遭到黑客攻击

加密货币交易平台 Eterbase 被黑客攻击,其中六个钱 包被入侵,其内 540 万美元的资金被盗走。 黑客将盗取的资金通过交易平台兑换成其他虚拟资 产;而交易平台表示,他们有足够的资金来弥补此次损失。

5.数字钱包相关事件

2020 年,据国家区块链漏洞库监测,数字钱包安全事 件共发生 41 起,发生月份主要集中在 3 月、7 月、8 月以 及 10 月,其中 8 月安全事件发生数量最多,有 13 件。

图 2-5-1 全年数字钱包安全事件数量统计图

数字钱包存有大量资产,一旦被黑客掌握,不用通过 各种复杂的攻击方式,就可将其中的资金洗劫一空,下面 选出了 2 个具有代表性的安全事件进行简要分析。 

(1) 巨鲸账号“zhoujianfu”遭受黑客攻击

2020年钱包被盗事件中,最为引人注目的是巨鲸账号 “zhoujianfu”遭受黑客攻击事件。然而本事件并非为链 上攻击,而是通过 SIM 卡进行假冒身份攻击。 当黑客得知了受害人真实身份信息后,通过某些手段 拥有了受害人的 SIM 卡权限,通过 SIM 的验证码机制,将 其钱包账号权限劫持,随后将其资产盗出,总共盗出资产 价值约 2.6 亿人民币。

被盗出的 BTC 被攻击者通过复杂的手段进行洗币,使 得资金的追踪难度大大增加。据消息称,在进行资金转移 的过程中其中一些虚拟资产已流向交易平台。

 (2) Nexus Mutual 创始人个人钱包被攻击

2020 年 12 月 14 日,DeFi 保险平台 Nexus Mutual 创 始人私人钱包遭受到黑客的攻击,此次攻击是因为黑客修 改了受害人计算机上的 MetaMask 插件所导致的,造成了 800 万美元的损失。

当受害人使用硬件钱包进行交易的时候,被攻击者修 改的 MetaMask 插件出现了一笔恶意交易,使受害人误以 为此笔交易是自己将要进行的交易,就将此笔交易进行了 批准,随后这笔资金就转到了攻击者的地址中。

虽然攻击者并未盗取到受害人的钱包私钥,也未盗取 受害人的身份信息,但攻击者通过技术手段加上带有诱 的攻击方式,成功的实施了攻击。

6.公链相关事件

2020 年,据国家区块链漏洞库监测,公链相关安全事 件共发生 17 起,发生月份主要集中在 7 月、8 月以及 11 月,其中 11 月安全事件发生数量最多,有 4 件。

图 2-6-1 全年公链安全事件数量统计图

随着量子计算机的出现,以及挖矿硬件租赁市场的存 在,使得 51%攻击成为可能。本小节选出了 3 个具有代表 性的公链安全事件进行简要分析。

 (1) Filecoin 测试网无限增发漏洞

2020 年 5 月 28 日,某技术团队发现 Filecoin 测试网 存在无限增发漏洞。之后,该技术团队通过该漏洞实现了 48 亿枚 FIL 的增发,从而验证了漏洞的有效性。在无限 增发漏洞原理公布之后,已经有用户增发了 93 亿枚 FIL 在测试网上。前后总共增发量超 198 亿枚 FIL。FileCoin 团队在发现该漏洞后及时修复了漏洞。

 (2) Aeternity 遭 51%攻击

2020 年 12 月 7 日,Aeternity 遭受到 51%攻击,此次 攻击黑客共进行了 3 步操作。首先黑客在 12 月 3 日收集 大量 AE 作为攻击成本,总额高达 2900 万;12 月 6 日, 攻击者挖出了一条未公开的链,此链长于公链,并在较长 链上向自己的账户转入 2752 万 AE,随后在公链将 AE 花 掉;12 月 7 日,攻击者将较长链广播出去,从而较长链 得到了认可,攻击者向自己转入 2752 万 AE 的交易被正常 打包,使得资产再次回到自己账户中,而之前花费的 AE 失效。本次攻击造成近 400 万美元的损失。

 (3) ETC 遭遇 51%攻击

2020 年 8 月,ETC 共遭受到了 3 次 51%攻击。8 月 1 日, ETC 遭受到第一次攻击,此次攻击导致 3000 多个区块重 组,攻击者获利超 560 万美元;8 月 6 日,ETC 遭受到第 二次攻击,此次攻击导致 4000 多个区块重组,攻击者获 利超 170 万美元;8 月 30 日,ETC 遭受到第三次攻击,此次攻击导致 7000 多个区块重组,攻击者第三次获利尚不 明确。 

7.其它相关事件

2020 年,据国家区块链漏洞库监测,其它区块链相关 安全事件共发生 16 起,这些事件主要集中在 6 月和 8 月, 分别发生 3 件。

图 2-7-1 全年其它安全事件数量统计图

 (1) 俄罗斯宪法修正案电子投票系统的区块链遭到攻击

2020 年 6 月 27 日,基于区块链技术的俄罗斯宪法修正 案电子投票系统遭到攻击。受到攻击之后俄国政府表示, 网络安全专家已经在努力对所受攻击的节点进行修复,但 尚不明确是否修复成功。虽然遭到黑客攻击,但本次电子 投票也将成功写入区块链上,该事件并未造成系统故障。 

(2) ICON 软件更新出现漏洞

2020 年 8 月 22 日,ICON 发布了一个新版本软件,该 软件存在漏洞,一个名叫 Shin 的用户利用该漏洞为自己 铸造了大约 1400 万个 ICX。随后 ICON 联系交易平台冻结 了他的帐户,并称他为“恶意攻击者”。但 Shin 表示他 并未违反任何规定,因此他的行为并不属于计算机欺诈和 滥用行为。 

(3) Plus Token 网络案件

2020 年 11 月 26 日,“Plus Token”网络案在江 苏省盐城市宣判。犯罪团伙成员被判处 2-11 年不等的有 期徒刑并处罚金 12 万至 600 万不等。该案件是机关 破获的首起以数字货币为交易媒介网络案,涉案资金 总额高达 400 亿元。 

2020年区块链安全事件的攻击原理主要有合约漏洞、 DDoS 攻击、51%算力攻击以及业务逻辑缺陷等,其中,合约漏洞攻击发生最多,达 45 次,占比 66%;业务逻辑缺 陷发生 12 起,占比 16%;DDOS 攻击发生 9 次,占比 12%; 51%攻击发生了 8 次,占比 11%。

图 3-0-1 攻击事件原理分布图

1.合约漏洞

智能合约在区块链系统扮演重要的角色,由于合约代 码的开源性、合约中承载了大量的虚拟数字资产等特性, 使得智能合约成为越来越多黑客的攻击目标。下面本文选 出了合约漏洞中的 3 个经典漏洞进分析和讨论并给出了 相关的防护建议。 

(1) 重入漏洞

以太坊允许在一个智能合约中调用另一个合约,而如 果调用的合约是攻击者的恶意合约,那么攻击者可以重新 发起对该合约的调用,从而导致在合约第一次还未执行完 的情况下,就错误的进入到一些恶意操作中。比如,在通过正常合约进行资金转入操作的时候,如果正常合约未对攻击者传入的参数进行检查,就极易发生 重入攻击。当攻击者传入的是自己的恶意合约地址,在调 用外部合约的时候,则会进入攻击者的恶意合约执行;之后,恶意合约可以再次调用正常资金转入合约,此时合约 通过攻击者的余额增量来为攻击者计算所提供铸币数量, 攻击者在第一次调用正常合约时可以传入 0,而在恶意合 约第二次调用正常合约时传入 100,那么第二次调用的正 常合约将为攻击者提供相应数量的铸币,但由于第二次调 用的正常合约操作结束时,第一次调用到正常合约操作尚 未结束,攻击者的余额增量已经是 100 了,而非第一次传 入的0,因而正常合约再次为攻击者提供相同数量的铸币。 最终,就将导致攻击者存入一次资金,却获得了两份相同 价值的铸币。攻击流程如下图 3-1-1 所示.图 3-1-1 重入攻击原理图

再比如,同样利用上述方式,若资金转入合约在调用 外部合约之前,将攻击者的余额存放于变量,则攻击者就 可以在攻击合约中调用相关余额提取函数,在正常合约执 行完毕之前将余额提出,而最后正常合约函数使用之前的 余额变量将攻击者余额进行更新,这就将导致黑客取出了 资产,但余额并未改变。攻击流程如下图 3-1-2。

图 3-1-2 重入攻击原理图

重入漏洞发生的原因主要有两方面:一是未对参数进 行检查和筛选,二是代码先后逻辑设计不严谨。如何降低 重入攻击风险?开发者需要在设计以及编写代码过程中 时刻保持严谨的心态,并加强安全审计工作的开展。例如, 可以在合约中添加检验标志,用来表示合约是否执行完 毕,若检测到该合约已经被用户调用过且还未结束,则退出合约执行;对于第一种一份资金获得两份等价铸币攻击 方式,可在合约最开始算出所需提供铸币的数量,而非在 调用了外部合约之后再进行计算,这样就可以避免将第二次存入的资金当作第一次存入资金来计算需要提供的铸 币数量;而对于第二种取出余额但余额不变的攻击方式, 可在合约最后再计算用户余额值,这样当攻击者中途取出 余额后,合约也能按照当前最新余额来进行计算,而非攻 击者除去余额前的值进行计算。 

(2) 整数溢出漏洞

程序中每个变量在储存数据时,都有一个数据类型, 而一般数据类型都有一个特定的长度,这个长度能表示出 该变量能存储数据的最大值;超过该最大值,则会导致溢 出。例如,当需要利用加法或乘法来计算转账总额时,若 运算方式只是简单的赋值运算,而不对其进行溢出检查, 则可能引发整数溢出漏洞,如 2^255*2 或 2^255+2^255, 由于 uint256 所能存储的最大值为 2^256-1,这两个运算 都将导致向上溢出,最高位的数据会被丢弃,所得结果均 为 0。

图 3-1-3 溢出原理图

另一方面是向下溢出,例如利用赋值运算计算转账之 后的余额,如不将转帐前余额与转账额度进行对比或对运 算进行溢出检查,将导致在运算过程中转账额度大于转帐 前的账户余额,当被减数小于减数的情况下,将会发生向 下溢出。

图 3-1-4 溢出原理图

在进行数据计算的过程中,务必要注意并防范数据溢 出风险,在进行代码审计时,由于代码量巨大,所以不管 在代码编写还是安全审计过程中,都必须尤为细致。例如, 在进行运算之前可以先对结果进行一个判断,如果发现存 在溢出,则不再进行计算,如判断两数相加后是否大于原 来的数,或者两数相减时被减数是否大于减数等;还可以 使用 SafeMath 库,可以避免溢出发生。

 (3) 访问权限漏洞

在编写智能合约过程中,某些私有变量及函数是不能 在权限之外进行访问、调用、修改的;但在代码编写过程中,因修饰符使用不当、函数调用逻辑不严谨等过失行为, 都会导致权限攻击的发生。 例如,在进行管理员设置的函数中,若没有对函数的 访问进行限制,如使用 public 修饰函数,那么黑客将可 以自行调用该函数,为自己赋予管理员权限,从而进行其 他非法操作。 要想防止访问权限攻击,最主要的就是要有合理的权 限分配设计,以及正确的访问关系模型,严谨地使用权限 修饰符。 

2.业务逻辑缺陷

DeFi 项目的业务逻辑设计复杂,利用闪电贷这种新型 产品进行攻击的 DeFi 安全事件在过去的一年里层出不 穷。这些安全问题的深层次原因在于,在设计业务逻辑时, 未考虑到某些关键性因素,如:弹性供应机制、增发机制、 清算机制设计不合理、链上价格及其他信息可被低成本操 控等,导致了恶意套利、恶意增发等问题。

这些问题并非 是由单纯的代码编写错误导致的,更多与业务逻辑设计紧 密相关,因此在项目上线前要进行严格的操作/业务流程 测试,仔细分析业务设计中的薄弱环节,防止类似问题发 生。

3. DDoS 攻击

2020 年各个领域 DDoS 攻击事件中,主要是针对于各个 中心化交易平台发起的。DDoS 攻击名为分布式拒绝服务 攻击,是指攻击者通过技术手段控制多台傀儡机,通过这 些傀儡机,攻击者可以向某个或某些网络目标构造并发送 大量请求,这将导致目标主机性能或网络带宽消耗殆尽, 使得受害系统无法正常运行并且无法对外提供服务。DDoS 攻击比普通 DoS 攻击更具有破坏性且更难防范。

图 3-3-1 攻击方式

想要避免 DDoS 攻击难度比较大。发起 DDoS 攻击的主 机所发出请求的目的是为了占满带宽以及目标主机资源, 单个请求并无攻击性,而且该攻击手段属于分布式攻击, 这使得防御系统很难察觉且不容易对攻击地址进行拦截。

4. 51%算力攻击

51%攻击指的是攻击者掌握了全网 50%以上的哈希计算 算力,拥有超过 50%的算力,攻击者就能修改自己的交易 记录、废弃其余矿工开采的区块、阻止交易确认等行为。 例如,攻击者花费一笔虚拟货币购买了一件商品,同时,将虚拟货币发送给了自己另一个账户。当购买商品的 交易被确认后,会被打包到 A 链的区块中,支付的虚拟货 币转到商家的账户。此时,攻击者发起 51%攻击,将转到 自己另一个账户的那笔交易打包进 B 链上的区块,并在之 后 B 链组合成一条最长合法链,而矿工也将从 B 链后面继 续挖矿,之前 A 链的区块就将被丢弃,商家账户的虚拟货 币也将无法使用。

图 3-4-1 攻击原理图

国家区块链漏洞平台 2020 年全年收录漏洞 373 条。其 中高危漏洞 86 个,占比 23%;中危漏洞 273 个,占比 73%; 低危漏洞 14 个,占比 4%。

图 4-1-1 漏洞等级分布图

1.高危漏洞 2020 年国家区块链漏洞共享平台共收录区块链高危漏 洞 86 个。

(1)双生树漏洞

2020 年 11 月 10 日,国家区块链漏洞平台收录了双生树漏洞(CNVD-2020-66571),攻击者可以利用此漏洞在 不影响区块哈希的前提下,篡改部分区块数据。 

(2)Sinoc 公链拒绝服务漏洞

2020 年 9 月 29 日,国家区块链漏洞平台收录了 Sinoc 公链拒绝服务漏洞(CNVD-2020-55001),攻击者可以利 用此漏洞发起拒绝服务攻击。

(3)底层网络请求处理不当拒绝服务漏洞

2020 年 3 月 22 日,国家区块链漏洞平台收录了底层网 络请求处理不当拒绝服务漏洞(CNVD-2020-30134),攻 击者可以利用此漏洞发起拒绝服务攻击。 

(4)Bitool 文件上传漏洞

2020 年 2 月 13 日,国家区块链漏洞平台收录了 Bitool 文件上传漏洞(CNVD-2020-30138),攻击者可以通过上 传恶意木马对服务器进行攻击,造成重大损失。

(5)Neo CLI 节点客户端拒绝服务漏洞

2020 年 12 月 08 日,国家区块链漏洞平台收录了 Neo CLI 节点客户端拒绝服务漏洞(CNVD-2021-02009),攻 击者通过构造恶意脚本发送到公链上,可以造成全部共识 节点进程崩溃,最终造成主网拒绝服务。

2.中危漏洞 2020 年国家区块链漏洞共享平台共收录区块链中危漏 洞 273 个。

(1)GasToken2 缓冲器溢出漏洞2020 年 2 月 18 日,国家区块链漏洞平台收录了 GasToken2 缓冲器溢出漏洞(CNVD-2020-30136),由于 该缓冲器未使用 safemath 函数,攻击者可以对其发动整 数溢出攻击。

(2)Sinoc 公链逻辑缺陷漏洞 2020 年 6 月 19 日,国家区块链漏洞平台收录了 Sinoc 公链逻辑缺陷漏洞(CNVD-2020-55002),攻击者可以在 未获得身份认证的情况下进行恶意操作,例如:删除地址 账户导致资金损失、添加新地址、查看系统日志记录信息 和 RPC 调用示例等。

(3)ETHLend 逻辑缺陷漏洞 2020年6月30日,国家区块链漏洞平台收录了ETHLend 逻辑缺陷漏洞(CNVD-2020-35586),攻击者可以利用该 漏洞造成整数溢出,从而绕过关键判断,导致超额购买虚 拟数字资产。

(4) BIXToken 智能合约逻辑缺陷漏洞 2020年6月3日,国家区块链漏洞平台收录了BIXToken 智能合约逻辑缺陷漏洞(CNVD-2020-31663),此漏洞会 导致被攻击的账户永远无法解锁其被锁仓的代币。

(5)AsacCoin 智能合约整数溢出漏洞 2020 年 3 月 22 日,国家区块链漏洞平台收录了 AsacCoin 智能合约整数溢出漏洞(CNVD-2020-30135),合约可以构造一个较大的数据向某一地址增发虚拟数字 资产,由于其漏洞将导致整数溢出,最后使该接收虚拟数 字资产地址余额变为 0 或很小。 

除了上述常见漏洞以外,还存在一些其它类型的漏洞, 本章将对其中三种常见漏洞导致的安全问题进行介绍。

1. 弹性供应漏洞

据国家区块链漏洞库监测,北京时间 2020 年 8 月 12 日,DeFi 项目 YAM Finance 由于项目机制进行弹性供应 Rebase 时存在漏洞,使得在第二次 Rebase 时额外铸造了 大量虚拟资产,而维护治理需要提交与总额成正比的虚拟 资产,额外铸造了大量虚拟资产使得维护治理需要提交的 虚拟资产也就大幅增加,这将导致无人能提供足够的虚拟 资产来对其进行维护治理,若无法治理,其中的虚拟资产 将被锁定且无法使用。

2.清算漏洞

据国家区块链漏洞库监测,流动性挖矿项目 Soda 被人 发现存在一个清算漏洞,该漏洞可导致项目中 20000 个虚 拟资产被清算掉,漏洞发现者向项目开发组提出该漏洞但 未引起开发组重视,故发现者将其中的一个虚拟资产清算掉,并发文警告。之后开发人员迅速停止了该项目借款功 能。 3.时间锁定漏洞 据国家区块链漏洞库监测,DeFi 项目 BaconSwap 和 shroom.finance存在时间锁定漏洞,该漏洞能导致项目所 有者可以绕过时间锁来无限增发虚拟资产。对此漏洞,项 目方暂时没有提供相应解决方案。

一是在系统上线前进行专业的安全与操作/业务流程 审计工作,切勿为了节省时间与成本而仓促上线;

二是系 统上线后做好数据监控维护工作,能保证第一时间发现异 常并进行处理;

三是加强安全意识与完善应急流程,能在 发现异常的情况下及时止损,修复系统,将损失降到最低;

四是个人应加强安全意识,提高对区块链技术的了解,切 勿相信涉嫌非法金融活动的宣传,如包含一夜暴富、稳赚 不赔、躺赚等相关字眼;

五是妥善保管好钱包私钥,涉及 大额资金可以通过硬件钱包进行存储,并在使用钱包的过 程中注意安全防护;

六是加强对区块链技术体系安全风险 和防护手段的研究,推进适应区块链技术机制的安全保障 体系建设;

七是积极开展区块链系统安全评估和智能合约 形式化验证,提前发现安全隐患;八是加强区块链漏洞库建设和应用,提高区块链安全事件的发现、分析、预警和 应急处置能力。

参考文献 

国家区块链漏洞库.《区块链漏洞定级细则》,2020 

国家区块链漏洞库.《区块链技术架构安全要求》, 2020 

国家区块链漏洞库.《DeFi 网络安全态势报告》, 2020 

信通院.《区块链安全白皮书-技术应用篇》,2018 

信通院.《区块链安全白皮书(1.0 版)》,2019 

信通院.《区块链白皮书(2019 年)》,2019 

信通院.《全球区块链应用十大趋势》,2017 

中国移动,中国电信,中国联通.《区块链电信行业应 用白皮书(1.0 版)》[R],2019 

Muhammad Izhar Mehar,Charles Louis Shier,Alana Giambattista,Elgar Gong,Gabrielle Fletcher,Ryan Sanayhie,Henry M Kim,Marek Laskowski. 《Understanding a revolutionary and flawed grand experiment in blockchain: the DAO attack》,Journal of Cases on Information Technology (JCIT) 21 (1), 19-32,2019 

Congcong Ye,Guoqiang Li,Hongming Cai,YonggenGu,Akira Fukuda. 《 Analysis of security in blockchain: Case study in 51%-attack detecting》,2018 5th International Conference on Dependable Systems and Their Applications (DSA), 15-24,2018 

Dey Somdip. 《 A proof of work: Securing majority-attack in blockchain using machine learning and algorithmic game theory》,International Journal of Wireless and Microwave Technologies (IJWMT), 1-9, 2018 

Muhammad Saad,Jeffrey Spaulding,Laurent Njilla,Charles Kamhoua,Sachin Shetty,DaeHun Nyang,David Mohaisen. 《 Exploring the attack surface of blockchain:A comprehensive survey》,IEEE Communications Surveys & Tutorials 22 (3),1977-2008,2020

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:15ms0-6:904ms