欢迎来到Web3.0的世界:常见的DeFi黑客攻击

2023-12-31 21:12

本文主要是介绍欢迎来到Web3.0的世界:常见的DeFi黑客攻击,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

随着区块链技术的发展,黑客攻击一直是这个行业的一个巨大隐患。自从2020年“DeFi Summer”以来,涌现了一批知名的去中心化应用(Dapp),促使链上总锁仓量(TVL)飙升,2021年末达到巅峰,以将近1800亿美元创造历史记录。

正是因为有利可图,DeFi协议和相关应用也成为了黑客主要的攻击对象,再利用诸如Tornado Cash这样的隐私交易平台进行洗钱,资金动向难以追踪,因此而造成的资产损失逐年递增,2020年全年资产损失金额是15亿美金,2021年达到了30亿美金,到了2022年创造了40亿美金的历史记录。

DeFi为区块链和加密货币世界带来了巨大的机遇,创造了一个有一个财富神话。然而,它也带来了新的挑战,包括各种类型的攻击。这篇文章将会介绍一些常见的 DeFi 攻击,以及应对措施。

闪电贷攻击(Flashloan attack)

DeFi 领域的技术发展使得加密借贷非常受欢迎,因为它们充分利用了当前可用技术的全部力量,闪电贷已成为一种非常有吸引力的贷款形式。闪电贷是一种相对较新的无抵押贷款,已在许多基于以太坊网络的DeFi协议中流行起来,业务模式与传统金融领域的借贷极为相似,一方提供资金流动性,另一方借出资金用于投资,并偿付一定的利息。
去中心化借贷

攻击分析

闪电贷款攻击指的是一种智能合约漏洞,攻击者从DeFi平台中取出闪电贷款,使用他们所借的资金,并在同一区块中偿还,也就是黑客从DeFi资金池子里借来的钱套利,然后在他们从中获利后立即迅速归还资本。成功实施闪电贷攻击应该具备两类条件:

  • 提供闪电贷的DeFi平台,用以提供资金来源;
  • DeFi平台存在价格操纵的漏洞,用以实现套利。

理论上,具备以上条件,可以实现近乎零成本的获利。目前,各大公链上都提供了闪电贷的功能,有的是要收利息,但是大部分都是零利率的。所以,最重要的是要发现能实施价格操作的漏洞合约。

价格操纵指的是某些Defi协议的资产价格计算公式中,包含重大漏洞。由于闪电贷允许在极短的时间内借出巨额的资金,如果将这些资金倾注到一个脆弱的资金池内,会使得代币价格波动异常,攻击者有可乘之机,进而产生套利空间。

另外一种可能就是使用了区块链外的数据源,我们通常称之为预言机(Oracle)。因为在以太坊上运行的智能合约不能访问存储在区块链网络之外的信息,预言机以外部智能合约的方式,被其他的智能合约所调用。有些智能合约会依赖外部数据来控制执行过程,在这种情况下,就给黑客提供了恶意攻击的机会。

预防措施

  1. 设置借贷上限。无论是每类资产,还是全局资产,都需要加以借贷限制,防止平台资金杠杆过高,并降低平台被攻击的潜在风险。
  2. 使用多数据源获取资产价格。很明显,采用单一来源的数据,会使用系统更脆弱,容易遭到攻击。可以考虑与可信任的机构合作,提供安全可靠的链下数据。除此之外,还应加强与去中心化预言机提供商的合作。
  3. 价格计算应考虑更多因素。比如使用时间加权平均价格输入,这样价格就会被平均到 X 个时段。

三明治攻击(Sandwich attack)

至今为止,无论是在单独一个场景还是整个行业,DeFi都极易受到价格操作和各种可疑策略的影响,其中,三明治攻击便是一个典型的例子,在高频交易的场景里尤其适用。

攻击分析

