一、事件概覽 

北京時間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生態項目加強安全預警和防範工作。



二、事件分析

此次攻擊事件中,攻擊者利用PLX代幣轉賬時實際到賬數量小於發送數量以及SdoRewardPool合約抵押和計算獎勵上存在的邏輯缺陷,借助“閃電貸”控制SdoRewardPool合約中抵押池的抵押代幣數量,進而操縱獎勵計算,從而獲得巨額的SDO獎勵代幣,最後使用SDO代幣將SDO-USDC和SDO-USDT兩種兌換池中USDC和USDT全部兌換出來。

攻擊者地址:

0xFeDC2487Ed4BB740A268c565daCdD39C17Be7eBd

攻擊合約:

0xC44e71deBf89D414a262edadc44797eBA093c6B0

0x358483BAB9A813e3aB840ed8e0a167E20f54E9FB

攻擊交易:

0xd78ff27f33576ff7ece3a58943f3e74caaa9321bcc3238e4cf014eca2e89ce3f

0x4dda5f3338457dfb6648e8b959e70ca1513e434299eebfebeb9dc862db3722f3

0x1360315a16aec1c7403d369bd139f0fd55a99578d117cb5637b234a0a0ee5c14

以下分析基於以下兩筆交易:

0xd78ff27f33576ff7ece3a58943f3e74caaa9321bcc3238e4cf014eca2e89ce3f

0x1360315a16aec1c7403d369bd139f0fd55a99578d117cb5637b234a0a0ee5c14

攻擊者首先使用PolyDex的WMATIC和WETH池進行PLX借貸,如下圖所示:


接下來,攻擊者通過攻擊合約反復進行抵押提取,主要是為了減少SdoRewardPool合約中SDO抵押池中的抵押代幣數量。

PLX代幣合約進行代幣轉移時,如果from地址不在_isExcludedFromFee列表中,並且to地址也不在_isExcludedToFee列表中,會對轉移的代幣收取一次獎勵基金以及銷毀本次轉移代幣數量的0.05% 。



而在SdoRewardPool合約中,記錄的數量為調用者所轉移的數量,沒有減去轉移過程中損耗的部分,在進行提取操作時,提取的數量為記錄的數量,超出了用戶實際抵押到本合約的數量,故會造成該抵押池中抵押代幣的異常減少。



攻擊者事先通過攻擊合約( 0x358483BAB9A813e3aB840ed8e0a167E20f54E9FB )在該抵押池中抵押214.235502909238707603 PLX,在攻擊合約( 0xC44e71deBf89D414a262edadc44797eBA093c6B0 )攻擊完成後,控制攻擊合約( 0x358483BAB9A813e3aB840ed8e0a167E20f54E9FB )在該抵押池中進行獎勵領取,由於SdoRewardPool合約中更新抵押池信息時使用的是balanceOf函數獲取本合約中抵押代幣數量,故獲取到的數量是惡意減少之後的數量,繼而造成PLX抵押池中accSdoPerShare變量異常增大,從而獲取到巨額的SDO代幣獎勵。

最後利用獲取到的SDO代幣將SDO-USDC和SDO-USDT兩種兌換池中USDC和USDT全部兌換出來。




三、事件复盤

事實上,此次攻擊事件並不復雜,但是值得引起注意。首先添加抵押池時添加了非標準代幣,再加上計算獎勵時使用了balanceOf函數進行抵押代幣數量的獲取,所以導致了此次攻擊事件的發生。

從安全審計的角度看,項目方作為添加抵押池的管理員,對於將要添加的抵押池中的抵押貸幣,一定要三思而後行。通脹通縮類以及轉移數量與實際到賬數量不同的代幣,不建議作為抵押池的抵押代幣;如果因業務需要一定要添加這些類型的代幣作為獎勵代幣,務必與其他標準代幣分開處理。同時在抵押池中建議使用一個單獨的變量作為抵押數量的記錄,然後計算獎勵時,使用通過此變量來獲取抵押代幣數量,而不是使用balanceOf函數。

另外,此次攻擊事件對於Polygon生態鏈上項目而言,是否會是一個“危險信號”,Polygon生態的“潘多拉魔盒”是否會就此打開,這還需要觀望後續態勢發展。不過,回望5月,BSC生態發生第一起閃電貸攻擊之後,便就此拉開了“BSC黑色五月”序幕。鑑於前車之鑑,成都鏈安在此提醒,Polygon生態鏈上項目未雨綢繆,切實提高安全意識!​​​​