原标题:《Cobo 区块链安全月报——盘点解析 2 月典型安全事件》

此篇文章由Cobo 区块链安全研究团队供稿,团队成员来自知名安全实验室,有多年网络安全与漏洞挖掘经验,曾协助谷歌、微软处理高危漏洞,并获得谷歌、微软等厂商致谢,曾在微软MSRC 最有价值安全研究员Top 榜单中取得卓越的成绩。团队目前重点关注智能合约安全、DeFi 安全等方面,研究并分享前沿区块链安全技术。

本文解析了2月发生的典型区块链安全事件,对跨链桥遭攻击、前端JS投毒攻击、DAO遭遇恶意接管、NFT市场合约中心化风险、OpenSea用户遭受钓鱼攻击、闪电贷攻击等多重角度进行了技术解读。就近期发生的安全事件,Cobo安全团队提醒广大用户需留意前端风险,防范签名钓鱼攻击;谨慎投资,关注社区治理与相关区块链安全事件,保护加密资产安全。

Wormhole 跨链桥被攻击

2月3日Solana 跨链桥Wormhole 遭攻击,攻击者在Solana 侧的桥铸造了约12万枚wETH,获利约3.2 亿美元。这是继Poly Network 攻击损失6亿美元后史上第二大DeFi 攻击事件。

漏洞主要在于Wormhole 的验签Instruction 是由输入指定的,在正常的使用中,此项输入应该为系统账户Instructions sysvar。由于代码缺乏有效校验,Wormhole 可使用攻击者伪造的sysvar 生成签名。后续该签名可进一步被利用进行铸币操作,从而源链无需锁定的情况下,在目标链铸币,实现攻击获利。

Cobo  Comment: 

跨链桥本身架构就要比普通DApp 复杂,尤其当源链与目标链架构不同时复杂性会更加突出。目前区块链安全主要集中在以太坊及EVM兼容的网络上(以及曾经辉煌过的EOS),对于较新的公链、DApp 的安全审计发展的尚不成熟。而新公链、新智能合约架构上,又必然会产生新的问题,无论攻击方和防守方都是值得关注的方向。

Reference:

https://threadreaderapp.com/thread/1489044939732406275.html

https://mp.weixin.qq.com/s/x39VlJM0tKQ7r8Xzzo25gQ

https://www.tuoniaox.com/news/p-532969.html

KLAYswap 前端JS 投毒攻击

2 月3 日,韩国公链Klaytn 上的DeFi 项目KLAYswap 遭遇前端JS 投毒攻击,导致用户将钱包资产授权给攻击方,共造成约183 万美元损失。

