OKC 項目被攻擊事件分析

免責聲明: 內容不構成买賣依據,投資有風險,入市需謹慎!

OKC 項目被攻擊事件分析

深圳零時科技 個人專欄 剛剛 關注

來源:零時科技

事件背景

2023-11-13 18:51:57 (UTC) 鏈上發生一筆針對 OKC Token 的攻擊事件,黑客通過存在缺陷的MinerPool獲取了及時收益

黑客攻擊交易:

0xd85c603f71bb84437bc69b21d785f982f7630355573566fa365dbee4cd236f08

黑客攻擊合約1:

0xD5d8c2fd8A743A89BC497B2F180C52d719a007B9

黑客攻擊合約2:

0x617432Fc98c1fFaAB62B8cB94Cef6D75ABD95598

黑客攻擊合約3:

0x28e7c8337373C81bAF0A4FE88ee6E33d3C23E974

攻擊者地址:

0xbbcc139933D1580e7c40442E09263e90E6F1D66D

漏洞合約:

0x36016C4F0E0177861E6377f73C380c70138E13EE (MinerPool)

攻擊分析

通過對鏈上交易數據分析,我們對其交易進行整理歸納。

黑客首先通過多個閃電貸進行對攻擊資金的籌集,共借款 2,753,399 USDT Token。

隨後立即將其中 130,000 USDT Token 兌換爲一個最小單位的 USDT Token 和 27,264 OKC Token 。

由於 PancakeSwapv2 使用的是AMM(恆定函數做市商),在該模型中,交易池中的兩種代幣的數量乘積是一個常數。可以用以下公式表示:

其中:

• x是交易池中第一種代幣的數量。

• y是交易池中第二種代幣的數量。

• k是一個常數,表示池中兩種代幣數量的乘積。

當一個交易者想要用一種代幣兌換另一種代幣時,他們會增加交易池中一種代幣的數量(dx),同時減少另一種代幣的數量(dy),以保持的不變性。這個過程會改變代幣的相對價格。

假設交易者想要用代幣A兌換代幣B,那么在交易前後,恆定乘積公式應該保持成立:

由於k是不變的,這意味着x·y在交易前後是相同的。但是,因爲交易者增加了代幣A的數量(dx)並且減少了代幣B的數量(dy),這將導致代幣B的價格上升。

代幣的即時價格可以通過計算池中兩種代幣數量的比率來得出。如果代幣A是x,代幣B是y,則代幣B相對於代幣A的價格是y/x。在交易之後,代幣B的數量減少了,代幣A的數量增加了,所以新的價格變成了(y-dy)/(x+dy) 。由於分子減小而分母增大,這個比率變小了,意味着代幣B的價格上升。

在大額交易的情況下,dx和dy可能非常大,這會導致價格的顯著變動。這是因爲爲了保持k的不變,必須從池中移除大量的dy來補償dx的增加。這種大額交易對池中代幣數量的巨大影響導致了價格的顯著變化。

故攻擊者通過使用大額閃電貸資金進行买入OKC,導致 OKC 數量減少,從而拉高了 OKC Token 的價格,將 1 OKC = 0.3 USDT 的價格提升到 1 OKC = 68.9 USDT。

後攻擊者創建了兩個合約地址,並分別向兩個地址中發送了 0.01 OKC 和 0.0001 USDT 和 一個最小單位的OKC。

然後黑客使用主要的攻擊合約對 PancakePair_USDT_OKC 池子添加流動性操作,得到約 225,705 個LP Token。

隨後將 LP Token 全部轉移至 攻擊者創建的 0x28e7c8337373C81bAF0A4FE88ee6E33d3C23E974 攻擊合約中隨後立即調用漏洞合約中的 processLPReward 函數,對合約內存儲的 lpHolder 地址進行獎勵分配。此處雖然攻擊者的操作只是向 MinerPool 合約轉账,但是該合約在接受轉账的回調函數中調用了processLPReward 函數。

根據下圖,我們得知攻擊合約 0x28e7c8337373C81bAF0A4FE88ee6E33d3C23E974 在獎勵領取中獲得了 77,890 個 OKC Token。

然後攻擊者轉出攻擊合約 0x28e7..E974 的的 LP Token 並將其銷毀移除流動性,獲得了 1,884,223 USDT Token,以及 27,264 OKC Token。

並轉移出另外兩個攻擊合約中的所有的Token至主要攻擊合約

0xD5d8c2fd8A743A89BC497B2F180C52d719a007B9 ,分別爲:272 個,77,890 個 OKC Token。

黑客將所有的OKC ,約 104,610 OKC Token 兌換爲約 136,518 USDT Token,此時黑客總持有約 2,759,918 USDT Token。

最後,黑客歸還所有閃電貸的本金和利息,最終剩余約 6,268 USDT Token,並全部轉移至攻擊者地址

0xbbcc139933D1580e7c40442E09263e90E6F1D66D。

漏洞分析

通過攻擊分析得知,黑客主要獲利資金是由 MinerPool 合約中 processLPReward 函數,該函數邏輯主要是獲取 lpHolder 並根據其 LP 數量直接按比例進行獎勵。

我們可以看一下攻擊者創建的第三個攻擊合約中的執行邏輯:

從該處邏輯可以看出addHolder函數中使用了 extcodesize() 來計算地址當前的大小,用來判斷地址是否是合約地址,但是在攻擊者通過 CREATE2 創建合約,由於合約在初始化時,該地址大小依然爲0,從而來攻擊者在其構造函數中調用該函數繞過其中的合約調用限制。

其在轉账時調用了 addHolder 函數將 合約地址添加到了 lpHolder 名單,所以該合約才可以通過領取獎勵獲取及時的OKC獎勵。

根據對 processLPReward 函數代碼邏輯進行分析,可以從下圖中看出,雖然設置了領取獎勵的鎖定時間,但是未設置 LP 持有時間進行校驗或限制,導致黑客通過閃電貸獲取大量臨時資金,並兌換爲LP ,並在領取獎勵後立即銷毀。

總結

簡單來說,黑客通過閃電貸借了大量USDT,並兌換大量OKC,從而拉高了OKC的價格。並且由於OKC項目未設置LP獎勵發放的鎖倉要求,所以黑客在獲取獎勵後立刻撤回流動性,從而獲取了項目方發放的流動性提供者的獎勵。並將OKC項目方獎勵的OKC Token出售。最終獲利 6,268 USDT。

1 好文章,需要你的鼓勵
了解更多區塊鏈一线報道,與作者、讀者更深入探討、交流,歡迎添加小助手QQ: 3150128700, 進入[金色財經讀者交流群]。
聲明:本文由入駐金色財經的作者撰寫,觀點僅代表作者本人,絕不代表金色財經贊同其觀點或證實其描述。
本文作者: 深圳零時科技
打开金色財經App 閱讀全文 打开金色財經,閱讀體驗更佳 金色財經 > 深圳零時科技 > OKC 項目被攻擊事件分析 免責聲明: 金色財經作爲开放的資訊分享平台,所提供的所有資訊僅代表作者個人觀點,與金色財經平台立場無關,且不構成任何投資理財建議。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

相關文章