智能合约安全

2024年07月08日更新 456 人订阅
专栏简介 DeFi安全之杠杆挖矿 SharkTeam系列课程—NFT&GameFi开发与安全 NFT和GameFi概念介绍 ERC20/ERC721/ERC1155概念与协议 闪电贷和重入攻击:Grim Finance被黑事件分析 重入攻击:Uniswap V3流动性协议Visor Finance被黑事件分析 领航Web3安全,让数字生活更安全更美好:SharkTeam线上AMA实录 闪电贷攻击:Sashimi Swap被黑事件分析 ERC20相关业务的合约开发与合约安全 权限问题:Crosswise 被黑事件分析 细节决定成败:QBridge被黑事件分析 损失3.26亿,跨链协议再暴雷:Wormhole被黑事件分析 参数校验不严谨:Superfluid被黑事件分析 ERC721/ERC1155合约开发与合约安全 闪电贷+提案攻击-Beanstalk Farms攻击原理及资金流向分析 监守自盗?Titano.Finance被黑事件分析 AscendEX黑客攻击事件资金流向分析 NFT交易平台安全风险频发--OpenSea & X2Y2安全事件分析 SharkTeam系列课程—NFT 应用场景分析 SharkTeam发布2022年Q1智能合约安全态势感知季报 ChainAegis链上分析:以太坊合并后的中心化风险 大意失荆州-Akutar合约漏洞导致34M美元资金永久被锁 SharkTeam:十大智能合约安全威胁之回退攻击 闪电贷&重入攻击:Hundred与Agave被黑事件分析 从APE空投漏洞谈起,NFT安全情况究竟如何? 千里之堤,溃于蚁穴—跨链协议Nomad被黑事件分析 SharkTeam服务全线升级,重磅推出ChainAegis链上风险分析平台,全面保障Web3生态安全 ChainAegis:从链上数据看,FTX会崩盘吗? NFT合约同样也有重入风险:Revest Finance被黑事件分析 操纵预言机+提案攻击—Fortress Loans被黑事件分析 去年519,今年510—从链上分析的角度看,LUNA会不会真的陷入死亡螺旋? 算法稳定币UST崩盘—是完美风暴还是金融围猎? 6.2亿,再破记录:Ronin Bridge攻击事件技术分析与资金流向分析 周天王的愚人节-NFT精准钓鱼事件技术分析与资金流向分析 【深度】从链上分析和金融安全角度,看stETH的囚徒困境和Celsius挤兑事件 NFT流动性协议的安全困局—NFT借贷协议XCarnival被黑事件分析 NFT流动性市场安全问题频发—NFT交易平台Quixotic被黑事件分析 【深度】OpenSea 新协议 Seaport源码解析 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析 SharkTeam发布2022年第二季度Web3安全态势感知报告 DeFi安全之DEX与AMMs SharkTeam完成Flow生态NFT市场MatrixMarket的安全审计 闪电贷技术详解-Part 1 闪电贷技术详解-Part 2 闪电贷技术详解-Part 3 SharkTeam系列课程:什么是DeFi借贷 DeFi安全之抵押借贷 从链上分析角度看Tornado Cash被制裁事件 Defi安全之借贷杠杆 链上数据角度,看DeFi隐私赛道的现状和未来 火眼金睛,教你如何识别Rug Pull项目 SharkTeam:十大智能合约安全威胁之重入攻击 SharkTeam:十大智能合约安全威胁之操纵预言机 SharkTeam:十大智能合约安全威胁之逻辑校验漏洞 SharkTeam:十大智能合约安全威胁之权限漏洞 SharkTeam:8月Web3安全报告 SharkTeam:十大智能合约安全威胁之合约升级漏洞 警惕以太坊合并后的重放攻击:Omni跨链桥被攻击事件分析 SharkTeam:十大智能合约安全威胁之函数恶意初始化 波卡“以太坊"Moonbeam的技术创新之路 左手以太坊、右手跨链-Moonbeam的创新与突破 批准+校验漏洞-TransitSwap安全事件分析 ChainAegis:BTC和ETH第三季度链上数据解读 默克尔树漏洞成因和链上资金追踪-BNBChain跨链桥攻击事件分析 SharkTeam:Move合约开发与合约安全 Moonbeam的多链架构 高保真还原BNBChain跨链攻击实现原理-攻击者选择高度为110217401的区块到底有什么讲究? SharkTeam:十大智能合约安全威胁之三明治攻击 香港要成为国际虚拟资产中心,链上安全是关键 SharkTeam:十大智能合约安全威胁之提案攻击 ChainAegis:FTX资金流向最新分析,风险大,请尽快提款 SharkTeam:十大智能合约安全威胁之重放攻击 Move语言安全性分析及合约审计要点 之权限漏洞、重入攻击 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 1 区块链安全 Move语言安全性分析及合约审计要点 之逻辑校验漏洞 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 2 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 3 Move语言安全性分析及合约审计要点 之函数恶意初始化 链上数据分析:CeFi频繁暴雷后,DEX会成为主流吗? Move语言安全性分析及合约审计要点之回退攻击 SharkTeam:11月Web3安全报告 SharkTeam与NFMS达成合作,提供Move合约审计服务 Move语言安全性分析及合约审计要点之提案攻击 ChainAegis分析报告:Dogecoin排名前10的市值从何而来? SharkTeam完成APTOS生态项目NFMS的合约审计 ArWiki调研报告 Move语言安全性分析及合约审计要点之合约升级漏洞 Verto调研报告 在深熊中艰难前行,DeFi & CeFi 2022年度分析报告 SharkTeam:2022年度Web3安全报告 ChainAegis:2022年度NFT&GameFi分析报告 Move语言安全性分析及合约审计要点之操纵预言机 加密货币反洗钱(AML)分析 SharkTeam:Move语言安全性分析及合约审计要点 之三明治攻击 ChainAegis:BUSD链上数据分析报告 闪电贷攻击+业务逻辑漏洞:Platypus Finance事件分析 SharkTeam:Move语言安全性分析及合约审计要点之重放攻击 加密货币钓鱼团伙Monkey Drainer链上行为分析 权限漏洞+价格操纵:SwapX被攻击事件分析 ChainAegis:Blur链上数据分析报告 ChainAegis:数读Silvergate & SVB崩盘事件 业务逻辑漏洞+闪电贷攻击:Euler Finance被攻击事件分析 ChainAegis:稳定币协议Liquity链上分析报告 ChainAegis:GMX链上分析报告 SharkTeam与GoPlus Security达成战略合作,共同守护Web3世界安全 香港之夜,Dao的盛会 SharkTeam:2023年第一季度Web3安全报告 Talk with us,公链、DeFi等Web3时代的创新发展机遇有哪些? 香港Web3嘉年华“Web3与安全”主题论坛议程揭秘 2023香港Web3嘉年华,SharkTeam展台指引 权限校验漏洞:SushiSwap被攻击事件分析 香港会议期间,SharkTeam发布“链上安全分析研究报告” 安全是发展Web3的必要条件-SharkTeam受邀香港Web3嘉年华 ChainAegis:LSD赛道链上分析报告 Sui 与 Aptos 技术实现对比 ChainAegis:去中心化保险赛道及风险分析 ChainAegis:Pancakeswap V2V3链上数据分析 ChainAegis:AAVE V2/V3链上数据分析 ChainAegis:Gains Network链上数据分析 逻辑漏洞:DEUS被攻击事件分析 ChainAegis:BRC-20链上数据分析 ChainAegis:Blend链上数据分析 SharkTeam:Tornado.Cash提案攻击原理分析 SharkTeam:Sui主网链上数据分析 SharkTeam:Jimbos protocol闪电贷攻击原理分析 SharkTeam:RWA赛道链上数据分析 SharkTeam:Zksync Era链上数据分析 SharkTeam:Atomic Wallet攻击原理和洗钱模式分析 链安全 Sui主网上线满月,链上持币者数据分析 SharkTeam:Atlantis提案攻击原理分析 SharkTeam:HashFlow攻击事件原理分析 SharkTeam:2023年第二季度Web3安全报告 SharkTeam与Move Accelerator达成合作,Let’s Move! SharkTeam:Themis protocol闪电贷价格操纵攻击分析 SharkTeam:4月28日攻击者就已实施攻击-PolyNetwork攻击原理和资产转移分析 SharkTeam:AzukiDAO攻击事件分析 SharkTeam:BNO攻击事件原理分析 SharkTeam:Vyper漏洞导致Curve和JPEG'd等项目被攻击原理分析 SharkTeam:UniswapV4 Hook最佳安全实践 SharkTeam:UniswapX 源码分析 SharkTeam:Worldcoin运营数据及业务安全分析 SharkTeam与TOKEN2049正式达成合作伙伴关系 SharkTeam:Exactly Protocol攻击事件原理分析 SharkTeam:Rugpull工厂黑色产业链分析 SharkTeam开启9月双城记 SharkTeam上海区块链全球峰会展台指引 SharkTeam:Web3安全实践与创新 KYT/AML:Web3合规展业的必要条件 SharkTeam:典型钓鱼攻击链上资产转移分析 SharkTeam:起底朝鲜APT组织Lazarus Group,攻击手法及洗钱模式 SharkTeam:2023年第三季度Web3安全报告 SharkTeam:BH闪电贷攻击原理分析 SharkTeam:Platypus Finance攻击事件原理分析 SharkTeam:Onyx Protocol攻击事件原理分析 SharkTeam:Raft攻击事件原理分析 从链上分析角度看FTX破产清算过程,美国加密货币监管与风险处置能力究竟如何 SharkTeam:KyberSwap攻击事件原理分析 SharkTeam:ERC2771\&Multicall任意地址欺骗漏洞原理分析 SharkTeam:OKX DEX攻击事件分析及链上资产追踪 SharkTeam:从链上数据看稳定币的安全与监管 SharkTeam:2023年加密货币犯罪分析报告 SharkTeam:MIM_SPELL被攻击事件原理分析 SharkTeam:合约精度计算漏洞与安全建议 SharkTeam:Woo Finance被攻击事件分析 SharkTeam:Prisma Finance被攻击事件分析 SharkTeam:2024年第一季度Web3安全报告 SharkTeam:Hedgey Finance被攻击事件分析 SharkTeam:Sonne Finance攻击事件分析 SharkTeam:Web3常见钓鱼方式分析与安全防范建议 SharkTeam:UwU Lend攻击事件分析 SharkTeam:美国众议院FIT21法案解读 SharkTeam:2024年上半年度Web3安全报告

