斯巴达陷落—BSC首次闪电贷攻击事件分析

2024-04-30 10:32

本文主要是介绍斯巴达陷落—BSC首次闪电贷攻击事件分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    5月2日,DeFi项目Spartan遭到黑客的闪电贷攻击,斯巴达协议(Spartan Protocol)是一个资产流动性项目,旨在解决现有 AMM 协议以及合成资产所出现的各类问题。斯巴达协议的流动性池是此协议的核心,所有一切系统内的相关应用都离不开流动性池的支持。SpartanSwap 应用了 THORCHAIN 的 AMM 算法。此算法采用流动性敏感资费(Liquidity-sensitive fee)来解决流动性冷启动以及滑点问题。

    攻击者利用闪电贷攻击盗取了项目3000万美元。其盗取资产的交易如下:

    通付盾区块链安全团队(SharkTeam)第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。

    一、事件分析

    通过分析交易,该事件中,闪电贷攻击的流程如下:

(1)攻击者首先通过闪电贷从PancakeSwap借出1000 WBNB,交易及详情如下:

    (2)攻击者在出现漏洞的 Spartan 兑换池WBNB-SPT1中,分五次将 WBNB 兑换成 SPARTAN,从而导致兑换池中产生巨大滑点。

    交易及详情如下:

    此时攻击者有

    2536,613.206101067206978364 SPARTA和 11853.332738790033677468 WBNB。

    (3)攻击者将这些Token(持有的WBNB与SPARTA)注入WBNB-SPT1交易池中添加流动性,获得LP凭证,由于滑点修正机制,获得的LP数量并不是正常值。

    (4)进行多次Swap操作,将WBNB兑换成SPARTA,池中WBNB增多,SPARTA减少。

    (5)Swap后将持有的WBNB和SPARTA转移给WBNB-SPT1池,进行移除流动性操作。

    移除流动性时会通过池中实时的代币数量来计算用户的LP可获得多少对应的代币,由于步骤5,此时会获得比添加流动性时更多的代币。

    (6)在移除流动性后会更新流动性池中的baseAmount与tokenAmount,由于移除流动性时没有和添加流动性一样存在滑点修正机制,移除流动性后两种代币的数量和合约记录的代币数量会存在一定差值。在与实际有差值的情况下,攻击者继续添加流动性获得LP,然后攻击者再次移除流动性就获得了对应代币。

    (7)最后,攻击者将SPARTA代币兑换回WBNB,获得了更多WBNB。黑客通过以上步骤,以很小的成本获得大量的WBNB,完成闪电贷攻击。

    二、通付盾区块链安全知识课堂

    根据整个攻击过程的分析,与SharkTeam之前分析过的闪电贷攻击的常用手法相同,并已收录在了《通付盾2021Q1智能合约安全态势感知报告》中https://mp.weixin.qq.com/s/I3mv-eZgZg7eTcerjs1Hiw 只不过发生的平台从以太坊转移到了币安智能链。本次通付盾区块链安全知识课堂带您复习闪电贷攻击的常见手法与防范手段。

    DeFi项目的业务逻辑设计复杂,利用闪电贷这种新型产品进行攻击的DeFi事件在过去的一年里层出不穷。这些安全问题的深层次原因在于,在设计业务逻辑时,未考虑到某些关键性因素,如:弹性供应机制、增发机制、清算机制设计不合理、链上价格及其他信息可被低成本操控等,导致了恶意套利、恶意增发等问题。攻击者通过操纵 AMM 资产池内的资产价格或者资产数量使关联协议蒙受损失,我们不妨称之为经济攻击。至今出现的经济攻击分为“哄抬套利”和“操纵预言机”两种手法。

    哄抬套利

    哄抬套利攻击的原理与 CeFi 常见的 Pump-and-Dump 市场操纵行为或者链上交易容易碰到的front running攻击本质上并无差异,都是先想办法借助他人的资本抬高自有资产的价格再高价卖出获利。DeFi 生态中此类经济攻击事件之所以能够成功,都与至少两个核心模块——攻击目标和 AMM 有关。

    攻击目标与 AMM 之间存在资产转移关系,并能由用户自主触发相关智能合约执行资产转移。这里的攻击目标可以是机枪池、借贷平台、杠杆交易平台等 DeFi 模块。机枪池是运行着一定投资策略的智能合约,可以把它类比于一个基金,为用户提供代理理财业务,用户将自有资产存入机枪池以期获得收益,例如 Yearn 、Harvest ;借贷平台为出借方和贷方提供服务,赚取利息差,贷方一般要先超额抵押一部分资产,例如 Compound 、 Aave ;杠杆交易平台允许投资者抵押一定资产作为保证金进行杠杆交易,例如 bZx 。AMM 通过一个定价函数实现自动做市商交易,用户可兑换资产或作为流动性提供商(LP)参与流动性挖矿。

    除了攻击目标和AMM两个核心模块,实际攻击过程中还要考虑到资金量、手续费、智能合约在执行交易前设置的检查点等因素。攻击者可通过建立优化模型找到最优参数,预测哄抬套利收益来决定是否采取行动。这种攻击手法的一般操作步骤如下:

    哄抬套利攻击的基础模型(序号代表攻击步骤,实线表示必要步骤,虚线代表或有步骤;攻击目标的净值计算环节和 AMM 的定价函数在设计上存在被黑客利用的风险)。

    一般步骤为:

    假设 AMM 资产池里的流动性资产为 X、Y,流动性代币为 C。

    第一步,准备。持有即将被哄抬的初始资产 Y 及用于触发攻击目标自动执行策略的初始资产 A。

    第二步,哄抬。将资产 A 发送至攻击目标的相关智能合约,获得代币 B (代表在机枪池、借贷平台、杠杆交易平台等攻击平台中的头寸),并触发智能合约向 AMM 资产池投入资产 X,获得资产 Y 或流动性代币 C,并抬高 AMM 资产池内资产 Y 的价格。

    第三步,套利。攻击者将步骤二中的资产 Y 投入 AMM 资产池,以抬高后的价格获得资产 X 或流动性代币 C。需要说明的是,第二、三步中的操作对应于 swap (X、Y 之间交换)或流动性挖矿(X 或 Y 与 C 之间交换)。对于三个及以上币种的 AMM,这里的 X 或 Y 可视为资产组合。

    第四步,收尾。攻击者根据代币 B 的最新净值及后续交易计划决策是否赎回资产 D。

    对于流动性充足的资产池,为了在 AMM 里制造可观的价格滑点,往往需要投入很大的资金量,故攻击者一般会从闪电贷借出初始资产。若闪电贷可供借贷的资产类别不满足要求,攻击者会去某些 AMM 或借贷平台通过 swap、流动性挖矿、借贷等方式获得;也不排除攻击者直接去与攻击目标关联的 AMM 获取。若攻击者在第一步的准备过程中采用了闪电贷,那么在第四步就还需在同一笔攻击交易中归还闪电贷。

    操纵预言机

    操纵预言机攻击可以认为是哄抬套利攻击的一种对称操作,其攻击目标依赖 AMM 提供的信息对其内部资产进行定价。

    操纵预言机攻击的基础模型(序号代表攻击步骤,实线表示必要步骤,虚线代表或有步骤;攻击目标的净值计算环节和 AMM 的定价函数在设计上存在被黑客利用的风险)。

    这种情况下攻击者虽然无法利用攻击目标内的资产去哄抬 AMM 内某资产的价格,但可以考察 AMM 模块作为预言机能否被操纵,从而哄抬攻击目标内的资产。

    攻击目标依赖 AMM 提供信息的主要目的有两种:

    (1)对抵押物进行估值;

    (2)对头寸代币进行定价。

    我们也可将其视为净值计算,而攻击者则专门寻找在净值计算中与实际情况出现偏差的合约进行操纵。一般步骤为:

    第一步,准备。获得用于操纵 AMM 预言机的资产 Y 及准备存入攻击目标的资产 A。

    第二步,抵押。将资产 A 抵押至攻击目标,获得代表抵押物的头寸代币 B,有些情况下,不发放头寸代币 B,只在智能合约内部记账。

    第三步,操纵。将资产 Y 投入 AMM 兑换资产 X,改变 AMM 流动性池内资产的比例从而改变报价,更新攻击目标合约内资产 A 或头寸代币 B 的定价。

    第四步,收尾。若为借贷业务,则通过抬高的抵押物估值借出更多资产并不再归还;若为机枪池业务,则通过抬高价格后的头寸代币 B 赎回资产,获得增值收益。

    三、安全建议

    哄抬套利和操纵预言机攻击模式本质上都是对净值计算环节的利用和操纵行为。故而在设计 DeFi 系统的时候,妥善处理这一环节至关重要。

    (1)最根本的预防措施就是取消用户自动触发交易策略链式执行或更新净值的权限,从根本上阻断攻击者完成一整套连贯的操纵行为。

    (2)安全审计:智能合约安全关系用户的财产安全,至关重要!区块链项目开发者应与专业的安全审计公司合作,为用户的数字资产安全和项目本身安全提供保障。

    (3)增加交易延迟:操纵价格预言机是一个对时间敏感的操作,因为套利者总是在观察,并希望有机会优化任何次优市场。如果攻击者想把风险降到最低,他们会希望在单笔交易中完成操纵价格预言机所需的两笔交易,这样就不会有套利者夹在中间。作为协议开发者,可能只需要将用户进出系统之间的时间间隔增加1个区块的延迟就可以一定程度上防范此类攻击。

    (4)时间加权平均价格(TWAP):Uniswap引入了一个TWAP预言机,供链上开发者使用。有文档详细地介绍了该预言机提供的具体安全保障。一般来说,对于长期没有链上拥堵的大型资产池来说,TWAP预言机对预言机操纵攻击有很强的抵抗力。不过,由于其实施的性质,在市场波动较大的时刻,它的响应速度可能不够快,而且只适用于链上已经有流动性的数字资产。

    (5)M-of-N报告者机制:如今很多项目都在使用这种方法。Maker运行了一组由可信实体运营的喂价来源,Compound创建了Open Oracle,并拥有Coinbase等报告者,Chainlink聚合了Chainlink运营商的价格数据,并在链上公开。此方法也可有效的防范操纵预言机攻击。

    四、通付盾智能合约审计BitScan

    通付盾作为领先的区块链安全服务提供商,为开发者提供智能合约审计服务。智能合约审计服务由自动化审计和人工审计构成,满足不同客户需求,独家实现覆盖高级语言层、虚拟机层、区块链层、业务逻辑层四个方面111项审计内容,全面保障智能合约安全。

    智能合约自动化审计在通付盾云平台上为用户提供智能合约进行自动化审计服务。运用符号执行、形式化验证等智能合约分析技术,保障智能合约安全运行。

    通付盾也为客户提供高级别的区块链安全服务,区块链安全专家团队7*24小时为智能合约提供全生命周期的安全保障,服务包括:VIP安全审计服务、VIP合规审计服务、安全事故应急响应等。

这篇关于斯巴达陷落—BSC首次闪电贷攻击事件分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3