三明治攻击本质上是一种抢先交易的手段,主要针对DeFi协议和服务。在以太坊的节点上,会有一个内存池(MemPool),作为待上链数据的一个缓冲区,其数据查看权限是公开的。恶意交易者在其节点上寻找“有利可图”的待处理的交易,攻击者会支付较高的手续费“贿赂”矿工进行前置(front-run)交易,随后又支付一笔较低的手续费进行后置(back-run)交易,而原来的待处理交易则夹在两个交易中间。
三明治攻击
在去中心化交易所(DEX)上会频频发生以上操作,假设正常交易者要将1份资产A交易转换成100份资产B,其经历的主要流程如下:

  1. 攻击者发起的前置交易,会抢先于正常交易者,提前将1份资产A转换成了100份资产B,从而抬高了资产B的市场价格;
  2. 此时,正常的交易者并不知情,只要价格滑点未超过交易者设置的临界值,这笔交易仍然可以正常进行,只是此时能得到的资产B的数量会低于100份,同时也进一步拉大了价差,这也是滑点金额的主要来源;
  3. 攻击者发起的后置交易,将会以更高的价格抛售资产B,这样低买高卖的操作,实现了套利。

预防措施

合理设置交易手续费。对于一些重要的交易,可以适当提高其交易手续费。不过,这样做只是提高了攻击成本,但是不能完全消除;

拆分交易。三明治攻击对较大的交易额感兴趣,交易额越大,意味着利润空间越大。可以考虑将交易分成若干个较小的交易,因为这些小额交易对于抢跑者来说不太具有吸引力;

设置更低的滑点,通常在1%以下。由于滑点的保护,虽然牺牲了交易手续费,但是避免了更多的损失;

合理使用工具或平台,比如Flashbots,通过私人交易池和拍卖机制让交易者免受“夹击”。同时,要使用有较强安全防范措施的去中心化交易所(DEX),比如1inch,sushi等等。

跨链攻击(Cross-chain attacks)

跨链攻击是针对区块链互操作性和在不同区块链之间转移资产的安全威胁,这些攻击通常是利用了允许资产从一个区块链转移到另一个区块链的跨链桥或协议中的漏洞。

跨链机制

当前主流的跨链机制有:公证人,侧链和中继链:

公证人机制引入一个双方共同信任的第三方作为中介,通常是一个中心化机构,由共同信任的第三方中介进行跨链的数据收集、交易确认和验证,存在一定的中心化风险。

侧链是一个独立于主链的区块链系统,通过双向锚定(two-way peg)机制,将主链和侧链的资产建立了严格的映射关系,所以需要同步主链所有的区块头以验证交易是否被认可。在安全性方面,由于侧链
和主链的安全机制是独立的,故主链的安全优势无法在侧链上体现出来。

中继链是公证人和侧链的有效融合和延伸。同样身为一个独立的区块链系统,但是不会同步主链的交易信息,只是负责跨链数据传输,可以认为是一种去中心化的公证人机制。相比侧链,工作效率更高,安全性也更胜一筹。

攻击分析

通过对跨链资产转移的过程,来分析潜在的安全漏洞,如下图所示,是基于中继机制的跨链桥(B1->B2)的流程:
跨链桥工作机制

  1. 用户将资产 A 发送到源链B1上的一个存储地址,并支付过桥费,从而触发两个链上操作:其一在源链B1上锁定相应的资产,触发对应的资产锁定事件,其二是触发存款跨链事件;
  2. 中继链监听和解析来自源链B1的存款跨链事件,并在链上对该事件进行验真;
  3. 中继链授权资产解锁动作,发送解锁请求给目标链B2;
  4. 目标链B2的智能合约验证交易的发送方和其他的证明,如多重签名等;
  5. 在目标链B2上,通过智能合约发布相同数量的资产 A1,发出资产解锁事件,并将该资产 A1 发送到用户地址。

从上述过程中,可以分析得到三类潜在的安全漏洞:

不受限制的存款

这个潜在的安全漏洞发生在执行步骤1的过程中。源链B1的锁定资产的智能合约逻辑处理不当(如使用不安全的转账函数等),就可能会让攻击者绕过锁定资产的过程,直接触发有效的存款跨链事件,这意味着攻击者能够在不支付B1链资产的情况下,获取B1链对应的交易资产。

