DeFi安全指南:闪电贷、价格操控和重入攻击的防范策略

robot
摘要生成中

DeFi 常见安全漏洞及预防措施

近期,某安全专家为社区成员分享了一堂 DeFi 安全课。他回顾了过去一年多 Web3 行业遭遇的重大安全事件,探讨了这些安全事件发生的原因以及如何规避,总结了常见智能合约的安全漏洞及预防措施,还对项目方和普通用户给出了一些安全建议。

常见的 DeFi 漏洞类型主要包括闪电贷、价格操纵、函数权限问题、任意外部调用、fallback 函数问题、业务逻辑漏洞、私钥泄漏和重入攻击。本文将重点介绍闪电贷、价格操控以及重入攻击这三种类型。

Cobo DeFi 安全课(下):DeFi 常⻅安全漏洞及预防

闪电贷

闪电贷本身是 DeFi 的一种创新,但当被黑客利用时,他们可以在不花费任何成本的情况下借到大量资金,执行套利后归还,只需支付少量 Gas 费用就可获得巨额收益。

许多 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. 三方引入安全性:对上下游都要进行安全校验,尤其是对于不开源的合约要特别谨慎。

用户/LP 如何判断智能合约是否安全?

  1. 合约是否开源:不开源的项目不要参与。

  2. Owner 是否采用多签,多签是否去中心化。

  3. 查看合约已有的交易情况:包括部署时间、交互次数等。

  4. 合约是否为代理合约,是否可升级,是否有时间锁。

  5. 合约是否接受过多家机构审计,Owner 权限是否过大。

  6. 注意预言机:使用知名预言机的项目相对更安全,自建或易被操纵的预言机要格外警惕。

总之,在 Web3 环境中,保持警惕、多问几个为什么,就能规避很多潜在风险。无论是项目方还是普通用户,都应该重视安全问题,建立完善的安全意识和防范机制。

DEFI1.83%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 6
  • 分享
评论
0/400
MEV猎手不亏本vip
· 8小时前
这些安全问题算个der
回复0
空投刷子姐vip
· 19小时前
还不如教教怎么刷空投
回复0
熊市搬砖人vip
· 20小时前
漏洞都被你发完了 还让黑客咋玩
回复0
闪电梭哈侠vip
· 20小时前
别说了 上次梭哈输光就是闪电贷搞的鬼
回复0
FUD_Whisperervip
· 20小时前
搞了大半年defi 不如黑客一个手速快
回复0
defi_detectivevip
· 20小时前
又被割韭菜了吗
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)