一、事件背景
Balancer官網上對于其具體功能的描述為『EasilyswapERC20tokens.Exchangetokenswithoutdeposits,bids/asks,andordermanagement.Allon-chain.』。簡單來說Balancer就是提供在鏈上進行tokens交換的區塊鏈智能合約應用。
2020年6月29日凌晨,Balancer項目的兩個資金池遭受攻擊。攻擊者在此次事件中獲利約46萬美元,資金池市商損失約50萬美元。
根據此次安全事件的具體過程,可以將此次事件比喻為攻擊者『偷梁換柱』。
二、抽絲剝繭還原攻擊者『偷梁換柱』經過
2.1、安全事件概述
?根據鏈上交易數據顯示:
1、攻擊者利用自建合約
對存在通縮貨幣STA的資產池
進行了攻擊;
2、攻擊者利用自建合約
對存在通縮貨幣STONK的資產池
成都鏈安:Goldfinch項目的SeniorPool合約遭受攻擊,項目方累計損失超54萬美元:據成都鏈安“鏈必應-區塊鏈安全態勢感知平臺”安全輿情監控數據顯示,Goldfinch項目的SeniorPool合約遭受攻擊,攻擊者累計獲利28523個USDC,項目方累計損失541158個USDC。經成都鏈安技術團隊分析,本次攻擊原因是攻擊者可以利用Curve的FIDU-USDC池子獲取FIDU代幣,來獲取SeniorPool合約抵押USDC代幣的紅利。目前Curve中FIDU兌換USDC為1:1.03, 而在SeniorPool中的比例為1:1.07,這就產生了套利空間。[2022/6/28 1:36:11]
進行了攻擊。
2.2、攻擊步驟簡介
攻擊者首先通過閃電貸借款大量WETH,而后使用借得的WETH將被攻擊資金池中的通縮貨幣兌換出來,僅留下1e-18個通縮貨幣。完成上述準備工作后,攻擊者開始發動攻擊,不斷使用1e-18個通縮貨幣兌換資金池內的其他代幣,以達到『偷梁換柱』的目的。直到池內資金基本被轉移完后,攻擊者將獲利存入如下地址:
成都鏈安:whaleswap.finance項目遭受攻擊,至少損失5,946 個BUSD和5964個USDT:6月21日消息,據成都鏈安“鏈必應-區塊鏈安全態勢感知平臺”安全輿情監控數據顯示,whaleswap.finance項目遭受攻擊,成都鏈安技術團隊分析發現原因可能是因為whaleswap.finance Pair合約的K值校驗存在問題。每當用戶在進行交換時,K值校驗中傳入的參數量級存在問題,造成K值校驗失效。攻擊者先通過閃電貸借一筆BSC-USD,之后歸還閃電貸時K值校驗參數量級為10000^4。而K值校驗時采取的參數校驗量級為10000^2,導致K校驗失效。[2022/6/21 4:41:57]
0xBF675C80540111A310B06e1482f9127eF4E7469A
攻擊過程如下圖所示:
△圖1
此次事件發生后,Balancer團隊表示已對資產池進行審計,正在進行第三次審計,并將在UI界面啟用通縮貨幣黑名單,禁止用戶建立存在通縮貨幣的資產池。
成都鏈安:InuSaitama疑似遭遇套利攻擊,損失約430個ETH:3月27日消息,據成都鏈安技術團隊分析,InuSaitama疑似遭遇套利攻擊,攻擊者(0xAd0C834315Abfa7A800bBBB5d776A0B07b672614)在 Saitamask(0x00480b0abBd14F2d61Aa2E801d483132e917C18B)中通過swap交換出了幾乎10倍價值的SAITAMA Token,之后再通過uniswap交換回ETH,將其轉移到0x63493e679155c2f0aAd5Bf96d65725AD6427faC4,共獲利約430個ETH。[2022/3/27 14:19:43]
2.3、漏洞原理詳細分析
在分析漏洞具體信息之前我們需要知道以下兩點:
1、Balancer項目允許個人建立資金池。資金池本質上是一個智能合約,用戶可以調用資金池的函數進行代幣兌換。資金池中可以存在多種貨幣,用戶可以使用資金池中存在的貨幣進行兌換,兌換的比例按照一種固定的算法,如圖所示:
動態 | 成都鏈安再獲聯想創投、復星高科領投多輪數千萬元融資:區塊鏈安全公司成都鏈安科技有限公司繼2018年5月分布式資本種子輪投資,2018年11月界石資本、盤古創富天使輪投資后,近期連獲多輪融資,共計數千萬人民幣,由聯想創投、復星高科領投,成創投、任子行戰略投資,分布式資本、界石資本、盤古創富等老股東均跟投。
此次融資將用于持續深化區塊鏈全生態安全布局、研發“一站式”區塊鏈安全服務平臺、開展自主可控的區塊鏈安全技術研究、提升用戶全新體驗及全球化市場的拓展,助力成都鏈安成為全球區塊鏈安全領域的行業標桿。在當前區塊鏈新時代風口下,一方面成都鏈安將利用“一站式”區塊鏈安全平臺和服務,協助相關企業做好安全防護工作,提升安全防護能力,減少安全損失;另一方面將繼續大力協助政府監管機構做好調查取證等工作,以切實加強安全監管;同時多為行業發展發出正能量的聲音,帶頭建立起有序的行業規范,并促進安全標準建設。[2020/1/16]
△圖2
我們以用STA兌換WETH為例:
?TokenAmountOut表示可以兌換出的WETH的值
聲音 | 成都鏈安創始人:區塊鏈領域存在六大安全漏洞,全球共損失90億美元:在2019上海區塊鏈國際周現場,成都鏈安科技有限公司創始人、電子科技大學副教授楊霞詳細分析了行業的六大安全問題。即系統漏洞引起的損失、用戶使用不當引起的問題、網絡犯罪、暗網黑市交易、洗錢,傳銷盤和資金盤。根據數據來看,系統漏洞引起的損失,今年以來,由區塊鏈漏洞引起的損失高達30多億美元。從2011年到2018年損失高達90多億美元。(華夏時報)[2019/9/17]
?TokenBalanceOut表示當前池內的WETH的值
?TokenBalanceIn表示當前池子內的STA的值
?TokenAmountIn表示用戶輸入的STA的值
?TokenweightIn表示STA的權重,為一個固定值,只能由資金池的管理者更改
?TokenweightOut表示WETH的權重,為一個固定值,只能由資金池的管理者更改
?SwapFee表示手續費,為一個固定值,只能由資金池的管理者更改
綜上所述,當一種貨幣STA在一個資金池中的存量較少時,也就是bI較小時,就可以使用STA兌換更多的WETH。
2、STA代幣是一種通縮貨幣,當進行轉賬操作時,會自動銷毀一定量的STA。如下圖所示:
△圖3
tokensToBurn即為每次交易銷毀的值,其銷毀數額是轉賬數額的1/100,如當數值為1e-18時,其銷毀值也是1e-18。銷毀值的計算源碼如下圖所示:
△圖4
△圖5
接下來我們對本次攻擊事件進行分析,以存在STA的被攻擊資金池為例。攻擊者向自建合約
發起了一筆交易
。在此筆交易中,攻擊者首先從閃電貸借出了104331個WETH,如下圖所示:
△圖6
而后使用借來的WETH兌換被攻擊資產池中的STA,因為STA是通縮貨幣,每次transfer都會使得STA銷毀轉賬金額的1/100。如下圖為一次兌換:
△圖7
這筆交易共進行了20余次兌換,使得被攻擊資金池中的STA余量為一個極小值后開始使用STA兌換其他代幣,如下圖所示:
△圖8
我們可以發現,在此筆交易中,攻擊者轉給被攻擊合約的STA個數是『0』,但卻扣除了1e-18個STA,這不符合正常兌換情況。于是我們對此進行深入分析,通過事件日志確定攻擊者發送了1e-18個STA。如下圖所示:
△圖9
由此可得出結論,在發送過程中,因為STA的通縮機制,發送給資金池的STA會被銷毀,導致被攻擊資金池無法收到STA,但資金池合約仍然會認為收到了1e-18個STA,并更新STA的存量。如下圖所示:
△圖10
如果STA的存量增加,就會使得STA能夠兌換其他代幣的比例下降,因此攻擊者又調用了gulp()方法來更新STA的余額,使得資金池的STA余額等于實際余額。如圖所示:
△圖11
每進行一次兌換,攻擊者就會調用一次gulp()對STA的余額進行更新,這樣使得STA的余額始終為1e-18個,因此每次攻擊取出余額的比例都是不變的,如下圖所示:
△圖12
攻擊者使用這種方式,將資金池中的所有代幣以每次1/2的比例進行兌換,最終幾乎將資金池中的所有代幣全部提出。
2.4、攻擊事件總結
根據我們日常智能合約安全審計經驗來看,本次事件產生的原因,可能是資金池合約對流入資金的處理方式不夠完善,并沒有考慮到通縮性代幣的情況,在計算應當輸出的值tokenAmountOut和貨幣余額inRecord.balance的增減時,都是使用由用戶控制的tokenAmountIn參數,而不是實際收到的代幣數,導致實際池中的流入資金與記錄資金不相符,如下圖所示:
△圖13
另外,用于更新代幣余額的gulp函數的權限是external,這兩點組合起來,導致了本次事件漏洞的產生,如下圖所示:
△圖14
2020年7月17日,鈦媒體集團、鏈得得、六脈數字科技共同主辦的T-EDGE-X全球金融科技論壇在北京市大興區舉辦.
1900/1/1 0:00:00行業資訊 1.詐騙集團InfraudOrganization創始人已認罪,業務涉及數字貨幣交易;2.山東港口青島港通過區塊鏈推動進口提貨數字化;3.調查:大規模的數據盜竊活動致使多個加密域名面臨.
1900/1/1 0:00:007月11日,江蘇公布全省進口生鮮食品新冠病監測結果,5657份樣本的檢測結果全部為陰性。本次監測重點場所為全省進口冷藏冷凍生鮮食品冷庫和單位食堂,監測食品為2020年1月1日以來以冷藏冷凍方式.
1900/1/1 0:00:00:大家好,我是持幣者,專注幣市市場分析。理論上,市場有80%的時間處于震蕩行情中,20%的時間處于單邊行情.
1900/1/1 0:00:00易天說 隨著昨日凌晨的一波強勢拉升,行情在昨日5點時觸及日間高點9786一線,然后稍有回落,白盤一直盤整在9640一線附近,于此同時,市場上很多人都認為比特幣要繼續上攻萬元關口.
1900/1/1 0:00:00Filecoin社區亮點系列迎來第七篇,HackFS競賽激戰正酣,又有三個團隊表現亮眼!最近他們與Filecoin官方進行了深度交談,表達了他們如何參與HackFS.
1900/1/1 0:00:00