这种安全漏洞导致Qubit、Wormhole 和 Multichain等跨链桥遭受到了攻击。

以Qubit为例:

2022年1月,借贷协议Qubit的跨链桥QBridge遭到攻击,损失约8000万美元。

其主要原因是智能合约对白名单内代币进行转账操作时,未对其是否为0地址再次进行检查,导致本该通过native函数进行存款的操作却能顺利走通普通代币存款逻辑。

事件发生后,Qubit 的开发团队宣布已无法维持,因此决定解散,由该团队领导开发的Bunny和Qubit 协议将由DAO管理。社区将拥有升级合约、更改费用结构等所有相关权限。

目前Qubit几乎已无人使用,项目团队虽表示会继续赔付,但当前仅赔付了极小一部分(约2%)资金。

事件解析不一致

这个潜在的安全漏洞发生在执行步骤2的过程中。这种安全漏洞发生在中继器解析事件的过程中,引起了存储事件和锁定动作的不一致。常见的错误主要有两种:

  • 中继器中的解析器可能将恶意合约发出的无效存储事件识别为有效存款事件;
  • 中继器中的解析器可能错误地解析了存储事件,导致解析出的代币类型或数目有误等。

这种安全漏洞导致THORChain、Poly Network等跨链桥遭受到了攻击。

以Poly Network为例:

2023年7月,一名攻击者利用Poly Network的漏洞,在多条链上增发了价值420亿美元的资产。攻击者在源链发送一笔数额很小的交易,触发资产锁定事件,随后利用伪造的凭证在Poly Network所在的中继器上篡改资产数量,触发目标链的巨额资产的解锁事件。

Poly Network事件的初期检测结果显示,虽然链上增发资产的数额巨大,但由于资金池缺乏流动性支持,并且相关受害方及时撤出了流动性,其造成的损失规模相对可控。

未经授权解锁

这个潜在的安全漏洞发生在中继器与目标链B2智能合约交接步骤3和4的过程中。

通常情况下,只有可信的中继器才能对目标链中的解锁行为进行授权,而这种安全漏洞是传统网络攻击造成的密钥泄露或链上/链下代码的访问控制不当,可能会使未经授权的攻击者成功调用目标链的智能合约的解锁函数,并转移大量的资金。

这种安全漏洞导致Robin Network、Anyswap等跨链桥遭受到了攻击。

以Robin Network为例:

2022年三月份,Ronin Network的跨链桥遭到攻击,损失总额高达6.24 亿美元。

Ronin Network所遭受的是典型的社会工程学攻击:

  • 一家虚假公司的员工通过领英联系到了Ronin Network开发商Sky Mavis的员工,并向他们抛来了橄榄枝;
  • Sky Mavis的一名员工在面试后获得了假Offer,在他下载了伪造的Offer文件之后,黑客软件渗透到Ronin Network系统中,并接管了9个区块链验证者节点中的4个;
  • 黑客通过Sky Mavis逐渐控制了整个社区(Axie DAO),后者曾允许Sky Mavis代表其签署各种交易;
  • 骇客控制了绝大多数(5/9)的验证者节点,继而控制了整个网路,并转移了大量的资产。

Ronin Network一事不单单是跨链桥历史上规模最大的黑客事件,如果按照事件发生时的市场价格计算,这更是整个加密货币历史上涉案金额最大的黑客事件。幸运的是,通过后续融资,Ronin Network 此后启动了对用户的赔付,并于六月底重启了其跨链桥。

预防措施