SharkTeam:十大智能合约安全威胁之函数恶意初始化

  • SharkTeam
  • 发布于 2022-09-22 16:27
  • 阅读 3260

第六课【详解函数恶意初始化】。

SharkTeam:十大智能合约安全威胁之函数恶意初始化 问:我们常提到的智能合约漏洞真的是实际中威胁最大、发生最频繁的安全漏洞吗? 答:完全不是那样。例如“溢出”、“外部调用”等常提到的智能合约安全漏洞并不是最常发生,威胁最大的。 到底哪些安全威胁从发生频率和危害性上能称为Top10的呢?SharkTeam合约安全系列课程之【十大智能合约安全威胁】和您一起讨论和深入。第六课【详解函数恶意初始化】。

image.png

一、什么是初始化函数

初始化在计算机编程领域中指为数据对象或变量赋初值的做法,如何初始化则取决于所用的程序语言以及所要初始化的对象的存储类型等属性,用于进行初始化的程序结构则称为初始化器或初始化列表。 初始化函数的意思是,当你创建一个实例的时候,这个函数就会被调用。我们在部署合约后进行初始化合约时,一般不会采用传递构造函数参数进行初始化合约。

image.png 为什么不会采用构造函数方式constructor(uint256 _a)进行初始化,却采用上面所展示的方式进行初始化呢? (1)不需要处理复杂的构造函数参数,可以更容易被Etherscan验证 (2)当正常工作流需要参数时,部署和配置不需要同时进行,这更加灵活点 (3)允许我们的智能合约升级 (4)可用于避免在传递超过 16 个变量时出现“Stack too deep, try removing local variables”错误 但是,采用这种方式进行初始化会有一些问题: (1)权限未严格鉴别:未严格设置初始化函数调用者的权限,攻击者会自由利用权限漏洞进行恶意初始化。 (2)多次调用自定义初始化函数:自定义了不安全的初始化函数,没有对调用次数进行限制,攻击者利用该漏洞重复调用初始化函数,导致攻击者可以轻易的重新初始化资金池。

二、攻击事件分析

2.1 DODO

2021年3月9日消息,DODO的wCRES/USDT资金池遭受攻击,攻击者转走了价值约90万美元的wCRES和价值约113万美元的USDT。DODO是一个近期很热门的DeFi项目。攻击者利用资金池合约的初始化函数漏洞,从资金池盗取了133,548.93858472505wCRES和1,139,456.204397USDT。DODO官方发推表示,此次攻击只和DODO V2众筹池有关,作为预防措施,已经关闭DODO资金池创建入口。本次事件攻击流程如下: (1)攻击者将FDO和FUSDT两种空气币转入wCRES/USDT资金池 (2)通过DODO闪电贷借出133548.93858472505个wCRES和1139456.204397个USDT 本次攻击的执行trace如下图所示,上面红框表示攻击者向资金池转入FDO和FUSDT的过程,下面的红框表示攻击者向资金池借贷的过程。

image.png 可以看到攻击者在调用flashLoan函数的过程中执行了init初始化函数,并且输入的baseTokenAddress参数为FDO, quoteTokenAddress参数为FUSDT。通过分析源码中的init函数可知,攻击者利用该函数将资金池重新进行了初始化,此时资金池被重新初始化成了FDO/FUSDT池。因此,攻击者可以规避闪电贷的贷款归还机制。

image.png 问题分析:DODO资金池的初始化函数init没有对调用者的权限进行严格的校验,也没有做一些防止重复调用的措施,这才导致攻击者可以轻易的重新初始化资金池。

