編者按:本文來自慢霧科技,Odaily星球日報授權轉載。
前言
據鏈聞消息,4月18日,Tokenlon宣布暫停imBTC轉賬,因其發現有攻擊者通過ERC777在Uniswap流動性合約中的重入漏洞,對ETH-imBTC池循環套利。此次的攻擊手法是一個存在于Uniswapv1上的已知漏洞,該漏洞最早由Consensys于2019年4月發現,當時Consensys只是發現了該風險,還沒有發現可以利用這種手法進行攻擊的token。隨后,在imBTC上線Uniswap后,由于imBTC是基于ERC777實現的,通過組合ERC777的特性及Uniswap代碼上的問題,使攻擊者可以通過重入漏洞實現套利。下面,我們將來分析此次套利中的攻擊手法和具體的細節。知識準備
ERC777協議是以太坊上的代幣標準協議,該協議是以太坊上ERC20協議的改進版,主要的改進點如下:1、使用和發送以太相同的理念發送token,方法為:send(dest,value,data)2、合約和普通地址都可以通過注冊tokensToSendhook函數來控制和拒絕發送哪些token3、合約和普通地址都可以通過注冊tokensReceivedhook函數來控制和拒絕接受哪些token4、tokensReceived可以通過hook函數可以做到在一個交易里完成發送代幣和通知合約接受代幣,而不像ERC20必須通過兩次調用來完成5、持有者可以"授權"和"撤銷"操作員這些操作員通常是交易所、支票處理機或自動支付系統6、每個代幣交易都包含data和operatorData字段,可以分別傳遞來自持有者和操作員的數據7、可以通過部署實現tokensReceived的代理合約來兼容沒有實現tokensReceived函數的地址在這里,我們需要特別關注的點是第二點,即ERC777標準中的tokenToSend函數,根據ERC777協議的定義,遵循該標準的token代幣在每一次發生代幣轉賬的時候都會去嘗試調用代幣發送者tokensToSend函數,而代幣持有者可以通過在ERC1820注冊合約注冊自己的合約并通過在這個hook函數中定義一些操作來處理代幣轉賬的過程中的某些流程,如拒絕代幣發送或其他操作。了解這些關鍵點,有助于我們理解這次攻擊的具體攻擊手法。現在開始,我們可以稍微加速,看看對于Uniswap而言,這次到底發生了什么?細節分析
慢霧:Inverse Finance遭遇閃電貸攻擊簡析:據慢霧安全團隊鏈上情報,Inverse Finance遭遇閃電貸攻擊,損失53.2445WBTC和99,976.29USDT。慢霧安全團隊以簡訊的形式將攻擊原理分享如下:
1.攻擊者先從AAVE閃電貸借出27,000WBTC,然后存225WBTC到CurveUSDT-WETH-WBTC的池子獲得5,375.5個crv3crypto和4,906.7yvCurve-3Crypto,隨后攻擊者把獲得的2個憑證存入Inverse Finance獲得245,337.73個存款憑證anYvCrv3Crypto。
2.接下來攻擊者在CurveUSDT-WETH-WBTC的池子進行了一次swap,用26,775個WBTC兌換出了75,403,376.18USDT,由于anYvCrv3Crypto的存款憑證使用的價格計算合約除了采用Chainlink的喂價之外還會根據CurveUSDT-WETH-WBTC的池子的WBTC,WETH,USDT的實時余額變化進行計算所以在攻擊者進行swap之后anYvCrv3Crypto的價格被拉高從而導致攻擊者可以從合約中借出超額的10,133,949.1個DOLA。
3.借貸完DOLA之后攻擊者在把第二步獲取的75,403,376.18USDT再次swap成26,626.4個WBTC,攻擊者在把10,133,949.1DOLAswap成9,881,355個3crv,之后攻擊者通過移除3crv的流動性獲得10,099,976.2個USDT。
4.最后攻擊者把去除流動性的10,000,000個USDTswap成451.0個WBT,歸還閃電貸獲利離場。
針對該事件,慢霧給出以下防范建議:本次攻擊的原因主要在于使用了不安全的預言機來計算LP價格,慢霧安全團隊建議可以參考Alpha Finance關于獲取公平LP價格的方法。[2022/6/16 4:32:58]
通過Etherscan查詢攻擊者的其中一筆交易0x32c83905db61047834f29385ff8ce8cb6f3d24f97e24e6101d8301619efee96e
慢霧:PAID Network攻擊者直接調用mint函數鑄幣:慢霧科技發文對于PAID Network遭攻擊事件進行分析。文章中指出,在對未開源合約進行在反編譯后發現合約的 mint 函數是存在鑒權的,而這個地址,正是攻擊者地址(0x187...65be)。由于合約未開源,無法查看更具體的邏輯,只能基于現有的情況分析。慢霧科技分析可能是地址(0x187...65be)私鑰被盜,或者是其他原因,導致攻擊者直接調用 mint 函數進行任意鑄幣。
此前報道,PAID Network今天0點左右遭到攻擊,增發將近6000萬枚PAID代幣,按照當時的價格約為1.6億美元,黑客從中獲利2000ETH。[2021/3/6 18:21:08]
可以發現,攻擊者兩度向Uniswap合約轉帳imBTC,金額同樣是0.00823084,然后從Uniswap收取了兩筆ETH,看上去似乎是十分正常的兩筆交易,實際上卻是暗流涌動,另有玄機。為了更好的了解整一筆交易的細節,我們需要通過bloxy.info來查看交易的具體細節。
慢霧:Cover協議被黑問題出在rewardWriteoff具體計算參數變化導致差值:2020年12月29日,慢霧安全團隊對整個Cover協議被攻擊流程進行了簡要分析。
1.在Cover協議的Blacksmith合約中,用戶可以通過deposit函數抵押BPT代幣;
2.攻擊者在第一次進行deposit-withdraw后將通過updatePool函數來更新池子,并使用accRewardsPerToken來記錄累計獎勵;
3.之后將通過_claimCoverRewards函數來分配獎勵并使用rewardWriteoff參數進行記錄;
4.在攻擊者第一次withdraw后還留有一小部分的BPT進行抵押;
5.此時攻擊者將第二次進行deposit,并通過claimRewards提取獎勵;
6.問題出在rewardWriteoff的具體計算,在攻擊者第二次進行deposit-claimRewards時取的Pool值定義為memory,此時memory中獲取的Pool是攻擊者第一次withdraw進行updatePool時更新的值;
7.由于memory中獲取的Pool值是舊的,其對應記錄的accRewardsPerToken也是舊的會賦值到miner;
8.之后再進行新的一次updatePool時,由于攻擊者在第一次進行withdraw后池子中的lpTotal已經變小,所以最后獲得的accRewardsPerToken將變大;
9.此時攻擊者被賦值的accRewardsPerToken是舊的是一個較小值,在進行rewardWriteoff計算時獲得的值也將偏小,但攻擊者在進行claimRewards時用的卻是池子更新后的accRewardsPerToken值;
10.因此在進行具體獎勵計算時由于這個新舊參數之前差值,會導致計算出一個偏大的數值;
11.所以最后在根據計算結果給攻擊者鑄造獎勵時就會額外鑄造出更多的COVER代幣,導致COVER代幣增發。具體accRewardsPerToken參數差值變化如圖所示。[2020/12/29 15:58:07]
動態 | 慢霧:9 月共發生 12 起較典型的安全事件,供應鏈攻擊趨勢愈發明顯:過去的 9 月區塊鏈生態共發生 12 起較典型的安全事件,包括:EOSPlay 遭受新型隨機數攻擊、資金盤項目 FairWin 智能合約權限管理缺陷、EOS 黑名單賬號 craigspys211 利用新晉 BP 黑名單缺陷轉移走 19.999 萬枚 EOS 等典型安全事件。此外,慢霧區塊鏈威脅情報(BTI)系統監測發現,針對區塊鏈生態的供應鏈攻擊越來越多,形如:去年 11 月慢霧披露的污染 NPM 模塊 EventStream、今年 7 月披露的對數字貨幣錢包 Agama 構建鏈的攻擊、今年 8 月披露的針對數字貨幣行情/導航站的 URL 劫持攻擊,還有 9 月慢霧披露的針對交易所使用的第三方統計、客服 js 的惡意代碼植入,進行實施盜幣攻擊。[2019/10/1]
通過查詢交易的細節,我們發現,攻擊者首先是通過ethToTokenSwapInput函數向Uniswap兌換了一些imBTC,然后再通過tokenToEthSwapInput函數開始第一次用imBTC換取ETH,然后Uniswap先將ETH轉給了攻擊者,再調用imBTC的transferFrom函數,由于imBTC實現了ERC777標準,所以在調用imBTC的trasferFrom函數的時候,imBTC會對攻擊者的tokensToSend函數進行調用。隨后,在攻擊者的tokensToSend函數中,攻擊者會進行第二次用imBTC換取ETH,然后流程結束。從交易細節上看,這里似乎還是沒有什么問題,我們繼續跟蹤UniSwap的代碼。
聲音 | 慢霧:Dapp、交易所等攻擊事件造成損失已近41億美金:慢霧數據顯示Dapp、交易所等攻擊事件造成的損失已達4098587697.68美金,半月增加近3億美金。據2月28日報道,慢霧區上線“被黑檔案庫(SlowMist Hacked)”,目前各類攻擊事件共造成約 3824082630.12 美金的損失。[2019/3/13]
上面是代碼是Uniswap的ethToTokenSwapInput函數的代碼,根據代碼分析,Uniswap的ethToTokenSwapInput函數會調用ethToTokenInput函數,然后會先通過getInputPrice獲取代幣能換取的eth數量,之后通過send函數將eth發給用戶,最后再通過transferFrom把代幣轉進合約。我們繼續跟進getInputPrice函數。
通過分析getInputPrice函數,我們能知道,ETH獲取量計算的公式為
把該公式放到ethToTokenInput函數的上下文中,該公式就變成了
在該公式下,一次正常的imBTC兌換ETH的過程中,作為分母的imBTC儲備量在兌換過后應該要上升,對應的ETH儲備量會變小。
但是回顧攻擊者的操作方式,在攻擊者第一次發送imBTC兌換ETH的過程中,Uniswap會先發送ETH給攻擊者,這時候Uniswap中ETH儲備量減少,然后Uniswap調用transferFrom函數,(注意此時還未將攻擊者的imBTC扣除),緊接著在transferFrom函數中攻擊者調用的第二次的ethToTokenSwapInput時,通過getInputPrice獲取兌換的ETH數量的公式會變成這樣:
注意看,在第二次的兌換計算中,只有ETH的儲備量變少了,而imBTC的儲備量并未增加,這導致相比與單獨的調用ethToTokenSwapInput函數,攻擊者可以通過重入的方式,在第二次使用imBTC兌換ETH的過程中,使計算公式的分子發生了變化,而公式的分母不會發生變化。相比正常的兌換,攻擊者通過重入方式進行的第二次兌換會獲取微小的利潤,導致有利可圖。重復這樣的過程,就能通過等量的imBTC獲取更多的ETH,導致Uniswap做事商的損失。防御方法
在Uniswap的tokenToEthSwapInput函數中加入OpenZeppelin的ReentrancyGuard函數,防止重入問題。在進行代幣交換的時候,先扣除用戶的代幣,再將ETH發送給用戶。同時,針對本次攻擊事件慢霧安全團隊建議:在關鍵的業務操作方法中加入鎖機制,如:OpenZeppelin的ReentrancyGuard開發合約的時候采用先更改本合約的變量,再進行外部調用的編寫風格項目上線前請優秀的第三方安全團隊進行全面的安全審計,盡可能的發現潛在的安全問題多個合約進行對接的時候也需要對多方合約進行代碼安全和業務安全的把關,全面考慮各種業務場景相結合下的安全問題合約盡可能的設置暫停開關,在出現“黑天鵝”事件的時候能夠及時發現并止損安全是動態的,各個項目方也需要及時捕獲可能與自身項目相關的威脅情報,及時排查潛在的安全風險最后的思考
這兩天的DeFi世界被鬧得沸沸揚揚,imBTC作為ERC777代幣首當其沖,ERC777協議也飽受詬病,但是看完分析,造成此次的攻擊事件原因,真的是imBTC或者是ERC777協議的問題嗎?如果Uniswap做好了ERC777的兼容,使用ReentrancyGuard,并在代幣交換的時候先扣除用戶的代幣,再將ETH發送給用戶,這樣的問題是不是就不會發生?imBTC作為以太坊上token化的比特幣代幣協議,其安全性在自身單獨運行的時候并不存在問題,第三方DeFi平臺在接入的時候,應需要充分考慮平臺本身的業務邏輯與接入代幣之間的兼容性,才能避免因兼容性發生不必要的安全問題。而不是簡單的將問題歸咎于協議和代幣提供方。
Tags:ETHBTCTOKETOKENmethylethylLBTC幣guaranteed-ethurance-token-extraimToken錢包app安卓
本文系以太坊基金會研究員DankradFeist和PlatON算法科學家謝翔博士聯合撰寫,主要剖析以太坊2.0在可拓展性、數據可用性、托管策略、MPC等方面的探索實現.
1900/1/1 0:00:00本文來自:哈希派,作者:LucyCheng,星球日報經授權轉發。 一枚比特幣的價格是多少?用法定貨幣來衡量的話,這是一個不斷變化的答案;從理論上來說,它由市場決定.
1900/1/1 0:00:00編者按:本文來自慢霧科技,Odaily星球日報授權轉載。 據慢霧區情報,以太坊DeFi平臺Lendf.Me遭受重入漏洞攻擊.
1900/1/1 0:00:00編者按:本文來自互鏈脈搏,作者:金走車,Odaily星球日報經授權轉載。4月24日下午5點,國家互聯網信息辦公室發布了第三批境內區塊鏈信息服務名稱及備案編號.
1900/1/1 0:00:00近年來,隨著高新科技產業的發展和國家對創新創業的大力扶持,互聯網企業的發展如火如荼,線上產品獨有的高效、低投入、高產出的作業模式也為互聯網的發展開辟了更廣闊的路徑.
1900/1/1 0:00:00編者按:本文來自Cointelegraph中文,作者:TURNERWRIGHT,Odaily星球日報經授權轉載.
1900/1/1 0:00:00