跨链桥生态的愈发多样化、丰富化,使得在其之上进行的交易、资金量也会随之大幅增长,这也就吸引了黑客对于跨链协议的关注,再加上跨链桥本身就是黑客资金出逃的重要环节,因此也会成为黑客攻击的目标。对于项目方来说:

  1. 寻求专业机构合作,有效地排查出已知的漏洞,为系统的安全筑建第一道防线;
  2. 注意排查与其他 DeFi 产品进行组合时的业务逻辑漏洞,避免出现跨合约的逻辑兼容性漏洞;
  3. 建立风控熔断机制,引入第三方安全公司的威胁感知情报和数据态势情报服务,在DeFi安全事件发生时,能够做到第一时间响应安全风险,及时排查封堵安全攻击,避免造成更多的损失;
  4. 应该联动行业各方力量,搭建一套完善的资产追踪机制,实时监控相关虚拟货币的流转情况。

Rug Pull

Rug Pull是加密货币领域的“黑话”,本质上,Rug Pull是一种发生在DeFi领域的骗局。Rug Pull通常涉及欺骗性的做法,如虚假承诺、误导性营销和操纵性策略,以引诱用户参与项目投资。这可能包括声称高回报、低风险和强大的社区支持,其背后的主要动机是经济利益。
Rug Pull示意图

攻击分析

常见的Rug Pull行为有两种:窃取流动性,限制卖单。

窃取流动性

项目方会突然蓄意耗尽项目的资金或流动性,整个过程发生在一瞬之间,不会有任何的事先警告。他们还可能停用或删除自己的社交媒体资料和线上社区交流渠道,以避免被发现和跟踪。这样做通常会给投资者和用户留下毫无价值或大幅贬值的资产,严重损害了投资者的利益。

限制卖单

这是恶意开发者欺诈投资者的一种隐蔽方式。在这种情况下,开发者会对链上智能合约做手脚,做出来的加密货币留有后门,使其成为唯一能够出售资产的一方。然后,开发者等待投资者购买他们的新加密货币。一旦资产价格走高,他们就会抛售手里的资产,留下一文不值的代币。

Rug Pull的典型例子是土耳其加密货币交易所Thodex的倒闭,这起盗窃案是2021年最大的加密货币诈骗案之一,其价值损失高达 20 亿美元。尽管土耳其警方在调查这一重大骗局期间拘留了62人,但被指控的犯罪者仍下落不明。

预防措施

投资者可以注意一些明显的迹象,以保护自己免受Rug Pull之害。

  • 匿名或者不知名的开发者。投资者应该考察项目背后的团队组织,同时应该对新的、容易伪造的社交媒体账户和内容保持怀疑态度。项目白皮书、官网和其他媒体的质量能提供项目整体合法性的线索;
  • 无流动性锁定。良性的项目团队会对绝大部分的流动性进行锁定,用于团队奖励,社区贡献,投资人分红,挖矿奖励等。如果毫无锁定,甚至无限供应,那就没有什么能阻止项目方卷走全部资产;
  • 回报率异常高涨。当代币的年收益率(APY)达到三位数时,虽然不一定是骗局,但这些高收益通常意味着同样高的风险,需要提高警惕;
  • 无外部审计。新加密货币的标准做法是由信誉良好的第三方进行正式的代码审计,这是每个DeFi项目必须的选择。

总结

随着DeFi吸引越来越多的人入场,对没有经验的交易者的保护将成为区块链专家的首要解决的问题,而且去中心化的概念本身就意味永远不可能有一个被授权的第三方来保证用户资产安全、保证和对用户的损失作出赔偿。除此之外,交易者应该明白,DeFi目前还处于萌芽阶段,有很多不完善和缺陷。随着技术和市场日臻完善,DeFi将会为用户提供更好的服务。

转载申明:未经作者本人同意,本篇文章不可转载或者作为文摘、资料刊登。

这篇关于欢迎来到Web3.0的世界:常见的DeFi黑客攻击的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/557153

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解

MySQL查看表的最后一个ID的常见方法

《MySQL查看表的最后一个ID的常见方法》在使用MySQL数据库时,我们经常会遇到需要查看表中最后一个id值的场景,无论是为了调试、数据分析还是其他用途,了解如何快速获取最后一个id都是非常实用的技... 目录背景介绍方法一:使用MAX()函数示例代码解释适用场景方法二:按id降序排序并取第一条示例代码解

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序