DeFi常見安全漏洞及預防措施全解析

robot
摘要生成中

DeFi 常見安全漏洞及預防措施

近期,某安全專家在一場網路分享會上探討了 Web3 行業過去一年多遭遇的重大安全事件,分析了這些事件發生的原因以及如何規避,並總結了常見智能合約的安全漏洞及預防措施,同時對項目方和普通用戶給出了一些安全建議。

常見的 DeFi 漏洞類型主要包括閃電貸、價格操縱、函數權限問題、任意外部調用、fallback 函數問題、業務邏輯漏洞、私鑰泄漏和重入攻擊等。其中閃電貸、價格操控和重入攻擊是較爲典型的幾種。

閃電貸

閃電貸本身是 DeFi 的一種創新,但也常被黑客利用。攻擊者通過閃電貸借出大量資金,對價格進行操縱或攻擊業務邏輯。開發者需要考慮合約功能是否會因爲巨額資金導致異常,或被用於在一筆交易中與多個函數交互獲取不正當收益。

過去兩年,許多 DeFi 項目因閃電貸問題遭受攻擊。有些項目在固定時間根據持倉量發放獎勵,卻被攻擊者利用閃電貸購買大量代幣,在獎勵發放時獲取大部分收益。還有一些通過代幣計算價格的項目,也容易受到閃電貸的影響。

價格操控

價格操控問題與閃電貸密切相關,主要有兩種類型:

  1. 計算價格時使用第三方數據,但使用方式不正確或檢查缺失,導致價格被惡意操控。

  2. 使用某些地址的代幣數量作爲計算變量,而這些地址的代幣餘額可被臨時增減。

重入攻擊

調用外部合約的主要風險之一是它們可能接管控制流,並對數據進行未預料到的更改。典型的重入攻擊示例如下:

solidity mapping (address => uint) private userBalances;

function withdrawBalance() public { uint amountToWithdraw = userBalances[msg.sender]; (bool success, ) = msg.sender.call.value(amountToWithdraw)(""); require(success); userBalances[msg.sender] = 0; }

由於用戶餘額直到函數最後才設爲0,重復調用仍會成功提取餘額。

解決重入問題需注意:

  1. 不僅防止單一函數的重入
  2. 遵循 Checks-Effects-Interactions 模式
  3. 使用經驗證的防重入 modifier

項目方安全建議

  1. 遵循最佳安全實踐進行合約開發
  2. 實現合約可升級和暫停功能
  3. 採用時間鎖機制
  4. 加大安全投入,建立完善的安全體系
  5. 提高所有員工的安全意識
  6. 預防內部作惡,在提升效率的同時加強風控
  7. 謹慎引入第三方,默認上下遊都不安全

用戶判斷智能合約安全性的方法

  1. 確認合約是否開源
  2. 檢查 Owner 是否採用去中心化的多籤
  3. 查看合約已有的交易情況
  4. 確認合約是否可升級,是否有時間鎖
  5. 查看是否接受過多家機構審計,Owner 權限是否過大
  6. 注意預言機的使用情況

總之,DeFi 安全是一個系統性的問題,需要項目方和用戶共同重視,採取全面的安全措施,才能有效降低風險。

Cobo DeFi 安全課(下):DeFi 常⻅安全漏洞及預防

DEFI4.61%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 分享
留言
0/400
ForkThisDAOvip
· 07-12 07:12
代码审计很重要啊
回復0
NewPumpamentalsvip
· 07-12 05:08
请严格制定合约审计
回復0
ConsensusDissentervip
· 07-10 09:19
审计也需要审计
回復0
RektRecoveryvip
· 07-10 09:18
三重签名是根本
回復0
落叶不归根vip
· 07-10 09:09
安全第一不二选择
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)