Smart Contract Security Through Damn Vulnerable DeFi v4 | Tincho (The Red Guild) - DSS 101 2024
三句話摘要
《Damn Vulnerable DeFi》——免費開源智能合約安全教育平台的現場演示與解題教學。 Damn Vulnerable DeFi是DeFi安全入門的最佳實踐平台,通過18個遞進難度的挑戰教授智能合約漏洞的真實形態,讓初學者在低成本、無壓力的環境中反覆練習,為參與漏洞賞金和安全審計工作奠定基礎。 任意調用的危害 — Thruster挑戰揭示flashLoan函數接受目標地址和調用數據參數,允許攻擊者強制合約執行非預期函數(如approve),這種遠程執行能力在web3中類似於web2的命令注入。
重點整理
重點- 1
任意調用的危害 — Thruster挑戰揭示flashLoan函數接受目標地址和調用數據參數,允許攻擊者強制合約執行非預期函數(如approve),這種遠程執行能力在web3中類似於web2的命令注入。
- 2
函數組合創造漏洞 — Side Entrance展示單個函數(deposit、withdraw、flashLoan)各自看似安全,但通過deposit→flashLoan→withdraw的調用組合可以繞過償還檢查,這是重入思維的現代演繹。
- 3
白帽心態的訓練 — 平台強調「救援資金」(rescue)而非「竊取資金」(steal),所有exploit都應存款到指定recovery帳戶,訓練參與者參加漏洞賞金計畫時的正確心態。
實用技巧與重點
乾貨- 基本資訊
- 官網:www.defidai.xyz
- 倉庫:github.com/tinchoabbate/damn-vulnerable-defi
- 所有者/講者:Tincho(Red Guild共同創辦人)
- 機構:Red Guild(拉丁美洲安全團隊,由以太坊基金會贊助)
- 挑戰規模
- 總計18個挑戰
- 版本:v4(已上線)
- 涵蓋主題:Flash Loan、治理、NFT、DEX、借貸、Permit、Reentrancy、時間戳操控、交易排序、多簽調用等
- 技術棧
- 開發框架:Foundry
- IDE:Visual Studio Code
- 環境:Dev Container(推薦)
- 依賴:OpenZeppelin、Uniswap v2/v3、Safe、Multicall等成熟協議合約
- Thruster挑戰具體數據
- 池中代幣:100萬DVT(Damn Valuable Token)
- 玩家初始資金:0
- 目標:單筆交易內救援所有資金到recovery帳戶
- 漏洞根源:flashLoan允許任意調用,執行token.approve()可授予攻擊者無限額度
- Side Entrance挑戰具體數據
- 池中ETH:1,000 Ether
- 玩家初始資金:1 Ether
- 目標:單筆交易內救援所有資金到recovery帳戶
- 漏洞根源:通過deposit函數應金額回存但仍保持flash loan保護失效
- 後續活動
- Capture the Flag報名:www.ctf.theedgames.com
- 隔天(同會議期間)dev環境安全工作坊:13:10開始,講者:Mata
結論
結論“Damn Vulnerable DeFi是DeFi安全入門的最佳實踐平台,通過18個遞進難度的挑戰教授智能合約漏洞的真實形態,讓初學者在低成本、無壓力的環境中反覆練習,為參與漏洞賞金和安全審計工作奠定基礎。”
完整解析
詳細Damn Vulnerable DeFi是由Red Guild開發的教育性智能合約安全平台,Red Guild是一個來自拉丁美洲的小型安全團隊,由以太坊基金會贊助。不同於商業安全審計公司,Red Guild專注於為以太坊社群提供免費的安全教育和公共產品。講者Tincho在會上強調,許多知名安全研究員都是通過Damn Vulnerable DeFi入門的,該平台已存在超過四年,主要透過口碑傳播。
平台本身極其簡潔,無需登錄、無需付費、無需任何外部服務。開發者只需在本機安裝Foundry開發框架,就能將整個repo克隆下來,執行`forge build`編譯,立即開始解題。這種低摩擦的設計讓初學者無需面對繁複的環境配置問題。
講者現場示範了兩個挑戰的解題過程。首先是Thruster挑戰,焦點是Flash Loan函數的漏洞。該函數接受四個參數:借款金額、借款人地址、目標合約地址、以及調用目標合約的任意數據。開發者的本意是讓借款人實現execute函數來處理借款後的邏輯,然後在同一筆交易內償還。但問題在於——函數允許攻擊者指定任意目標地址和任意調用數據。這意味著攻擊者可以強制Flash Loan合約去調用其他合約上的任何函數。講者利用這一點,構造一個exploit合約,在Flash Loan過程中強制目標合約對DVT token執行approve()函數,授予自己無限額度。隨後利用這個approval,直接從token合約轉移池中的100萬DVT代幣到recovery帳戶。整個過程中,攻擊者從未通過Flash Loan的返款檢查,因為approval是隱形的——池中的代幣餘額沒有直接減少。
第二個Side Entrance挑戰揭示了更深層的安全思維:單個函數不一定脆弱,但函數的組合調用可能產生漏洞。該合約有三個函數:deposit(接收Ether並記錄餘額映射)、withdraw(檢查餘額後轉移Ether)、flashLoan(檢查交易前後的Ether餘額)。單獨看,這三個函數都遵循了推薦的安全模式(checks-effects-interactions)。但攻擊者可以這樣利用:在flashLoan的execute回調函數中,不是償還Ether,而是調用deposit將Ether重新存入合約。這樣一來,flashLoan看到的事後餘額仍然足額(資金確實進入了合約),但資金所有權被映射到了攻擊者名下。交易完成後,攻擊者再次調用withdraw就能將這些Ether取出。這實質上是一種重入攻擊的變體——不是直接在同一函數內遞迴調用,而是利用多個函數的狀態不一致性。
整個過程中,講者強調了白帽安全研究的心態:平台使用「救援資金」(rescue)而非「竊取」(steal),所有exploit都必須將資金存放到指定的recovery帳戶(通常屬於某個協議)。這訓練參與者將學到的攻擊技術應用在漏洞賞金計畫而非惡意目的上,是安全教育中至關重要的倫理層面。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

