本文由国家互联网应急中心主编,授权金色财经首发。
编委会
主编:国家互联网应急中心
联合编制:成都链安科技有限公司
北京长亭科技有限公司
苏州链原信息科技有限公司
杭州派盾信安科技有限公司
天融信科技集团股份有限公司
北京知道创宇信息技术股份有限公司
杭州安恒信息技术股份有限公司
北京众享比特科技有限公司
真相网络科技有限公司
目录
一、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年区块链安全状况
随着区块链技术的快速发展,以及项目与应用的数量不断增多,与之而来的相关安全事件的发生也变得频繁。据国家区块链漏洞库不完全统计显示,2020年度区块链领域发生的安全事件数量达555起,分别包括DeFi安全事件103起、/钓鱼事件204起、勒索软件事件143起、交易平台安全事件31起、数字钱包安全事件41起、公链安全事件17起以及其它安全事件16起,相比于2019年增长了近240%;所造成的经济损失高达179亿美元,环比2019年增长了130%。综上所述,全年区块链安全威胁风险等级为高,亟需各方高度重视。本章将从宏观角度对全球区块链安全态势进行分析。
2020年区块链安全事件监测情况
1.公链安全事件发展趋势
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)HarvestFinance攻击事件
北京时间2020年10月26日,HarvestFinance遭受闪电贷攻击,该攻击事件共造成2400万美元的损失。本次攻击是由于黑客控制预言机上数字货币价格导致的。攻击者首先从闪电贷UniswapV2贷出1800多万USDT和5000万USDC,并将USDT通过Curve兑换成USDC,如图2-1-9。
图2-1-9交易流程
接下来黑客再向Harvest中存入5000万的USDC,由于上一步USDT兑换USDC的操作,使得Curvey池中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)ValueDeFi协议攻击事件
北京时间2020年11月15日,ValueDeFi协议遭受闪电贷攻击,本次攻击是由于黑客操控DAI/USDC/USD池中的价格引发的。
首先,攻击者通过闪电贷贷出80000ETH以备攻击使用。其次,攻击者先通过UniswapV2兑换出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)PickleFinance被攻击事件
北京时间11月22日,DeFi项目PickleFinance遭到黑客攻击,本次攻击事件是由于重入漏洞导致的,损失金额高达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万美元的比特币赎金。该黑客使用的是一款名为RagnarLocker的勒索软件,该软件通过加密计算机的文件来进行勒索攻击,被勒索软件加密的文件将无法使用,只能通过黑客给出的密钥才能够解密,而攻击者给出密钥的条件就是支付相应赎金。最后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)NexusMutual创始人个人钱包被攻击
2020年12月14日,DeFi保险平台NexusMutual创始人私人钱包遭受到黑客的攻击,此次攻击是因为黑客修改了受害人计算机上的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)PlusToken网络案件
2020年11月26日,“PlusToken”网络案在江苏省盐城市宣判。犯罪团伙成员被判处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^2552^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攻击原理图
四、CNVD区块链漏洞例举
国家区块链漏洞平台2020年全年收录漏洞373条。其中高危漏洞86个,占比23%;中危漏洞273个,占比73%;低危漏洞14个,占比4%。
图4-1-1漏洞等级分布图
1.高危漏洞2020年国家区块链漏洞共享平台共收录区块链高危漏洞86个。
双生树漏洞
2020年11月10日,国家区块链漏洞平台收录了双生树漏洞,攻击者可以利用此漏洞在不影响区块哈希的前提下,篡改部分区块数据。?
Sinoc公链拒绝服务漏洞
2020年9月29日,国家区块链漏洞平台收录了Sinoc公链拒绝服务漏洞,攻击者可以利用此漏洞发起拒绝服务攻击。
底层网络请求处理不当拒绝服务漏洞
2020年3月22日,国家区块链漏洞平台收录了底层网络请求处理不当拒绝服务漏洞,攻击者可以利用此漏洞发起拒绝服务攻击。?
Bitool文件上传漏洞
2020年2月13日,国家区块链漏洞平台收录了Bitool文件上传漏洞,攻击者可以通过上传恶意木马对服务器进行攻击,造成重大损失。
NeoCLI节点客户端拒绝服务漏洞
2020年12月08日,国家区块链漏洞平台收录了NeoCLI节点客户端拒绝服务漏洞,攻击者通过构造恶意脚本发送到公链上,可以造成全部共识节点进程崩溃,最终造成主网拒绝服务。
2.中危漏洞2020年国家区块链漏洞共享平台共收录区块链中危漏洞273个。
GasToken2缓冲器溢出漏洞2020年2月18日,国家区块链漏洞平台收录了GasToken2缓冲器溢出漏洞,由于该缓冲器未使用safemath函数,攻击者可以对其发动整数溢出攻击。
Sinoc公链逻辑缺陷漏洞2020年6月19日,国家区块链漏洞平台收录了Sinoc公链逻辑缺陷漏洞,攻击者可以在未获得身份认证的情况下进行恶意操作,例如:删除地址账户导致资金损失、添加新地址、查看系统日志记录信息和RPC调用示例等。
ETHLend逻辑缺陷漏洞2020年6月30日,国家区块链漏洞平台收录了ETHLend逻辑缺陷漏洞,攻击者可以利用该漏洞造成整数溢出,从而绕过关键判断,导致超额购买虚拟数字资产。
BIXToken智能合约逻辑缺陷漏洞2020年6月3日,国家区块链漏洞平台收录了BIXToken智能合约逻辑缺陷漏洞,此漏洞会导致被攻击的账户永远无法解锁其被锁仓的代币。
AsacCoin智能合约整数溢出漏洞2020年3月22日,国家区块链漏洞平台收录了AsacCoin智能合约整数溢出漏洞,合约可以构造一个较大的数据向某一地址增发虚拟数字资产,由于其漏洞将导致整数溢出,最后使该接收虚拟数字资产地址余额变为0或很小。?
五、其他安全问题
除了上述常见漏洞以外,还存在一些其它类型的漏洞,本章将对其中三种常见漏洞导致的安全问题进行介绍。
1.弹性供应漏洞
据国家区块链漏洞库监测,北京时间2020年8月12日,DeFi项目YAMFinance由于项目机制进行弹性供应Rebase时存在漏洞,使得在第二次Rebase时额外铸造了大量虚拟资产,而维护治理需要提交与总额成正比的虚拟资产,额外铸造了大量虚拟资产使得维护治理需要提交的虚拟资产也就大幅增加,这将导致无人能提供足够的虚拟资产来对其进行维护治理,若无法治理,其中的虚拟资产将被锁定且无法使用。
2.清算漏洞
据国家区块链漏洞库监测,流动性挖矿项目Soda被人发现存在一个清算漏洞,该漏洞可导致项目中20000个虚拟资产被清算掉,漏洞发现者向项目开发组提出该漏洞但未引起开发组重视,故发现者将其中的一个虚拟资产清算掉,并发文警告。之后开发人员迅速停止了该项目借款功能。3.时间锁定漏洞据国家区块链漏洞库监测,DeFi项目BaconSwap和shroom.finance存在时间锁定漏洞,该漏洞能导致项目所有者可以绕过时间锁来无限增发虚拟资产。对此漏洞,项目方暂时没有提供相应解决方案。
?六、对策建议
一是在系统上线前进行专业的安全与操作/业务流程审计工作,切勿为了节省时间与成本而仓促上线;
二是系统上线后做好数据监控维护工作,能保证第一时间发现异常并进行处理;
三是加强安全意识与完善应急流程,能在发现异常的情况下及时止损,修复系统,将损失降到最低;
四是个人应加强安全意识,提高对区块链技术的了解,切勿相信涉嫌非法金融活动的宣传,如包含一夜暴富、稳赚不赔、躺赚等相关字眼;
五是妥善保管好钱包私钥,涉及大额资金可以通过硬件钱包进行存储,并在使用钱包的过程中注意安全防护;
六是加强对区块链技术体系安全风险和防护手段的研究,推进适应区块链技术机制的安全保障体系建设;
七是积极开展区块链系统安全评估和智能合约形式化验证,提前发现安全隐患;八是加强区块链漏洞库建设和应用,提高区块链安全事件的发现、分析、预警和应急处置能力。
参考文献?
国家区块链漏洞库.《区块链漏洞定级细则》,2020?
国家区块链漏洞库.《区块链技术架构安全要求》,2020?
国家区块链漏洞库.《DeFi网络安全态势报告》,2020?
信通院.《区块链安全白皮书-技术应用篇》,2018?
信通院.《区块链安全白皮书》,2019?
信通院.《区块链白皮书》,2019?
信通院.《全球区块链应用十大趋势》,2017?
中国移动,中国电信,中国联通.《区块链电信行业应用白皮书》,2019?
MuhammadIzharMehar,CharlesLouisShier,AlanaGiambattista,ElgarGong,GabrielleFletcher,RyanSanayhie,HenryMKim,MarekLaskowski.《Understandingarevolutionaryandflawedgrandexperimentinblockchain:theDAOattack》,JournalofCasesonInformationTechnology(JCIT)21(1),19-32,2019?
CongcongYe,GuoqiangLi,HongmingCai,YonggenGu,AkiraFukuda.《Analysisofsecurityinblockchain:Casestudyin51%-attackdetecting》,20185thInternationalConferenceonDependableSystemsandTheirApplications(DSA),15-24,2018?
DeySomdip.《Aproofofwork:Securingmajority-attackinblockchainusingmachinelearningandalgorithmicgametheory》,InternationalJournalofWirelessandMicrowaveTechnologies(IJWMT),1-9,2018?
MuhammadSaad,JeffreySpaulding,LaurentNjilla,CharlesKamhoua,SachinShetty,DaeHunNyang,DavidMohaisen.《Exploringtheattacksurfaceofblockchain:Acomprehensivesurvey》,IEEECommunicationsSurveys&Tutorials22(3),1977-2008,2020
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。