靈踪安全:從Layer 2大熱項目Arbitrum停機看當前Layer 2審計應注意問題

以太坊的Layer 2(第二層)擴展技術是近來的熱門方向。

所謂的Layer 2擴展技術,簡單地理解就是將原本在以太坊主網上執行的交易放到主網之外的系統中執行,只有一些關鍵的交易才由這些系統最終提交到以太坊進行最終的驗證和裁決。這些主網之外的系統通常也稱為“鏈下系統”。

有了Layer 2擴展技術以後,以太坊就可以卸下沉重的交易負擔,只負責執行業務邏輯中關鍵的步驟,而把大量高頻、瑣碎的業務放到Layer 2擴展中執行。這相當於提高了以太坊對業務量的處理,提高了以太坊的性能。據理論估測,在Layer 2擴展技術的支持下,以太坊整體的TPS能夠達到10萬TPS甚至更高。由於Layer 2擴展最終還是要將關鍵的步驟放到以太坊上進行驗證,因此它的安全性始終挂靠在以太坊上。所以從安全的角度看,Layer 2擴展技術又比現有的側鏈方案(比如BSC等)要高。因此Layer 2擴展技術近來迎來了爆發。

在近期大熱的Layer 2擴展技術方案中Arbitrum就是熱門項目之一。截至寫稿時為止,它的鎖倉量已經達到14億美元。然而就在其氣勢一路高漲時,9月14日,Arbitrum卻因為內存洩露導致運作暫時停滯。

和公鏈項目類似,Arbitrum系統也是區塊鏈領域的底層平台,它是用Go語言實現的。其代碼文件是packages/arb-rpc-node/batcher/sequencerBatcher.go。

根據靈踪安全的漏洞檢測系統顯示:出現本次內存洩露問題的代碼在SequencerBatcher.SendTransaction()函數中。其具體代碼片段如下:

其中b.txQueue是個帶緩存的channel,代碼如下:

JluWLhUk0SX0X1Wr36JLlUbxgtEJM6E3hXDJOaMX.png

當系統處理交易時,SendTransaction()函數會將交易打包成Batch進行批處理,而不是一筆一筆地發送。具體處理流程如下:

1. 對一筆交易,首先將txQueueItem傳入b.txQueue的緩存channel中。

b.txQueue <- txQueueItem{tx: startTx, resultChan: startResultChan}

2. 然後從b.txQueue 中讀取一個交易。

queueItem := <-b.txQueue

3. 判斷讀取的交易的字節數是否超過最大限制,如果超過最大限制。則將從txQueue中取出的交易又重新壓入txQueue中。

ZPdF6rwiAJz9SCKLxKT0vMrAu3pQduXCJbrhH5OH.png

4. 這時因為txQueue的緩存大小是10,如果同時有大量的SendTransaction()調用,則當len(txQueue)大於10時就會造成將新交易推入txQueue時阻塞,導致SendTransaction()的goroutinue無法及時釋放,最終造成內存洩漏。

對這個問題,可以在SendTransaction()中使用select default處理channel阻塞的情況。這樣當系統在處理超過maxTxDataSize限制的狀況重新向txQueue壓入交易時,使用select default進行處理。

Arbitrum提交的修復代碼如下:

xzw2KybHbinSzYiXVtr4pmnN5exi9GQlrfEAzZ2v.png

實際上這是一個處理高並發狀況的問題。這類問題此前在其它的區塊鏈中都出現過,業界對此也有相應的解決方案,因此它並不是一個新問題。理論上只要審計公司在審計過程中細心審查是可以發現這類問題的。

靈踪安全認為Layer 2擴展技術當下的火熱只是這一趨勢的開始,未來更多項目、更大的生態還在孕育和發展中。我們在底層公鏈技術的積累將讓我們用專業的技能和嚴謹的態度服務好這一前景廣闊的生態。

關於靈踪安全:

靈踪安全科技有限公司是一家專注區塊鏈生態安全的公司。靈踪安全科技主要通過“代碼風險檢測+邏輯風險檢測“的一體化綜合方案服務了諸多新興知名項目。公司成立於2021年01月,團隊由一支擁有豐富智能合約編程經驗及網絡安全經驗的團隊創建。

團隊成員參與發起並提交了以太坊領域的多項標準草案,包括ERC-1646、ERC-2569、ERC-2794,其中ERC-2569 被以太坊團隊正式收入。

團隊參與了多項以太坊項目的發起及構建,包括區塊鏈平台、DAO組織、鏈上數據存儲、去中心化交易所等項目, 並參與了多個項目的安全審計工作,在此基礎上基於團隊豐富的經驗構建了完善的漏洞追踪及安全防範系統。

作者:

靈踪安全CEO 譚粵飛

美國弗吉尼亞理工大學(Virginia Tech, Blacksburg, VA, USA) 工業工程(Industrial Engineering) 碩士(Master)。曾任美國矽谷半導體公司AIBT Inc(San Jose, CA, USA) 軟件工程師,負責底層控制系統的開發、設備製程的程序實現、算法的設計,並負責與台積電的全面技術對接和交流。自2011至今,從事嵌入式,互聯網及區塊鏈技術的研究,深圳大學創業學院《區塊鏈概論》課程教師,中山大學區塊鏈與智能中心客座研究員,廣東省金融創新研究會常務理事 。個人擁有4項區塊鏈相關專利、3本出版著作。

Total
0
Shares
Related Posts