XREX資安長開源兩套Web3資安工具,強化智能合約安全開發

XREX資安長開源兩套Web3資安工具,強化智能合約安全開發

編按:XREX 資安長暨總經理 Sun Huang 擁有超過 15 年的國際資安經驗,並獲得 Offensive Security Certified Professional (OSCP)、Certified Ethical Hacker (CEH)、AWS Certified Security – Specialty (AWS ACS) 等國際資安執照及認證。近期,Sun Huang 開源兩套 資安工具,協助工程師與開發者強化安全開發。Sun Huang 撰寫本文,分享開發工具的緣由,並分享實例示範如何使用這兩套工具。

做為 XREX 資安長,我從今年 3 月開始主持公司內部培訓,提升資安團隊兩大技能: 資安分析能力,以及鏈上金流的威脅分析,也對 XREX 產品工程團隊舉辦了兩次 Web3 資安工作坊,這也是我分別在今年 6 月和 7 月開源兩套 Web3 資安工具 DeFiHackLabs  DeFiVulnLabs 的緣由。

每一次只要有 項目遭駭,XREX 內部都會分析事件的根本原因並嘗試重現問題。我們會透過 Fork 主網特定區塊狀態,模擬駭客攻擊智能合約的手法,並觀察餘額狀態的改變。每一次的攻擊事件都可以幫助我們在未來開發時,避免踩到同樣的坑、犯同樣的錯。

我心想,這些寶貴的經驗也應該讓更多人受惠,因此就在 6 月中開源了一個 Web3 安全相關的工具 DeFiHackLabs ,將過往累積的資安事件概念性驗證程序 (Proof of Concept,PoC) 都收錄進去。我使用 Paradigm 推出的開發工具 Foundry 做為框架,因為編譯快速、集成了很多實用功能,使用起來非常順手,更多 Foundry 使用的相關資訊,可參考 Foundry Book.

原先我的初衷只是希望在 Web3 的發展過程中,為資安做點貢獻,如常地發到 Twitter 做個紀錄。非常意外的是,隔日我收到了無數 Twitter 通知,才知道原來我的推文被 Paradigm 的技術長 Georgios Konstantopoulos 轉推,引起社群很好的響應。

截圖 2022 07 28 下午8.02.18

隨後有許多人私訊我,想了解有沒有適合新手或剛入圈的工程師的 常見漏洞教學。了解到這些需求後,我在 7 月初再開源了另一個工具 DeFiVulnLabs,整理了常見 的漏洞測試與防禦方式,當天推文的轉推數量與單日 4 萬次的訪問量蠻令我驚訝的,由此也可以知道,有非常多人對技術的開發非常感興趣,積極想要增進資安能力並從過往的事件中學習,這讓我非常振奮,也很期待未來持續在 Web3 安全領域做出貢獻。

這篇部落格,也與各位分享 DeFiHackLabs  DeFiVulnLabs 這兩套 Web3 資安工具和使用方式,希望在大家打造智能合約與開發 項目時,可以免於在中迷失與跌倒。

DeFiVulnLabs  

(難度等級: 初級)

DeFiVulnLabs 目前收錄了 19 種智能合約的常見漏洞類型,如下表所列: 

漏洞類型

說明

Integer Overflow

虛擬機 (EVM) 中,整數為指定固定大小的資料類型,在 Solidity 0.8.x 版本之前,算術運算時會造成整數型溢出問題。

Selfdestruct

當合約有使用到 selfdestruct,且函數存取權限未有效控管,攻擊者可以銷毀該合約。

Unsafe Delegatecall

允許攻擊者使用 delegatecall 呼叫第三方合約函數來動態執行在目標合約上。

Reentrancy

如果智能合約中可透過回調執行攻擊者的外部合約時,外部合約可接管控制流程,達到非預期影響。通常造成這個問題的原因是沒有遵循「檢查 – 生效 – 交互」 (Checks-Effects-Interactions) 的機制,或沒有使用ReentrancyGuard 保護控制流程。

ERC777 callbacks and reentrancy

ERC777 允許在轉移資產時透過掛鉤 (Hook) 來進行任意回調。

Unsafe low level call – call injection

如果 call value 可控,容易造成任意函數執行。

Private data

狀態變數可見性設為 Private 不等於安全,因為每個智能合約的 Storage 都是公開透明,可以透過指定合約地址中對應的 Slot 讀出內容。敏感資訊不建議放在智能合約程式中。

Unprotected callback – over mint

_safeMint 真的安全嗎? 攻擊者可以透過 mint 函數內的 onERC721Received 進行重入。

Backdoor assembly

攻擊者可以透過寫入內聯匯編 (Inline Assembly) 來當作後門操縱智能合約。可隨時更改任何敏感參數。