攻击者通过BGP 路由器劫持,使用户在访问KLAYswap 时页面中加载的Kakao SDK JS 文件内容( https://developers.kakao.com/sdk/js/kakao.min.js )会解析到攻击者可控的服务器IP 上。另一方面由于攻击者已经控制了路由策略,攻击者成功从ZeroSSL 注册到了developers.kakao.com 的临时SSL 证书。至此通过路由器劫持,完成了JS 投毒。篡改的代码修改了原始KLAYswap 中内置的合约地址为攻击的恶意合约,这样当用户正常应该授权给官方合约的资产就会授权到攻击者,从而进行窃取。

Cobo  Comment: 

此次针对KLAYswap 的攻击并不需要项目方的智能合约和前端脚本中存在安全漏洞,直接攻击了底层路由器这样的网络基础设施。目前区块链世界虽然可以在合约、P2P 网络层面实现去中心化,但在实际的DApp 使用中,域名、服务器、浏览器等基础设施仍然是存在明显的中心化特征的,而这在整个区块链底层基础设施建设的十分完备前,都很难避免。仅从前端攻击的角度来说,目前浏览器的安全机制保证了前端脚本与插件(钱包)执行环境的隔离,因此即使前端完全被攻击者控制,只要用户不主动进行人工的交互签名操作,就不会造成资产损失。对于用户而言,建议在每次签名时,仔细检查交易信息,确认授权的目标合约确实是官方DApp 的合约。这在实际操作上对普通用户来说有一定难度,如果未来钱包App 可以主动完成这一校验,可以极大的提高交易过程中的安全性。

Reference:

https://medium.com/klayswap/klayswap-incident-report-feb-03-2022-f20ba2d8e4dd

https://medium.com/s2wblog/post-mortem-of-klayswap-incident-through-bgp-hijacking-898f26727d66

Meter.io 跨链桥被攻击

2 月 6 日 Meter Passport 跨链桥遭受攻击,攻击者在无抵押的情况下,在以太坊、BSC、Moonriver 等链上铸造了价值约 400 万美元的代币资产。

漏洞成因与 1 月份的 Qubit 跨链桥攻击比较类似,均是在区别处理链的原生代币与 ERC20 代币两类资产的代码中逻辑不严谨导致。Qubit 攻击中将原生代币作为零地址的 Token 处理,出现错误。Meter.io 中则是在抵押 WETH, WBNB 等 ERC20 Token 时会当作原生代币处理,没有使用 transferFrom 收取攻击者的代币(因为合约假设原生代币的情况下,已经通过 msg.value 完成转账检查)。最终导致攻击者在源码没有抵押的情况即可在目标链上铸造资产,攻击获利。

Cobo Comment :

Meter 和 Qubit 跨链桥攻击虽然漏洞成因细节稍有不同,但大体都是在处理原生代币与 ERC20 资产罗逻辑出现错误导致(deposit 和 depositETH 函数)。在对类似的跨链桥项目进行安全审计时,可以将其作为一种典型的漏洞模式重点审查。

Reference:

https://mp.weixin.qq.com/s/-xKQV-R6ACUIundJwqO68w

https://mp.weixin.qq.com/s/yzGuD6UGopOBATYzBKDpng

Superfluid 攻击事件

2月8日,Polygon 原生稳定币协议 QiDao 第三方合约 SuperFluid 遭到黑客攻击,损失超过1300万美元。SuperFluid 是一个流支付项目,可以实现自动转账等複杂功能,Superfluid 採用 ctx 这一数据结构作为协议之间通信的手段,按照正常逻辑这一重要的数据结构是由合约本身构造的,但是合约在打包用户自定义calldata 和 ctx 时没有校验 ctx 的合法性,攻击者可以将自己构造的恶意 ctx 附加在 calldata 之后,使得合约接受的 ctx 为用户构造 的 ctx,原本合法的 ctx 被丢弃,从而造成攻击者可以绕过验证偷走其他用户的资产。

Cobo Comment :

此类安全漏洞的成因在于开发者对于设计上由合约本身构造的数据过于信任,敏感数据在后续的每一步使用和处理中都需要检查其合法性。虽然 SuperFluid 开发者对于 ctx 的有效性专门设置了一个 hash 值作为校验,但是在后续的处理中没有保证每一步都进行验证,最终导致了这一攻击事件的发生。所以对于开发者和安全审计人员来说一定要确保敏感数据的合法性检查。

Reference:

https://halborn.com/explained-the-superfluid-hack-february-2022/

https://medium.com/superfluid-blog/08-02-22-exploit-post-mortem-15ff9c97cdd

https://www.tuoniaox.com/news/p-533223.html

Build Finance DAO遭恶意接管

2月13日 Build Finance 发推表示项目遭受恶意治理攻击。攻击者铸造了 1.1M $BUILD 并耗尽了相关的流动性池。

攻击细节:攻击者 suho.eth 发起了提案0xfa9c...35e9(见参考链接),内容为对 BUILD Finance (BUILD) 合约调用 setGovernance(0xdcc8a38a3a1f4ef4d0b4984dcbb31627d0952c28)。并为其投赞成票 2367 BUILD。该提案会将 BUILD 铸币权限转移到 0xdcc8.. 单签 EOA 地址,是明显的恶意提案。随后 valueless.eth 投 5000 BUILD 反对票。在投票结束前几分钟前,0xdcc8 补充投票 2675 赞成票,使赞成票数超过反对票数,提案通过。1 天后(即 2 月11日)提案交易成功执行。至此0xdcc8 已拥有 BUILD 治理权限,开始大量铸币抛售。查看 0xdcc8 的交易记录,可以看到攻击者也使用了类似手法洗劫了 Grap Finance( GRAP )。此次攻击获利超 160 ETH,已通过 Tornado.Cash 洗走。

攻击发生时 BUILD 的 totalSupply 为 130000,总值 20万美金左右,因此其实是规模很小的 DAO(反而是前面提到的 GRAP 还要大一些)。攻击发生时,官方 Discord 社区已经很不活跃,虽然有 bot 监测到了恶意提案的出现,但社区成员并没有积极投反对票,导致最终的接管行为发生。合约中的 quorum 固定为 5000(即提案生效要求至少有 5000 BUILD 赞成票),在攻击前约佔总量的 4%,从比例上看不算是一个过低的阈值,但因整体市值规模较小,成本仅需 $7500,给了攻击者机会。另一方面,由于合约本身不支持撤消已经通过的提案,攻击者利用最后几分钟加票的 trick 使提案通过,通过后必将可以执行。而提案通过后,社区也没有及时响应,如撤出相应的流动性池的资金等。

Cobo Comment :

项目规模小;合约不支持撤销提案;社区响应不及时等多种因素共同存在最终导致了攻击的发生。学到的教训:对于项目方或者开发者,有必要在治理合约中添加撤销机制,避免通过恶意提案后无法挽回;同时社区需要监测合约层的提案交易,发现恶意提案及时呼吁持币成员投票反对;恶意提案通过后,在执行前及时通知各方,尽可能降低损失。对于普通投资者,要积极参与社区投票(尤其是反对票)以提高恶意治理攻击的成本;另外要谨慎投资体量过小的项目。

Reference:

https://twitter.com/finance_build/status/1492591680716951556 https://etherscan.io/tx/0xfa9cca40f225745c2eac97521d979ddfa4edae589ff0f1b543b94345e52335e9 

https://www.youtube.com/watch?v=y5TGrGf8vA0

神鱼提示 X2Y2 NFT 市场合约中心化风险

2月18日,神鱼 @bitfish1 在社交媒体提示 X2Y2 NFT 挂单挖矿项目合约存在一定中心化风险。NFT 授权的合约 admin 为多签但无时间锁;交易合约(DELEGATION_CALLER 合约)为可升级合约,可升级合约的 owner 为单签地址。理论上项目方可通过添加新交易合约或者升级原有交易合约转走所有用户授权的 NFT。目前项目方已更新相关合约 admin/owner 为时间锁合约。

Cobo Comment :

根据 Certik 2021 DeFi 安全报告的总结,目前 DeFi 项目中心化风险已经是出现频率最高的风险类型。几乎每个月都会有项目方 Rug Pull 或疑似 Rug Pull。优质的去中化项目应该在一些关键权限上使用多籤和时间锁,儘管这会在一定程度上提高项目方管理的複杂度,但好处是十分明显的:一方面可以提高投资者对项目方的信任度,另一方面也可降低因项目方单签私钥保管不当遭受黑客攻击的风险。

Reference:

https://twitter.com/bitfish1/status/1494559762499125248 

白帽发现 Coinbase 漏洞获$250,000赏金

2月19 日 Coinbase 发布文章称修复了交易平台的漏洞,并向报告者支付了高达 25 万美金的漏洞奖金。漏洞存在于 Coinbase 的 Retail Advanced Trading platform,其中 Retail Brokerage API 校验不严格。API 只检查了订单金额,但没有校验资产币种。如:某账户有 100 SHIB,却可以利用该 API 发起出售 100 BTC 的订单。

Cobo Comment :

区块链行业的安全漏洞往往可以直接的造成资产损失,因此在漏洞奖励上十分慷慨。25万美金已经是 Google 为 Android 远程 root 漏洞提供的奖励金额了。

Reference:

https://medium.com/the-coinbase-blog/retrospective-recent-coinbase-bug-bounty-award-9f127e04f060

OpenSea 用户遭受钓鱼攻击

2 月 21 日 OpenSea 官方(@opensea )发推表示有部分用户遭受了钓鱼攻击,造成损失约 170 万美元。

随后的调查披露了钓鱼攻击的细节:OpenSea 因合约升级推送了要求用户进行 listing 迁移的邮件。攻击者利用此机会发送了内容相似的邮件,但邮件内链接指向攻击者伪造的恶意页面。受害者访问恶意页面时,被要求进行一些离线数据签名,签名的数据实际是允许将手中 NFT 以 0 ETH 出售的定单。攻击者利用此合法签名提交交易将 NFT 转到自己账户上。根据官方说明,OpenSea 合约升级完成后将使用新的 EIP-712 格式签名,可以降低此类钓鱼签名事件的发生。另有消息称攻击者事后返还了一部分 NFT。

Cobo Comment :

钓鱼攻击在传统安全领域也是重要的攻防课题,钓鱼主要利用人性弱点而非技术漏洞,实现攻击成本低,收益高。规避此类问题更多的需要用户自身提高安全意识,具体来说在签名交易时,仔细核查当前网站是否是官方网站,交易内容(如转账地址、合约地址、方法参数)是否为预期内容。另外对于如 NFT 交易中涉及的离线信息签名,也可保持与交易签名一样的重视程度。

Reference:

https://twitter.com/opensea/status/1495625884514066433 

https://twitter.com/NadavAHollander/status/1495509511179755530 

https://blog.checkpoint.com/2022/02/20/new-opensea-attack-led-to-theft-of-millions-of-dollars-in-nfts/ 

福布斯文章称找到 The DAO 攻击者

2 月 22 日,记者 Laura Shin 在福布斯网站发文称发现了 The DAO 事件攻击者的真实身份:TenX 的 CEO ,36 岁的程序员 Toby Hoenisch。但 Toby Hoenisch 本人表示结论不实。

2016 年发生的 The DAO 事件是以太坊历史上非常有名的攻击事件,攻击者利用合约重入漏洞盗取了约 360 万个ETH(现价值近 100 亿美金),佔当时 ETH 总流通量的 5%。该攻击直接导致了以太坊的硬分叉以及以太经典(ETC)链的产生。分叉后的以太坊将盗取的资金归还给用户,所以攻击者最终获得的并非 ETH 而是 ETC(现在价值约 1 亿美元)。

文章披露了发现对攻击者的追溯细节:Chainalysis 发现疑似 The DAO 攻击向 Wasabi 混币钱包发送了 50 BTC。Chainalysis 对混币交易进行了分离,最终追踪到 4 家交易所。一家交易所的员工确认了该笔资产被兑换成了隐私币 Grin 并提款到了一个称为 grin.toby.ai 的 Grin 节点。而该结点服务器託管在 Amazon Singapore,在比特币闪电网络上的别名为 TenX。而 TenX 的 CEO Toby Hoenisch 在各大社交网站的账户均为 @tobyai,这与上文提到的交易所账户名匹配。同时有多方证据表示,在 2016 年 Toby Hoenisch 曾多次表示 The DAO 合约代码中可能存在隐患,但最终未受重视。

Cobo Comment :

我们无法确认消息的真实性。但无可否认的是 2016 年的 The DAO 事件确实影响极为深远。区块链世界居民第一次如此深刻地见识了 Code is Law 的威力,并有力地推动了智能合约审计等区块链安全领域的发展。

Reference:

https://www.forbes.com/sites/laurashin/2022/02/22/exclusive-austrian-programmer-and-ex-crypto-ceo-likely-stole-11-billion-of-ether/?sh=30dc183a7f58 

https://twitter.com/chainalysis/status/1496087885061181443

Flurry Finance遭闪电贷攻击

2月23日,Flurry Finance的 Vault 合约遭到闪电贷攻击,导致 Vault 合约中价值约 293,000 美元的资产被盗。

该项目引用的第三方合约 StrategyLiquidate.execute 合约函数存在漏洞,未验证传入的流动性代币地址的合法性,攻击者可以传入事先构造好的伪造代币地址执行恶意函数。此次攻击过程中,攻击者将恶意 Token 中的 approve 函数设置为调用 FlurryRebaseUpkeep.performUpkeep() 函数,该函数最终会调用vault 合约中的 rebase 函数,在闪电贷过程中更新了 rho token 係数函数,从而造成 rho token 币价下跌,攻击者可以以此制造兑换差价以此获利。

Cobo Comment :

尽管Flurry Finance项目本身合约代码没有问题,但是不安全的第三方合约的引用也会带来严重的安全风险。DeFi 项目方应该在引用第三方合约时对合约的安全性做一个考量。

Reference:

https://twitter.com/CertiKCommunity/status/1496263130728603648

Solidly 疑存在前端 bug 造成用户大额滑点损失

2 月 26 日,有用户称使用 Solidly 进行 Swap 时实际滑点与 UI 显示不一致,因此造成了数万美金的损失。

Solidly 是 Fantom 链上新兴的去中心化交易所项目,上线后 TVL 迅速超过 20 亿美金。Solidly 号称拥有更低的滑点与手续费(0.01%)。Solidly 支持两类池,稳定币池(Stable Pool ) 和非稳定币池 ( Volatile Pool )。非稳定币池参考 Uniswap V2 实现。稳定币池使用新的 AMM 曲线 x^3*y + x*y^3 = K,以获得更低的滑点。

根据用户推文及相关交易分析,滑点损失很可能是由前端 bug 导致的。用户在进行 USDC-FTM 兑换时前端显示的是 USDC-FTM 的非稳定币池对应的兑出值与滑点,但提交时实际通过  USDC-FTM 的稳定币池进行兑换,由于稳定币池深度较小(总量不超过$1000),用户兑换 $24000 的 USDC 最终只得到 390 FTM(约 $600)。而兑换完成后,池子中的 USDC 很快又被套利机器人换走,最终用户产生了 2 万多美金的损失。

据 Cobo 团队针对链上数据的分析,此类用户兑换路由中存在稳定池与非稳定池错用的情况的问题并非个例,造成用户损失数千到十几万美金不等。详情见参考链接中的交易。

Cobo Comment :

DApp 的安全性要由前端代码、合约代码、区块鍊网络三方共同保证。其中合约和网络层近年来已经比较受重视,但前端代码的重视程度还明显不够。目前很少有项目开源前端未打包的源码,更不用说做第三方审计了。项目方 bug、项目方做恶、xss 钓鱼等前端问题仍可能存在。对于普通用户来说,自行验证前端代码安全有一定难度,为防范此类事件,建议用户在签名交易前,务必反复确认交易合约、函数、参数与期望一致,避免因前端问题遭受资产损失。

Reference:

https://twitter.com/solidlytxissue/status/1497243098673557507?s=21 

https://ftmscan.com/tx/0x8d601600e7f08add8c37e8a3312a621bc7384671c8a6d7f6686ee4f28d828d2c 

https://ftmscan.com/tx/0x5f411f38bc1d8ef301025fce63a0c47cfb1871786912f9216e3bb66efc9b8750 

https://ftmscan.com/tx/0xc64e2d0b38ebc813ff28bb1e7a7bc8a4d1445b3a4b32e1f0bce15524ce8a4c2c 

https://ftmscan.com/tx/0x734aa352c1abe0658282e849669e42b00a812db97bf621180280b4977a273c93