以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > 中幣 > Info

BlockSec DeFi攻擊分析系列之一我為自己代言:ChainSwap攻擊事件分析-ODAILY_CHA

Author:

Time:1900/1/1 0:00:00

去中心化金融(DeFi)作為區塊鏈生態當紅項目形態,其安全尤為重要。從去年至今,發生了幾十起安全事件。BlockSec作為長期關注DeFi安全的研究團隊(https://blocksecteam.com),獨立發現了多起DeFi安全事件,研究成果發布在頂級安全會議中(包括USENIXSecurity,CCS和Blackhat)。在接下來的一段時間里,我們將系統性分析DeFi安全事件,剖析安全事件背后的根本原因。

今天帶來這個系列的第一篇,去中心化跨鏈資產橋梁項目ChainSwap攻擊事件。

0xffffffff.前言

北京時間2021年7月11日凌晨,去中心化跨鏈資產橋梁項目ChainSwap再次遭到攻擊,部署于該跨鏈橋上的20+個項目遭到攻擊,損失超過800萬美元,是DeFi發展史迄今為止發生的最嚴重的攻擊事件。本文將抽絲剝繭分析攻擊的全部細節。

時間:Jul-10-202107:16:11PM+UTC#12801461

閱讀建議:

如果您剛剛接觸DeFi,可以從頭開始看起,但是文章較長,看不下去記得點個關注再走

如果您對Sushiswap、AMM、DEX等比較了解,可以直接從「0x1攻擊分析」開始

0x0.背景介紹

ChainSwap是一個跨鏈資產橋。所謂跨鏈資產橋,本質上就是為了解決在多個智能合約鏈的資產轉移問題。舉例來說,在幣安智能鏈鏈上的USDT代幣,想要轉換到以太坊主鏈上進行交易,則必須通過跨鏈資產橋進行轉換。ChainSwap、RenProtocol等是目前具有代表性的跨鏈資產橋項目,其上承載了數千萬美元的跨鏈交易,也使得這次攻擊造成的損失極為慘重。

Jack Dorsey的Block的TBD部門為其Web5項目推出新的開源工具包:金色財經報道,Jack Dorsey的金融技術公司Block (SQ) 的一個部門TBD為其Web5項目推出了一個新的開源工具包,旨在使開發人員更容易創建去中心化的互聯網應用程序。

這些技術集合包括DID,稱為驗證憑證(VC)的安全數字證書,提供姓名、年齡和資產所有權等方面的法律證明,以及去中心化網絡節點(DWN),以去中心化的方式存儲數,完整的Web5平臺將于2023年晚些時候推出。[2023/5/20 15:14:46]

①跨鏈資產橋ChainSwap

隨著以太坊及基于以太坊的去中心化金融生態的不斷發展壯大,越來越多基于以太坊虛擬機的智能合約區塊鏈應運而生,這其中就包括了幣安智能鏈、火幣生態鏈及波場鏈。

在多種智能合約鏈共存的場景下,出于在不同鏈上進行代幣交換的需求,跨鏈資產橋項目逐漸進入人們的視野。傳統的跨鏈資產橋如Shapeshift、ChangeNOW等是中心化的服務,在去中心化的大背景下,去中心化的跨鏈資產橋項目不斷出現,而ChainSwap正是其中的代表服務之一。

設計一個跨鏈資產橋,最大的難點在于如何在不同鏈之間驗證交易。針對這個問題,ChainSwap采取了PoA機制。

整個ChainSwap網絡中存在一組驗證者節點,這些節點的工作是驗證一條鏈上的交易并在另一條鏈上提供證明。舉例來說,假設用戶A希望將以太坊鏈上的1000USDT轉移到BSC鏈上,這一步轉移操作實現如下:

首先在以太坊鏈上,服務調用鏈上合約的send方法,把用戶的1000USDT發送給以太坊上的ChainSwap合約,生成一個發送交易。

消息人士:加密礦商PrimeBlock首席執行官在公司取消SPAC交易后離職:金色財經報道,兩位知情人士透露,加密礦商PrimeBlock首席執行官Gaurav Budhrani已離職,該公司在最近幾個月取消了與 10X Capital Venture Acquisition Corp. II (VCXA) 的合并上市計劃,PrimeBlock 沒有給出終止合并的任何理由。根據 Budhrani 的LinkedIn 個人資料,他在 PrimeBlock 工作了大約一年,他曾在高盛擔任副總裁,幫助經營加密投資銀行業務,完成超過 3000 億美元的加密貨幣、半導體、軟件和能源交易,其中包括 Coinbase 的 980 億美元直接上市。

此前報道,另一家礦商Gryphon Digital Mining最近也終止了SPAC上市交易,將糟糕的市場狀況作為主要原因之一。[2022/9/1 13:01:12]

隨后,ChainSwap會將這筆交易的信息發送給一組驗證者,這些驗證者會將這筆交易驗證并返回一組簽名。

最后在BSC鏈上,服務調用鏈上合約的receive方法,在BSC鏈上收到1000USDT發回給用戶。這個調用會發送以太坊上交易的簽名以驗證在以太坊鏈上的交易。

②ChainSwap的實現機制概述

從本質上來說,ChainSwap是不同鏈上交易的撮合方。拿以上的轉移操作為例,第二步需要有一個獨立的驗證者對以太坊鏈上用戶的轉賬操作進行證明。那么怎樣實現高效安全的簽名機制呢?

讓我們回歸以太坊的基本知識。以太坊用戶生成地址的過程如下:首先生成一個巨大的隨機數作為私鑰,該私鑰經過一定的單項算法可以得到公鑰,再通過某個單向哈希算法生成地址。所以本質上來說,地址的背后對應私鑰。

加密礦企Argo Blockchain重要非公開信息遭員工泄露:11月6日消息,總部位于倫敦的加密礦商Argo Blockchain的美國存托股票在早盤交易中下跌多達5%,此前該公司在一份文件中表示,一些員工在一次談話中無意中披露了潛在的重要非公開信息。該文件表示,在會議期間,這些代表打算審查和解釋先前發布的或公開的有關Argo的信息,但無意中披露了某些根據美國證券法可能被視為重要非公開信息或根據英國證券法被視為內幕信息的信息,包括公司哈希率的潛在增長以及在德克薩斯州建設計劃設施的預期成本。(CoinDesk)[2021/11/6 6:34:36]

私鑰不僅可以用來解密,還可以用來簽名。具體來說,任何人可以將某個消息序列化,并用私鑰生成對應的簽名。簽名包括四個部分:消息的摘要和三個參數。

簽名之后,怎樣驗證簽名的有效性呢?智能合約的Solidity編程語言提供了ecrecover函數,可以通過以上四個參數計算得到簽名這個消息的地址。合約的實現方必須自行驗證這個地址是否有效。后文我們將看到,正是由于沒有驗證地址的有效性,導致了ChainSwap的這次攻擊。③ChainSwap的實現機制概述在分析代碼和攻擊之前,首先概述一下ChainSwap的實現機制:

ChainSwap作為一個跨鏈資產橋,其設置了一個Factory用于管理和查詢下屬的項目,即找到跨鏈幣種在以太坊主鏈上的地址。

每個項目可以向ChainSwap申請對接,自動成為跨鏈代幣。ChainSwap會為這些代幣創建一個映射Token用于代表該Token在鏈上的“映射”。

上文說到,為了跨鏈地證明交易,ChainSwap設置了幾個驗證者來進行交易驗證。ChainSwap代碼中將驗證者命名為簽名者,且為每一個驗證者限定了配額,也就是說每個驗證者驗證的交易額在一段時間內是有限制的。但驗證者會有一定的初始配額,且該配額會隨著時間累積。

人物 | BB母親卡斯帕雷克離開美國銀行加入Blockone:據IMEOS報道,卡斯帕雷克在10月初結束了在美國銀行21年的輝煌職業生涯。卡斯帕雷克曾在2016年被CBJ讀者評為Corridor最具影響力的領導者。

她改變職業生涯的想法來自她32歲的兒子布蘭登·布魯默(Brendan Blumer)。簡稱BB,他是Block.one的首席執行官兼聯合創始人,Block.one也是EOS.IO背后的軟件發行商,Block.one在開源區塊鏈軟件領域處于領導地位,而這一領域也正在爆炸式增長。

卡斯帕雷克女士說,她的兒子已經取得了如此成功,并希望將自己的信任放在她身上,因為這種重要的個人努力令人感動。[2018/11/18]

0x1.代碼分析

ChainSwap會為該項目承接的每一個代幣創建一個TokenMapped合約來代表該代幣在鏈上的映射。攻擊者的入口即為TokenMapped合約的receive方法。下面我們逐步分析相關代碼,看看攻擊是如何實現的。

①攻擊入口分析

上圖展示了receive函數的全部代碼。正常情況下,用戶在其他鏈上向ChainSwap發送某種Token之后,交易經過簽名者驗證,用戶可以將驗證信息發給以太坊主鏈上的ChainSwap合約,后者會在驗證之后將Token轉賬給給用戶。receive實現的正是這樣一個流程。

該函數的實現較為復雜,在開頭首先收取0.05ETH的費用。接下來,合約向ChainSwapFactory請求參數,獲得最小簽名個數,對傳入簽名個數進行驗證。從交易記錄中可以查到這個值為1,也就是說跨鏈交易只需要一個簽名者的簽名即可通過。在后文中會對這個參數的修改過程進行描述。

動態 | Blockstack試行新應用程序挖掘計劃:據Bitcoin magazine報道,多中心化網絡開發公司Blockstack正在試行一項新的應用程序挖掘計劃,鼓勵設計人員直接在Blockstack平臺上創建新應用程序并獲得比特幣獎勵。目標是擴展分散的應用程序生態系統,同時為構建最受歡迎的應用程序的開發人員提供資金。[2018/10/24]

然后對每一個簽名,首先常規驗證傳入的簽名數組是否有重復。其次,通過ecrecover驗證簽名的有效性。這一步是常規的的簽名驗證過程,由于和攻擊本身無關,不再贅述。最后,通過_decreaseAuthQuota減少驗證者的配額。看到這里,整個實現邏輯似乎是完整且清晰的。

但是通過以上分析過程我們發現,入口函數receive并沒有對簽名者的身份進行驗證,Signatory參數的存在僅僅用于配合ecrecover函數驗證消息是否確實是由Signatory進行簽名。也就是說,任何人都可以生成一個簽名。也許在receive函數調用的內部函數中對Signatory進行了驗證?我們繼續往下看。

上圖展示了第一個內部函數_decreaseAuthQuota的實現,該函數的主要功能為減少記錄在_authQuotas映射中對應Signatory的配額值。實現本身非常簡單,但是紅線部分展示的modifier部分引起了我們的注意。_decreaseAuthQuota并沒有對Signatory的合法性進行檢查,那么這個modifier是否有驗證呢?

上圖展示了updateAutoQuota(signatory)的實現。modifier是Solidity語言的一種語法糖,以上圖展示的modifier為例,這個modifier修飾的函數會將自己添加在函數中,最后一行的短劃線表示modifier標注的函數的真正函數體將會出現的位置。可見該modifier的實現方式是先調用authQuotaOf函數更新Signatory的配額,并根據條件進行更新。注意到這里在調用authQuotaOf之后也沒有做Signatory的合法性進行驗證。

最后來看authQuotaOf的實現。首先直接獲取_authQuotas映射中Signatory的配額。不同于Python等主流編程語言,Solidity是沒有類似Python中KeyError的概念的,如果映射中不存在這個鍵,則會返回0,然而這里沒有對返回值進行檢查。接下來,通過autoQuotaRatio和autoQuotaPeriod兩個參數計算新的最大配額quotaCap。通過搜索以太坊交易記錄,這兩個參數的值分別為1e15和86400。

因此倒數第三行計算得出的quotaCap是一個很大的值。因此quotaCap的理論最大值為代幣供應量的0.1%。

倒數第二行,由于lasttimeUpdateQuotaOf中找不到這個Signatory,因此返回0,因此在Signatory非法時delta可以比quotaCap更大。最后一行通過計算返回更新后的配額,通過以上的分析不難看出,在攻擊中返回的正是quotaCap。

總結一下,receive函數實現的整個過程,都沒有對傳入的Signatory的合法性進行檢查。因此攻擊者只需要隨機生成一個地址并生成對應的簽名,即可騙過ChainSwap,自己為自己提供簽名。同時,由于authQuotaOf在實現邏輯上的錯誤,在Signatory不合法時會返回一個非常大的值,導致了這次攻擊事件的發生。而本次攻擊事件發生的本質,是沒有對映射索引的值進行驗證。由于Solidity并不會在映射的鍵不存在時觸發任何錯誤,因此這類檢查就顯得非常重要。正是由于缺少這樣的檢查,導致了這次損失超過800萬美元的攻擊。

③番外篇1:參數minSignatures的修改

通過以上的分析不難看出,攻擊發生的主要原因是缺少對映射索引返回值的檢查。但參數參數minSignatures的值同樣引起了我們的注意。我們發現在交易0x50d462f4中,參數minSignatures的值被修改成1:

這個交易出現在區塊12377182,這是攻擊發生的65天前。這種針對協議底層參數的修改只能由官方進行,通過閱讀代碼也驗證了這一點:

Factory合約繼承了Configurable合約以提供參數配置功能。圖中函數聲明中的governancemodifier代表該函數僅能通過管理者進行修改。我們并不知道為什么ChainSwap官方修改了這個參數,但這個修改一方面增加了系統的不可靠性,另一方面為攻擊者提供了便利,因為攻擊者只需構造一個簽名便可騙過ChainSwap系統,直接提取代幣。

④番外篇2:虛假的驗證

有趣的是,在管理者Factory的合約實現中,ChainSwap設計了一個變量來保存Signatory構成的數組,代碼如下圖所示:

但很遺憾的是,通過對Factory合約實現的審計,我們發現這個變量僅僅是在管理Signatory配額的時候被使用,并沒有驗證一個任意地址是否包含在這個數組中的代碼實現,因此任何一個人都可以創造一個地址并為自己生成簽名。

0x2.攻擊分析

經過以上的代碼分析,不難得出一個最簡單的攻擊流程:只需要自己批量創建多個地址,生成并提交簽名即可。由于TokenMapped并不會進行任何驗證,可以將合約中鎖倉的代幣直接獲得,實現空手套白狼。攻擊者的真實攻擊就是這樣實現的。以其中一筆攻擊交易為例,交易執行Trace如下:

可以看出,攻擊只是簡單地調用了以上展示的有bug的receive函數,傳入了虛假的簽名,就套到了攻擊者本不應獲得的代幣。通過這樣的攻擊方式,攻擊者攻擊了基于ChainSwap的20+個項目,盜走了價值800萬美元以上的代幣,造成了極為嚴重的損失。

BlockSec團隊以核心安全技術驅動,長期關注DeFi安全、數字貨幣反洗錢和基于隱私計算的數字資產存管,為DApp項目方提供合約安全和數字資產安全服務。團隊發表20多篇頂級安全學術論文(CCS,USENIXSecurity,S&P),合伙人獲得AMiner全球最具影響力的安全和隱私學者稱號(2011-2020排名全球第六).研究成果獲得中央電視臺、新華社和海外媒體的報道。獨立發現數十個DeFi安全漏洞和威脅,獲得2019年美國美國國立衛生研究院隱私計算比賽(SGX賽道)全球第一名。團隊以技術驅動,秉持開放共贏理念,與社區伙伴攜手共建安全DeFi生態。掃描二維碼,關注更多精彩

https://www.blocksecteam.com/

contact@blocksecteam.com

Tags:CHAINSChainAINDAPchainINSTAblockchain安全嗎HyperChain X

中幣
北京加快建設全球數字經濟標桿城市;OpenSea日交易額超2020全年交易額|區塊鏈產業周刊-ODAILY_區塊鏈

鏈集市·讓區塊鏈落地更簡單 文丨區塊鏈落地小能手 概述 上周,可以說是”百花齊放、萬家爭鳴”,國內區塊鏈產業落地又往上邁了一個新臺階.

1900/1/1 0:00:00
XCM跨鏈消息成功傳遞對波卡意味著什么?| 波卡一周生態觀察-ODAILY_POL

Polkadot生態研究院出品,必屬精品波卡一周觀察,是我們針對波卡整個生態在上一周所發生的事情的一個梳理,同時也會以白話的形式分享一些我們對這些事件的觀察.

1900/1/1 0:00:00
解讀區塊鏈在制藥和物流管理中具備的優勢-ODAILY_區塊鏈

鏈集市·讓區塊鏈落地更簡單 《區塊鏈行業觀察》專欄·第31篇作者丨ShamsRahman 圖片丨來源于網絡 作者介紹:本文作者為ShamsRahman教授.

1900/1/1 0:00:00
行情分析丨美股持續走高,埋伏的NFT板塊表現亮眼-ODAILY_BTC

受美股連續4天上漲,再創新高的盤面影響,市場轉向出現反彈行情。金色財經合約行情分析 | 主流幣整理區間逐漸收窄:據火幣BTC永續合約行情顯示,截至今日18:00(GMT+8),BTC價格暫報11.

1900/1/1 0:00:00
臉譜NFT來襲:?Tspace助力中華文化傳承-ODAILY_NFT

NFT火了,火得一塌糊涂!從區塊鏈圈到傳統圈,都無一例外地參與到了這場盛宴之中。毫無疑問,NFT時代到來了!但如果時間的指針撥回到2017年,你可能怎么也想不到NFT行業是多么的“慘不忍睹”!彼.

1900/1/1 0:00:00
NFT、元宇宙、GameFi、支付:避免概念內卷,如何捕獲價值?-ODAILY_NFT

九月如期而至。所謂金九銀十,在儀式感表達上,幣圈著名非營銷達人“孫遲但到”哥,給我們好好地上了一課.

1900/1/1 0:00:00
ads