區塊鏈技術的誕生,為傳統金融、數據隱私、供應鏈、跨境匯款等應用領域帶來革命性的突破。其中「去中心化金融」便是當前最為火熱的應用之一。
DEFI作為一個金融概念,其基石就是一個個的代幣,代幣分為很多種類,一般都是以代幣標準進行分類的,比如知名的ERC20代幣標準,以及非同質化代幣(NFT)標準ERC721等等。因此作為DEFI的基石,代幣層面的安全問題就不可忽視了。
今天成都鏈安技術團隊為大家科普DEFI安全問題代幣層面存在的安全問題:第一大類是代幣本身的問題,第二大類是代幣與DEFI交互中可能會遇到的安全問題。
#A.代幣層面的問題
1.整型溢出問題
為什么整型溢出這么重要呢?最主要的原因就是因為他們一旦出現就會造成較大的資金損失。在0.8.0之前,EVM并不存在溢出檢查機制,需要特別關注數值運算時的整型溢出問題;而在0.8.0之后,solidity推出了自帶的溢出檢查機制,從根本上避免了整型溢出問題,但是同樣也要注意,當使用unchecked關鍵字時,其涉及的數字運算也是不檢查溢出的。
整型溢出一般分為上溢和下溢,上溢是指當運算結果大于uint數據類型規定的取值上限時,會導致溢出到取值下限開始重新計算(一般即為0)。
例如uint8的取值范圍是0-255,當給一個數據類型為uint8的變量a賦值為260時,就會導致溢出成0+(260-256)=4,從而a的取值就會變成4。同理當變量賦值比0小時,會導致下溢問題,比如一個uint8類型的變量b,賦值的時候為b=0-5,那么這時候b的取值不會是-5(uint8類型是無符號整型,所以沒有負數),因此b的取值就會變成256-5=251。
下圖為某代幣的multiTransfer函數,該函數在對處理輸入參數tokens數組累加時,未使用SafeMath進行整型溢出檢查,使得攻擊者有機會構造整型溢出攻擊,導致totalTokensToTransfer的值上溢變為一個較小值而通過余額檢查,轉出巨額資產。
美SEC主席:絕大多數加密代幣符合投資合同測試,大多數加密中介機構也須遵守證券法:6月9日消息,美國證券交易委員會(SEC)主席 Gary Gensler 在 2023 全球交易所和金融科技大會之前發布的一份發言稿中表示,沒有任何跡象表明加密證券市場中投資者和發行人不應該受到我們證券法的保護。正如我多次說過的,絕大多數加密代幣符合投資合同測試。這些代幣有團隊通過網站和 Twitter 帳戶進行推廣。這些代幣并非憑空而來。加密證券發行人需要向 SEC 登記其投資合同的要約和銷售或滿足豁免要求。
Gary Gensler 進一步稱,鑒于大多數加密代幣都受證券法的約束,因此大多數加密中介機構也必須遵守證券法。如果中介機構不進行注冊,受到傷害的是投資者,美國金融市場也可能會受到影響。在證券市場的其他領域,交易所、經紀自營商和清算功能是分開的,這有助于減輕因混合此類服務而可能產生的沖突。加密貨幣中介機構可能需要分離業務線,制定防止欺詐和操縱的規則手冊,適當隔離客戶資金,緩解沖突,或改變他們的清算和托管方法。[2023/6/9 21:25:39]
Ammbr合約的multiTtansfer函數
修改建議
在0.8.0版本以前建議引入SafeMath安全運算庫來對數據進行運算,在0.8.0及以上版本使用unchecked時,建議使用require等函數對結果溢出進行檢查。
2.函數權限設置錯誤
函數權限設置錯誤通常都是由于合約開發者的疏忽所致,很多內部函數在運行時會直接更改合約儲存數據,而不進行相關的檢查,如果這部分函數的可見性被設置為public或者external,將產生重大的安全漏洞。今年十月份AVATerraFinance就出現過這個問題,它將鑄幣函數mint的可見性修飾詞設置為了public,這導致任意攻擊者都能夠進行鑄幣操作。
沉睡兩年的巨鯨地址將5000萬枚GALA轉移至Coinbase:4月24日消息,據spotonchain監測,0x3bf開頭的巨鯨地址在沉睡2年后,于5小時前將5000萬枚GALA轉移至Coinbase,平均價格0.041美元,預計實現利潤190萬美元。這些GALA是該地址在2020年9月以0.003美元的均價購入的,目前仍然持有164,098,773枚GALA。[2023/4/24 14:23:03]
AvaterraToken的合約代碼
修改建議
對鑄幣、權限更改等敏感函數做嚴格的權限檢查;并根據業務邏輯確定這類函數的可見性。
3.權限過大
管理者擁有過大的合約權限,會出現用戶資產量不可控和資產價值不穩定的情況。如管理員擁有隨意轉走和銷毀用戶余額的權限,則可將用戶的資產隨時歸零;如管理員擁有無限鑄幣的函數權限,則可大量發行此類代幣,使得代幣價格迅速貶值。
下圖為管理員能夠隨意銷毀用戶代幣的函數,這里在修飾器上使用的是onlyRole的修飾器,并且重寫了burnFrom函數導致可以任意銷毀指定賬戶的代幣。
高權的burnFrom函數
修改建議
對管理員的權限范圍做嚴格的審查,關注轉移用戶代幣、違規銷毀用戶代幣的操作點。建議刪除這些留有隱患的代碼,保障用戶的財產安全。
4.自我增發漏洞
這種漏洞是一種很特別的邏輯漏洞,當用戶自己給自己轉賬時,由于轉賬函數中設置了多個局部變量,導致了變量之間的互相覆蓋,從而引起的自我增發漏洞。
這個漏洞很典型的例子是Troncrashcoin代幣,其轉賬函數邏輯如下:
報告:FTX事件的影響或會超出此前Luna和三箭資本崩盤時受到牽連但未破產的機構的范圍:11月10日消息,火幣研究院在昨日晚間發布的一份報告稱,本次FTX暴雷事件的影響可能會超出此前Luna和三箭資本崩盤時受到牽連但未破產的機構的范圍,并將影響深入到行業各個角落。本輪繼續參與了對FTX的借貸的機構潛藏著巨大的清算風險。
報告稱,直接影響層為FTX和Alameda直接投資的項目以及與FTX有直接借貸與合作關系的中心化機構。項目層面主要包括Solana、Fantom和Serum在內的重要的公鏈和DEX等。間接影響層為Alameda作為做市商和股權置換的項目,或者和FTT等資產重度綁定的項目,如bitDao、MIM等。這些項目雖然沒有FTX的投資,但與其存在較深入的業務往來,在當前的情況下也會受到較大的影響。輻射層為大盤其他資產,主要受關聯資產影響以及市場恐慌情緒帶動。[2022/11/10 12:41:49]
1.新建變量oldFromVal和oldToVal存儲舊balances2.新建變量newFromVal和newToVal來存儲新的balances,即oldFromVal+_value和oldToVal+_value3.將newFromVal和newToVal賦值給balances和balances
這時候就出現了一個問題,一旦_to地址和_from地址相同,balances就會被balances的值覆蓋,導致之前減少的_value不起作用,從而產生了自我增發_value卻沒有減少_value的漏洞。
Troncrashcoin的_transfer函數
修改建議
項目方在開發完畢后需要對項目進行完整的測試,對各個功能點是否正常執行、對所有可調用的函數及其輸入的參數進行完整的輸入測試,驗證業務邏輯是否符合要求,避免給用戶帶來損失。比如測試極值,自我轉賬等一系列特殊情況是否滿足邏輯。
報告:中非共和國要求地區中央銀行協助制定加密法規:金色財經報道,一份新報告稱,中非共和國最近要求該地區中央銀行協助制定加密貨幣監管框架。報告還稱,中非共和國已經表達了“對單一貨幣的承諾和對中非國家銀行章程的尊重”。該報告還補充說,中非國家銀行(BCAS) 的Herve Ndoba和中非共和國(CAR)的財政和預算部長都簽署了聲明,表明雙方承諾再次合作。(bitcoin.com)[2022/8/1 2:50:17]
5.未正確校驗傳入參數
在函數的執行中如果未驗證傳入參數的合理性,就可能導致函數不按照預想的結果執行,比如permit函數如果未做零地址校驗,且對應的代幣的銷毀代幣方式是將代幣發送至零地址,那么攻擊者可以轉移零地址中被銷毀的代幣。還例如在一些智能合約中會存在freeze函數,用于凍結賬戶,但是在進行代幣轉賬時,只驗證了來源賬戶,未對轉入地址進行驗證導致轉入的代幣無法提出,還需注意的有transferFrom要額外驗證from地址。黑名單驗證也有類似問題。
未檢查0地址的permit函數
未驗證轉入地址的transfer函數
還比如ethernaut靶場中,NaughtCoin這道題,由于這個ERC20的只對了transfer做了lockTokens限定,沒有對transferfrom進行限定,導致攻擊者可以直接通過標準的erc20接口調用approve和transferfrom進行代幣提取。
Ethernaut靶場的NaughtCoin
修改建議
所有由用戶調用的函數都要對傳入的參數進行合理性檢查。避免參數使用不合理導致的異常。在使用具有限制的函數時,要驗證傳入不合要求的參數是否會繞過限制執行、或者有其他類似的函數可以進行繞過。
CoinShares因UST崩盤損失2140萬美元:金色財經報道,加密資產管理公司CoinShares周一發布2021年年度報告。報告中顯示,其針對UST的投資敞口出現了1700萬英鎊(2140萬美元)的“異常”虧損。
該公司首席執行官Jean-Marie Mognetti在報告中表示:“我們在清算UST頭寸的DeFi活動中計入了1700萬英鎊的異常虧損。”他補充說,這是一次“令人羞愧的教訓”。
根據IFRS編制的數據顯示,CoinShares在2021年全年的凈虧損從14億英鎊擴大到24億英鎊,盡管營收增長了四倍多。
凈虧損主要是由于金融工具的損失。該公司指出,根據IFRS準則,數字資產的收益沒有顯示在損益表上。
此前消息,加CoinShares發布2021年年度報告。截至2021年年底,該公司凈資產超過2億英鎊,較2020年年底(5650萬英鎊)增加2.5倍。2021年收入達8075萬英鎊,較2020年(1838萬英鎊)增加近3.4倍。替代綜合收益表顯示,2021年營業利潤達1.0141億英鎊,較2020年(1711萬英鎊)增加近5倍。(CoinDesk)[2022/6/1 3:53:52]
6.開發者后門
部分管理員在開發階段會請人代為開發,這種情況下開發者如果在Token里面留下了后門,后續帶著后門上線的Token會對項目和用戶都造成損失。比如下面是代幣HJL在鑄造函數留的后門,導致每次鑄幣都有1%的增發代幣流入0xfa這個地址,導致該代幣的實際流通量大于顯示值。
HJL代幣的mint函數
修改建議
建議代幣上線前,多進行幾次審核,并且驗證部署代幣的哈希和最終審核版本的哈希是否一致。
#B.DEFI交互中的代幣問題
1.通縮型代幣的差額套利
今年DEFI出現了一批以safemoon為代表的通縮型代幣,用戶在使用此類幣交易時,會銷毀部分代幣,導致實際到賬數量和支出數量并不一致。因此,如果類似于抵押池一類的DEFI項目根據轉賬數量來記錄資產,一旦與此類代幣進行交互,很容易出現項目實際擁有資產與記錄值不一致的情況,這很容易被攻擊者所利用,比如SafeDollar攻擊事件。
SafeDollar攻擊事件就是攻擊者利用PLX代幣轉賬時實際到賬數量小于發送數量以及SdoRewardPool合約抵押和計算獎勵上存在的邏輯缺陷,借助閃電貸控制SdoRewardPool合約中抵押池的抵押代幣數量,進而操縱獎勵計算,獲得利益。
SdoRewardPool合約的deposit
這里我們用公式大概描述一下,獎勵計算系數A=新產生的獎勵代幣SAO的數量/抵押池中抵押代幣PLX數量,攻擊者首先利用閃電貸獲取大額資金,然后利用SdoRewardPool合約中更新獎勵參數存在的邏輯漏洞和抵押代幣PLX轉賬數量與實際到賬數量可能不一致的特殊機制,導致獎勵計算系數A急劇增大。然后利用另一個提前進行了抵押的攻擊合約領取大量抵押獎勵,從而惡意獲得了大量的SAO代幣。
修改建議
建議合約用轉賬前后的資金變化作為實際合約收到的轉賬數量,而不是用戶傳入的參數,尤其是流動性交易更需要注意。以免出現代幣自帶手續費或者自動銷毀等情況導致實際金額與記錄金額不一致的情況,讓攻擊者利用來造成大量損失。
2.代幣接口規范問題
在DEFI與代幣交互時,遵循的是統一的代幣接口規范,如果代幣實現時沒有遵循標準的接口規范,則可能會在交互過程中導致代碼的邏輯執行異常。比如著名的泰達幣(USDT)在部分鏈上代碼實現就不符合ERC20的標準,在波場(TRON)和以太坊(ETH)的USDT代碼中,都有著返回值不規范的情況。以太坊的USDT主合約中,transfer函數雖然有返回值,但是函數聲明時卻沒有聲明,導致后續沒有返回值。
以太坊USDT主合約的transfer代碼同樣在波場的USDT中,主合約中的transfer函數繼承的父合約的transfer。但是父合約的transfer雖然有聲明返回值,但是函數中卻沒有返回值,因此會導致主合約的transfer會永久返回false。
波場usdt主合約的transfer代碼
波場usdt子合約的transfer代碼
因此這兩個鏈上的USDT合約都不符合ERC20的標準,如果DEFI未注意該問題,可能就會導致資金被鎖死在合約之中。
修改建議
在進行代幣轉賬時,需要檢查調用的代幣合約的轉賬函數是否滿足ERC20標準。對沒有返回值的轉賬函數使用SafeERC20來執行轉賬,但是波場USDT的transfer函數未遵循其自有的TRC20規范,會導致函數返回默認的false。使得SafeTransfer執行失敗,需要專門寫函數調用。
3.ERC721,ERC777,ERC1155
可能引發的重入風險
重入漏洞算是一個比較知名的基礎漏洞了,代幣中當然也有這樣的重入風險,比較典型的例子就比如ERC1155里面safeTransferFrom函數中會調用_doSafeTransferAcceptanceCheck函數,然而_doSafeTransferAcceptanceCheck里面會檢測如果目標地址是合約的話,會調用他的onERC1155Received方法,這里如果DEFI合約編寫不恰當,調用safeTransferFrom位置在重要操作(例如修改余額)之前,則會引發重入漏洞。
ERC1155的safeTransferFrom函數
ERC1155的_doSafeTransferAcceptanceCheck函數
比如下面這個合約,withdraw函數的amount減少放在了safeTransferFrom之后,一旦有惡意合約構建一個onERC1155Received來進行重入,那么多次重入以后就能夠提取合約中的所有代幣。
危險的DEFI代碼
攻擊合約
修改建議
重入漏洞可以使用檢查-生效-交互模式來進行避免,對轉賬函數可以使用openzeppelin官方的ReentrancyGuard進行修飾。注意是否存在重要操作(例如修改余額)在外部調用之前,可能會導致重入風險。
4.無限授權
用戶在與DEFI進行代幣交互時,部分DEFI項目可能會直接向用戶要求無限授權,然而這其實是個很不安全的行為,一旦DEFI項目的前端或者項目內部出現了一些漏洞和問題,用戶的代幣安全將會無法獲得保障,因此通常來說DEFI項目最好讓用戶有選擇性的給予授權值,以免造成不必要的代幣資產損失。
在流動性挖礦項目UniCats中就存在無限授權。用戶可以存入Uniswap代幣,然后通過流動性挖礦獲得項目方發行的MEOW代幣。但是如果要參與挖礦,前端要求用戶必須提供無限授權。用戶在項目上質押了UNI代幣,也可以將獎勵與質押取回,但是項目方利用合約中的后門任何時候都可以將代幣轉走。所以用戶在參與DEFI時必須注意保護賬戶的授權。用戶在授權UniCats時收到了錢包提示,但是由于授權一般是DEFI的常見操作,用戶往往會因為忽略細節而向合約無限授權。
MetaMask的無限授權提醒用戶收到挖礦獎勵取回質押后,已經從項目中退出,這時候往往更容易松懈。因為授權還未取消,項目合約有后門來讓項目方進行調用,管理員就可以通過授權來轉走用戶的UNI。之后項目方提款跑路,使廣大用戶蒙受巨大的損失。
另一個例子是DegenMoney項目。DegenMoney這個項目沒有在智能合約中暗留后門,而是創建了一個前端來進行兩次授權交易。DegenMoney的參與者面臨著竊取用戶資金的風險。第一次授權是針對質押合約,第二次授權惡意地址,會導致資金被攻擊者通過第二次授權地址使用transferFrom提取。用戶提走合約里的代幣無濟于事,必須取消授權才能避免盜幣事件的發生。
為了防止類似的事件再次發生,有網站可以提供查詢服務來方便用戶。使得用戶及時了解授權信息,避免盜幣風險。
修改建議
授權是代幣的常見操作,建議用戶重視自身財產安全,不要盲目相信項目方。定期使用查詢網站來判斷是否有授權過度的風險,發現之后及時取消。下面為地址授權查詢平臺
幣安鏈官方區塊鏈授權查詢:https://bscscan.com/tokenapprovalchecker以太坊鏈官方區塊鏈授權查詢:https://etherscan.io/tokenapprovalchecker鏈上工具:https://mycointool.com/Approval
來源:金色財經
Tags:ANSTRARANFERGalaxy VillansDecentralized Tower Defense3X Short Algorand TokeniBuffer Token
薩爾瓦多對比特幣的接納一直是2021年加密行業最大的故事之一。在今年6月舉行的<比特幣大會2021:邁阿密>上,薩爾瓦多總統納伊布·布克勒宣布將很快接受比特幣作為法定貨幣.
1900/1/1 0:00:002022年1月1日,Lostopia恐龍學院發生了一件“大事”,由數旅人(上海)文化發展有限責任公司和中華恐龍園合作的首批數字盲盒正式在DT宇宙APP發行.
1900/1/1 0:00:00原文作者:GavinWood假期又到了,隨著新年的到來,讓我們快速回顧一下?Polkadot項目在2021年取得的成就。現在來看,從查看Polkadot核心技術的代碼量開始似乎已經是一種傳統.
1900/1/1 0:00:002021年即將過去,在這一年中,伴隨著各種戲劇化時間、價格波動和創新,加密行業得到了快速發展。Twitter一直是加密社區討論行業熱點事件的溫床,行業KOL和公司發布了大量與行業相關的內容,我們.
1900/1/1 0:00:00想象一下這樣的世界,不是被封閉的董事會會議和幕后財團所控制,而是由開源網絡上的去中心化治理來運作,這就是基于區塊鏈的去中心化自治組織(DAO)期待實現的愿景.
1900/1/1 0:00:00DAOFarmer是一款結合了區塊鏈技術和傳統游戲內涵的元宇宙游戲。DAOFarmer分為三個階段:新生、崛起和降臨.
1900/1/1 0:00:00