5

Polygon生态的“潘多拉魔盒”已打开? | SafeDollar攻击事件分析

 3 years ago
source link: http://www.iterduo.com/posts/117961
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Polygon生态的“潘多拉魔盒”已打开? | SafeDollar攻击事件分析 - 耳朵财经

Polygon生态的“潘多拉魔盒”已打开? | SafeDollar攻击事件分析

成都链安 2021-06-28 20:43

​​一、事件概览

北京时间6月28日,链必安-区块链安全态势感知平台(Beosin-Eagle Eye)舆情监测显示,Polygon生态算法稳定币项目SafeDollar遭到黑客攻击。攻击事件发生后,SafeDollar项目所发行的稳定币(SDO)价格从1.07美元,瞬间跌至归零。

有消息指出,一份未经证实的合约抽走了25万美元的USDC和USDT;后经Rugdoc.io分析证实,此次攻击事件中黑客总共获利价值25万美元的USDC和USDT。随后,SafeDollar项目方发布公告,要求投资者停止所有与SDO相关的交易。目前,SDO交易已暂时中止。

鉴于此次攻击事件所具备的标志意义,成都链安·安全团队第一时间介入分析。继5月初BSC(币安智能链)诸多链上项目频频被黑之后,6月末Polygon生态也开始被黑客盯上,“潘多拉魔盒”是否已经悄然开启?借此事件,成都链安通过梳理攻击流程和攻击手法,提醒Polygon生态项目加强安全预警和防范工作。

007apYDpgy1gry8vdsdp3j30ki0bagrg.jpg

二、事件分析

此次攻击事件中,攻击者利用PLX代币转账时实际到账数量小于发送数量以及SdoRewardPool合约抵押和计算奖励上存在的逻辑缺陷,借助“闪电贷”控制SdoRewardPool合约中抵押池的抵押代币数量,进而操纵奖励计算,从而获得巨额的SDO奖励代币,最后使用SDO代币将SDO-USDC和SDO-USDT两种兑换池中USDC和USDT全部兑换出来。

攻击者地址:

0xFeDC2487Ed4BB740A268c565daCdD39C17Be7eBd

攻击合约:

0xC44e71deBf89D414a262edadc44797eBA093c6B0

0x358483BAB9A813e3aB840ed8e0a167E20f54E9FB

攻击交易:

0xd78ff27f33576ff7ece3a58943f3e74caaa9321bcc3238e4cf014eca2e89ce3f

0x4dda5f3338457dfb6648e8b959e70ca1513e434299eebfebeb9dc862db3722f3

0x1360315a16aec1c7403d369bd139f0fd55a99578d117cb5637b234a0a0ee5c14

以下分析基于以下两笔交易:

0xd78ff27f33576ff7ece3a58943f3e74caaa9321bcc3238e4cf014eca2e89ce3f

0x1360315a16aec1c7403d369bd139f0fd55a99578d117cb5637b234a0a0ee5c14

攻击者首先使用PolyDex的WMATIC和WETH池进行PLX借贷,如下图所示:

007apYDpgy1gry8vdzotxj30k703i0t0.jpg

接下来,攻击者通过攻击合约反复进行抵押提取,主要是为了减少SdoRewardPool合约中SDO抵押池中的抵押代币数量。

007apYDpgy1gry8vefz2bj30kv08aab5.jpg

PLX代币合约进行代币转移时,如果from地址不在_isExcludedFromFee列表中,并且to地址也不在_isExcludedToFee列表中,会对转移的代币收取一次奖励基金以及销毁本次转移代币数量的0.05%。

007apYDpgy1gry8venpttj30mk0km40a.jpg

而在SdoRewardPool合约中,记录的数量为调用者所转移的数量,没有减去转移过程中损耗的部分,在进行提取操作时,提取的数量为记录的数量,超出了用户实际抵押到本合约的数量,故会造成该抵押池中抵押代币的异常减少。

007apYDpgy1gry8vevokcj30f407dmxj.jpg

攻击者事先通过攻击合约(0x358483BAB9A813e3aB840ed8e0a167E20f54E9FB)在该抵押池中抵押214.235502909238707603 PLX,在攻击合约(0xC44e71deBf89D414a262edadc44797eBA093c6B0)攻击完成后,控制攻击合约(0x358483BAB9A813e3aB840ed8e0a167E20f54E9FB)在该抵押池中进行奖励领取,由于SdoRewardPool合约中更新抵押池信息时使用的是balanceOf函数获取本合约中抵押代币数量,故获取到的数量是恶意减少之后的数量,继而造成PLX抵押池中accSdoPerShare变量异常增大,从而获取到巨额的SDO代币奖励。

最后利用获取到的SDO代币将SDO-USDC和SDO-USDT两种兑换池中USDC和USDT全部兑换出来。

007apYDpgy1gry8vf3xtfj30ja08cdga.jpg

007apYDpgy1gry8vfarnrj30ot05fjs2.jpg

三、事件复盘

事实上,此次攻击事件并不复杂,但是值得引起注意。首先添加抵押池时添加了非标准代币,再加上计算奖励时使用了balanceOf函数进行抵押代币数量的获取,所以导致了此次攻击事件的发生。

从安全审计的角度看,项目方作为添加抵押池的管理员,对于将要添加的抵押池中的抵押贷币,一定要三思而后行。通胀通缩类以及转移数量与实际到账数量不同的代币,不建议作为抵押池的抵押代币;如果因业务需要一定要添加这些类型的代币作为奖励代币,务必与其他标准代币分开处理。同时在抵押池中建议使用一个单独的变量作为抵押数量的记录,然后计算奖励时,使用通过此变量来获取抵押代币数量,而不是使用balanceOf函数。

另外,此次攻击事件对于Polygon生态链上项目而言,是否会是一个“危险信号”,Polygon生态的“潘多拉魔盒”是否会就此打开,这还需要观望后续态势发展。不过,回望5月,BSC生态发生第一起闪电贷攻击之后,便就此拉开了“BSC黑色五月”序幕。鉴于前车之鉴,成都链安在此提醒,Polygon生态链上项目未雨绸缪,切实提高安全意识!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK