type
status
date
slug
summary
tags
category
icon
password
TL;DR
本文是由 BuidlerDAO 主办,联合多家 DeFi 项目和投资机构设立的 DeFi 全赛道投研系列课的课程笔记。
由来自 Beosin 的 Frank 老师为我们讲述了 DeFi 行业的安全与监管,同时文中会附带一些自身的思考。
智能合约及 DeFi 介绍
什么是 DeFi?
DeFi (Decentralized Finance),即“去中心化金融”,旨在以去中心化、无权限的方式重建传统金融系统,如借贷和资产交易
什么是智能合约?
与任何合同一样,智能合同也确定了协议条款。但与传统合约不同的是,智能合约的条款是作为在以太坊等区块链上运行的代码来执行的。智能合约允许开发人员构建利用区块链安全性、可靠性和可访问性的应用程序,同时提供复杂的点对点功能——从贷款和保险到物流和游戏的一切
智能合约的原则
智能合约可以看作是用来与链上数据交互操作的去中心化应用。它们在收到满足预设条件的有效交易时,会执行内置的业务逻辑,并更新区块链上数据的状态
关键词:分布式&去中心化
智能合约特性
智能合约的应用场景
DeFi 生态安全态势
智能合约虽然强大,但不幸的是,智能合约代码的正确执行并不能保证其完全安全。事实上,对现有智能合约的分析显示,其中大部分确实存在漏洞。Beosin 团队多年来一直在应对智能合约漏洞,防止智能合约被利用。根据我们对 2023 年第三季度区块链攻击的统计,43 次攻击导致总损失约 5.4 亿美元
DeFi 安全问题需要认真对待,有如下原因:
- 标准规范:USDC 或 USDT 在波场上存在接口实现的问题导致交互失败
- 第三方库集成:Openzeppelin 曾经也出现过漏洞
- 合约升级:如果对合约的升级没有关注它的安全性,也有可能出现很多问题
- 语言特性
- 智能合约特性
- 访问控制:权限函数设置不正确
- 合约状态机
- 算式运算
- 外部交互
- 业务逻辑
2023 年遇到的最多的 7 种攻击方式
重入漏洞
- 重入漏洞是指智能合约在执行某个函数时,如果该函数调用了外部合约的函数,而在执行外部合约函数时,又递归调用了原合约的函数,可能会导致智能合约代码被重复执行
- 以太坊转账,尤其是 call value 的形式,把 ETH 转入到某一个合约里,合约会触发一个 fallback 函数,由于 fallback 函数是写在 to 地址的合约中,那么攻击者可以在 fallback 函数中构建一些恶意的参数或代码,对一些合约的 function 重复进入。由于一些账本的更改原因,导致在执行另外一个函数的时候,之前的前账本还未更新,从而进行漏洞的攻击
- 在 function 中的交互代码遵循三要素:检查、生效、交互(例如转账等)
重入漏洞也有可能因为第三方库的问题而导致
配置错误
当前智能合约正变得越来越复杂,模块化程度较强,尤其是大型项目往往采用模块化和分离的方式。所以项目通常会由几个或几十个合约实现,并在上链后需要由项目管理人员进行配置才能正常运转。因此如果配置错误,将会导致不可估量的项目损失
访问控制漏洞
漏洞原理:函数可以通过修饰符控制访问,以确保只有授权的地址或用户才能调用合约中的函数。例如,将函数声明为 internal 意味着它只能被合约中的其他函数和其继承合约访问,不能被其他合约或地址直接调用
相关事件:2023 年 2 月 22 日,一个名为 CryptoNinja World 的 NFT 项目出现了访问控制漏洞利用。合约中的 burn() 函数可以被任何人调用,并且可以无限制地销毁任何 CryptoNinja World 的 NFT。当时,一个 CryptoNinja World 的 NFT 的价格为 0.4 ETH,总的损失超过了 100 ETH
可升级合约问题
可升级智能合约是一种特殊的智能合约,它允许在不中断合约功能或数据的情况下更新和升级合约
基本原理是利用以太坊底层的 delegatecall 函数,在当前合约的上下文中执行另一个合约的代码,同时保留当前合约的存储状态和调用栈
具体原理可参考:23. Delegatecall | WTF Academy
开发者如果恶意地将 Implementation contract 切换到一个恶意的合约,就有可能对用户的资产造成损失
闪电贷攻击
价格操纵
在智能合约领域,许多项目需要访问实时代币估值。这些价值通常来源于价格预言机。但是值得注意的是,价格预言机并不能绝对保证数据完整性。实际上,它们的输出很容易被操纵,带来潜在的安全风险,可能导致攻击事件
三明治攻击
三明治攻击是 DeFi 中一种挤压交易获利的手段。为制造一个“三明治”交易,攻击者会找到一个
Pending状态的受害者交易,然后试图通过前后两笔交易夹击受害者。这种策略源自于买卖资产来操纵资产价格的方法
相关知识:抢先交易
MEV 机器人如何通过三明治攻击获利
所有区块链交易都可在内存池 (mempool) 中查到。一旦掠夺性交易者注意到潜在受害者的待定资产 X 交易被用于资产 Y,他们就会在受害者之前购买资产 Y。掠夺性交易者知道受害者的交易将提高资产的价格,从而计划以较低的价格购买 Y 资产,让受害者以较高的价格购买,最后再以较高的价格出售资产
流动性接受者试图攻击另一个未处理的 AMM DEX 交易的流动性接受者。看到等待处理的交易,攻击者发出两个交易前后夹击,从交易者的交易中获益。现在有三个悬而未决的交易由一个流动性池和资产组合连接起来。矿工必须选择哪笔交易将首先获得处理。这时掠夺者可以通过支付更高或更低的交易费用金额来贿赂矿工,从而决定哪个交易优先处理
业务逻辑漏洞
智能合约中的业务逻辑漏洞,是指合约代码中存在功能缺陷或逻辑错误,导致合约的执行结果不符合预期。这类漏洞可能会导致资金损失、合约执行不当、数据泄露等安全问题
与传统漏洞相比,逻辑漏洞通常与项目的业务设计相关,没有固定的实现标准,实现复杂度较高。这使得智能合约的逻辑漏洞往往不容易被发现,因为这些漏洞与特定的业务逻辑和规则设置有关,不同的智能合约可能存在不同的逻辑漏洞
防护措施
代码库选择
使用成熟的代码库
使用成熟的代码库可以减少合约代码中的漏洞风险。例如,在使用开源的 Solidity 语言编写合约代码时,可以使用 OpenZeppelin 等成熟的代码库,这些代码库已经被广泛使用和测试过,可以提高合约的安全性
使用标准合约模板
开发标准的合约模板可以避免重复工作,减少合约中出现漏洞的可能性。比如,可以开发一个标准的代币合约模板,包含代币的基本特性和操作,用户只需根据自己的需要做简单修改
测试
审计
选择专业的审计团队可以从以下几点来考虑:
- 团队的技术能力:审计团队是否长期从事智能合约安全研究;成员是否对区块链技术和智能合约技术有深入的理解;是否有丰富的智能合约审计经验和技能
- 团队的工具和方法:审计团队是否拥有自主开发的专业工具,可以全面分析和扫描合约代码,发现合约中的漏洞和安全风险
- 审计模块的覆盖面:审计团队的审计模块是否包括功能测试、形式化验证、模糊测试、人工分析测试、模拟攻击等各个方面
- 审计报告的质量:审计团队是否可以提供详细的审计报告,包括对合约的安全评估、发现的漏洞和安全风险、修复建议和安全措施等,以及审计报告是否满足严格的标准和流程
- 审计团队的信誉度:审计团队的信誉是否良好,是否拥有许多成功案例,是否被客户信任
合约控制
合约暂停
为防止这种情况发生,在开发合约时,可以通过“暂停"功能来控制合约的核心业务。如果发现合约处于异常状态,合约管理员可以及时暂停合约,则合约中的关键函数将暂停,攻击者将无法进一步扩大攻击损失
合约升级
此方法基于底层函数 delegatecall 实现的代理模式。在代理模式中,合约数据与执行逻辑是分离的。如果合约项目存在安全问题,可以通过更新相应的逻辑合约来实现新的合约功能
但是值得一提的是,如果这两种方法使用不当,也会产生新的安全风险
链上监控
对于已经上链的合约,可以借助主要区块链安全公司的监控系统进行监控,一旦发现问题可以及时处理,具体如下:
- 合约调用监控:监控合约的函数调用状态,包括调用的函数、调用者、调用时间、调用参 数等信息。例如高权限函数被调用,可能管理员账户私钥失窃
- 合约行为监控:监控合约的行为,包括合约的调用行为、资产变更等信息。例如:合约出 现异常交易
- 合约执行路径监控:此监控主要针对有外部调用的合约,包括合约的函数调用序列、执行 结果等信息
- 合约事件监控:监控合约的事件触发,包括事件的触发原因、触发时间、相关参数等信息
资金追踪
如果项目仍在受到攻击,也可以求助监管机构和区块链安全公司以追踪被盗资金
链上资金追踪是指通过区块链上的数据记录和交易历史追踪和分析数字资产的流动路径,最终定位攻击发起人的地址,然后根据钱包和交易所的注册信息定位到个人
链上资金追踪通常需要使用一些工具和技术,如区块链浏览器、交易分析软件、数据分析算法等。通过这些工具和技术,可以分析和研究加密资产的交易历史、交易量和所有权转移等信息,来推断数字资产的流动路径和所有权
监管
近期在香港上线的 Hashkey,香港政府倾向于将加密货币归类于证券
全球加密监管,有一些加密友好国家(如瑞士、爱沙尼亚、新加坡),也有一些强监管国家(如中国)
致谢
最后,非常感谢 BuidlerDAO 和 Frank 老师的辛苦付出,给我们带来了很精彩的课程!
- 作者:Howe
- 链接:https://blog.0xhowe.top/article/DeFi_Security&Supervise
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。