Bypass isContract

攻擊者只需要將程式碼寫在智能合約的建構子 (Constructor) 裡面,就可以繞過是否為智能合約的偵測機制。

Denial of service

透過呼叫外部非完整的智能合約,來造成目標合約癱瘓。例如接收 Ether 的合約中不包含 fallback 或 receive 函數。

Randomness

避免使用全域變數來產生隨機數,如:.hash、block.number、block.timestamp,這些都是可被預測的。

Visibility

函數預設可見性是 Public,如果存在不安全的可見性設定,可讓攻擊者直接呼叫智能合約中的敏感函數。

txorigin – phishing 

tx.origin 是 Solidity 中的一個全域變數,在智能合約中使用該變數進行身份驗證,會使該合約容易受到網路釣魚的攻擊。

Uninitialized state variables

如果未初始化的變數可控,容易被攻擊者執行初始化後,導致不預期影響。

Storage collision

如果代理合約和邏輯合約的敏感變數存儲插槽 (Storage Slot)相同,那麼就容易發生存儲衝突,容易被攻擊者覆蓋變數。

Approval scam

目前大部分詐騙都是透過 approve 或 setApprovalForAll 來騙取你的轉帳權。這部分要特別小心。

Signature replay 

如果缺乏完善的簽名檢查機制,容易造成簽名重放攻擊。

Data location – storage vs memory

錯誤使用儲存空間和記憶體來保存變數狀態,容易造成合約使用未更新的數值來進行計算。

使用方式

以 ERC777 callbacks and reentrancy 為例:

智能合約要求代幣總供給量必須 ≤ 1000 顆,否則不允許鑄造新的代幣。你能繞過最大總供給量限制嗎?

截圖 2022 07 28 下午8.03.12

ERC777 callbacks and reentrancy 原始碼連結

執行: forge test –contracts ./src/test/ERC777-reentrancy. -vvvv

-v 參數代表顯示測試程式碼的 logs 與 Execution traces,共有 5 個 Level。

執行輸出如下所示:

截圖 2022 07 28 下午8.03.44
執行輸出顯示攻擊者成功繞過限制,產出額外 9,000 顆代幣

我們節錄關鍵 Execution traces 向讀者解讀為何 Token 餘額可以從 1,000 增加至 10,000,如下圖所示: 

截圖 2022 07 28 下午8.04.11
重入攻擊 Execution traces

可以看到當攻擊合約 `ContractTest` 呼叫 `MyERC777.transfer()` 時,`ERC1820Registry` 合約會回調呼叫 `ContractTest.tokensReceived()`,這意味著攻擊者可以在 `tokensReceived()` 裡寫入惡意程式碼並再次重新進入 `MyERC777` 合約的執行流程。

此處的惡意程式碼是再次呼叫 `MyERC777.mint()`,使代幣合約再次鑄造 9,000 顆 Token 給攻擊合約。最後就可以看到攻擊合約的餘額共有 10,000 顆 Token 了。

DeFiHackLabs 

(難度等級: 中級)

DeFiHackLabs 目前收錄了 42 個過往 DeFi 資安事件重現,可以從真實世界中了解過往的駭客攻擊手法,並在開發智能合約時避免踩到一樣的坑。近期 Foundry 支援了可以一次 fork 不同區塊,也可以跨鏈,不需要從 CLI 帶入 fork-url & fork-block-number 參數,在測試上又更方便了!

使用方式
以 InverseFinance – Flashloan & Price Oracle Manipulation 為例:
Inverse Finance 項目在 2022 年 6 月 16 日時,遭受閃電貸攻擊,損失約 120 萬美金,由於項目方實作了不安全的預言機來計算抵押品價格,導致攻擊者可透過閃電貸操控抵押品價格來獲利。

執行: forge test –contracts ./src/test/InverseFinance_exp.sol -vvvv

截圖 2022 07 28 下午8.05.07

希望以上兩個工具的分享,可以幫助想要開發 Web3 項目的團隊加強智能合約的安全性與韌性。若有任何疑問,也歡迎在推特上(@1nf0s3cpt)與我交流。

XREX 將在 8月19至20日出席 2022 HITCON x Yourator 數位職涯博覽會。歡迎有志之士前來與我們聊聊。到時見!

共同編撰:Sun Huang / Seal Cao 曹富翔 / Yoyo Yu 尤芷薇 / Fred Lai 賴彥志

本文轉自網路,如有侵權請來信告知,本網站不代表任何投資建議,僅提供資訊,若用戶有任何投資相關行為皆與本站無關

本網站所載的任何資訊均不構成投資建議,投資有賺有賠,投資人應獨立判斷,審慎投資,自負風險

Related Posts