2.2 Punk Protocol

2021年8月10日,去中心化年金协议 Punk Protocol遭到攻击,损失 890 万美元,后来团队又找回了 495 万美元(向黑客2提供了 100 万美元作为漏洞发现费,黑客2归还495万美金)。 在这次攻击事件中,黑客1有两笔攻击交易,一个是试探攻击,一个是正式攻击。黑客2也有两笔攻击交易,不过其中一笔是inputdata带有通知项目方的信息。 (1)黑客1试探攻击:0x7604c7dd6e9bcdba8bac277f1f8e7c1e4c6bb57afd4ddf6a16f629e8495a0281 (2)黑客1正式攻击:0xa76cd31bcd48869621e7f2698ac8754699026acd0655a6d33280224dabed4cfa (3)黑客2攻击:0x597d11c05563611cb4ad4ed4c57ca53bbe3b7d3fefc37d1ef0724ad58904742b (4)黑客2通知项目发攻击:0x4c8072a57869a908688795356777270a77f56ae47d8f1d869be0d25e807e03b1 接下来,以黑客1正式攻击交易为例,展开详细分析: (1)首先,黑客的攻击执行了delegateCall,将攻击者的合约地址写入到compoundModel中initialize函的forge_参数。setForge(address) 函数在初始化函数中执行。这是一个修改Forge地址的功能

image.png

image.png (2)其次,它执行withdrawToForge函数并将所有资金发送到攻击者的合约,然后在调用initialize函数发现forge参数已经被替换成攻击者合约的地址。链接到forge的所有CompoundModel都使用相同的代码,因此所有资产都转移到攻击者的合约中。目前,导致黑客入侵的代码已被项目方修补。添加了两个Modifiers(仅Creator,initializer),这样只有Contract Creator可以调用Initialize函数并控制它只被调用一次。

image.png 问题分析:本次攻击的根本原因在于 CompoundModel 合约中缺少对初始化函数的安全控制,可以被重复初始化。

2.3 Nomad

2022年8月2日,跨链协议Nomad遭受到黑客攻击,损失超过1.9亿美元。该事件有多笔交易,我们选择其中一笔交易进行分析。交易hash:0xb1fe26cc8892f58eb468f5208baaf38bac422b5752cca0b9c8a871855d63ae28 交易调用了process函数:

image.png 进一步分析后发现,在调用acceptableRoot函数时,输入的参数为0,即messages中并没有对应的消息,结果返回ture。

image.png confirmAt本身的表示root被确认的时间,当root为0时,实际是没有被确认过的,confirmAt的值应该也为0,最后会返回false。正是这一点小失误造成了巨大的经济损失,对整个项目造成了近乎毁灭性的打击。

image.png 从合约中可以看出,合约的初始化函数initialize会将confirmAt的值初始化为1,初始化函数需要在合约部署后即刻调用,一般由合约的部署地址即owner账户来调用。我们查看了owner账户以及其所有的交易,发现是在初始化时将confirmAt[0]设置成了1。 (1)owner: 0xa5bd5c661f373256c0ccfbc628fd52de74f9bb55 (2)txHash: 0x53fd92771d2084a9bf39a6477015ef53b7f116c79d98a21be723d06d79024cad

image.png 该合约是升级后的合约,初始化函数是在合约升级后对合约进行初始化。对比于升级前的实现合约(0x7f58bb8311db968ab110889f2dfa04ab7e8e831b),初始化函数相同,但process函数是不同的,升级前的process函数如下:

image.png 问题分析:本次安全事件的根本原因是可升级合约在合约升级的过程中存在失误,容易被攻击者利用初始化函数漏洞,进行恶意攻击。

三、预防措施

我们应该采取哪些措施去避免函数恶意初始化? (1)初始化函数应只能调用一次,而且需要进行调用者权限鉴别 (2)如果合约是使用初始化函数,而不是在构造函数中进行初始化,则应使用安全合约库中的初始化器来进行初始化。避免合约被恶意操纵,造成合约关键参数和逻辑的错误 (3)项目上线前,需联系专业的第三方专业审计团队进行审计

关于我们:SharkTeam的愿景是全面保护Web3世界的安全。团队成员分布在北京、南京、苏州、硅谷,由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约的底层理论,提供包括智能合约审计、链上分析、应急响应等服务。已与区块链生态系统各个领域的关键参与者,如OKC、polygon、Huobi Global、Polkadot、imToken、ChainIDE等建立长期合作关系。

image.png Telegram:https://t.me/sharkteamorg Twitter:https://twitter.com/sharkteamorg 更多区块链安全咨询与分析,点击下方链接查看 D查查|链上风险核查 https://m.chainaegis.com

点赞 0
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论