暗度陈仓 —— Orion Protocol 被黑分析

区块链安全 1年前 (2023) admin
424 0 0

By: 九九


据慢雾安全团队情报,2023 年 2 月 3 日,Orion Protocol 项目的 ETH 和 BSC 链上的合约遭到攻击,攻击者获利约 302.7 万美元。慢雾安全团队第一时间介入分析,并将结果分享如下:


相关信息


Orion Protocol 是一个去中心化的加密网关,用户可以通过其来进行代币交易、质押、跨链等。


以下是本次攻击涉及的相关地址:


攻击者 EOA 地址:

0x837962b686fd5a407fb4e5f92e8be86a230484bd


攻击合约地址:

https://etherscan.io/address/0x5061F7e6dfc1a867D945d0ec39Ea2A33f772380A

https://bscscan.com/address/0x84452042cb7be650be4eb641025ac3c8a0079b67


攻击交易:

https://etherscan.io/tx/0xa6f63fcb6bec8818864d96a5b1bb19e8bd85ee37b2cc916412e720988440b2aa

https://bscscan.com/tx/0xfb153c572e304093023b4f9694ef39135b6ed5b2515453173e81ec02df2e2104


被攻击的合约地址:

https://etherscan.io/address/0xb5599f568D3f3e6113B286d010d2BCa40A7745AA

https://bscscan.com/address/0xe9d1d2a27458378dd6c6f0b2c390807aed2217ca


攻击核心点


被攻击的 ExchangeWithAtomic 合约类似一个市场,用户可以先在 ExchangeWithAtomic 合约存款,并通过该合约来进行代币兑换和提取。但是 ExchangeWithAtomic 合约兑换代币的函数并没有做重入保护,且兑换后再次更新账本存款的取值方式仅采用兑换前后的余额差计算,这使得被重入操控。


具体细节分析

1、攻击者首先调用 ExchangeWithAtomic 合约的 depositAsset 函数进行存款,存入 0.5 个 USDC 代币为下面的攻击作准备。


暗度陈仓 —— Orion Protocol 被黑分析


2、攻击者闪电贷出 284.47 万枚 USDT 代币,接着调用 ExchangeWithAtomic 合约的 doSwapThroughOrionPool 函数兑换代币,兑换路径是 [USDC -> ATK(攻击者创建的恶意代币 -> USDT]。


暗度陈仓 —— Orion Protocol 被黑分析


3、因为兑换出来的结果是通过兑换后 ExchangeWithAtomic 合约里的 USDT 代币余额减去兑换前该合约里的 USDT 代币余额(284.47 万枚,但问题就在兑换 USDC -> ATK 后,会调用 ATK 代币的转账函数,该函数由攻击者恶意构造会通过攻击合约调用 ExchangeWithAtomic 合约的 depositAsset 函数来将闪电贷来的 284.4 万 USDT 代币存入 ExchangeWithAtomic 合约中。


暗度陈仓 —— Orion Protocol 被黑分析


此时攻击合约在 ExchangeWithAtomic 合约里的存款被成功记账为 284.47 万枚并且 ExchangeWithAtomic 合约里的 USDT 代币余额为 568.9 万枚,使得攻击者兑换出的 USDT 代币的数量被计算为兑换后的 568.9 万减去兑换前的 284.47 万等于 284.47 万。


暗度陈仓 —— Orion Protocol 被黑分析


暗度陈仓 —— Orion Protocol 被黑分析


暗度陈仓 —— Orion Protocol 被黑分析


4、之后兑换后的 USDT 代币最后会通过调用库函数 creditUserAssets 来更新攻击合约在 ExchangeWithAtomic 合约里的使用的账本,导致攻击合约最终在 ExchangeWithAtomic 合约里 USDT 代币的存款记账为 568.9 万枚。注意此时的 amountIn 是取的上一步兑换中返回的 amountOut。


暗度陈仓 —— Orion Protocol 被黑分析


5、最后攻击者调用 ExchangeWithAtomic 合约里的 withdraw 函数将 USDT 提取出来,归还闪电贷后将剩余的 283.6 万枚 USDT 代币换成 WETH 获利。攻击者利用一样的手法在 BSC 链上的也发起了攻击,获利 19.1 万美元。


暗度陈仓 —— Orion Protocol 被黑分析


6、根据慢雾 MistTrack 分析,黑客在经过一系列兑换以及跨链操作后,目前黑客在 BSC 上的地址仍有约 30.5 BNB,而黑客在 ETH 上的地址已将 1,100 ETH 转入 TornadoCash,目前留存 657.55 ETH。MistTrack 将持续监控黑客异动并跟进拉黑。


暗度陈仓 —— Orion Protocol 被黑分析


暗度陈仓 —— Orion Protocol 被黑分析


总结

此次攻击事件的根本原因在于合约兑换功能的函数没有做重入保护,并且兑换后再次更新账本存款的数值是根据兑换前后合约里的代币余额差值来计算的,导致攻击者利用假代币重入了存款函数获得超过预期的代币。慢雾安全团队建议协议为核心功能的函数添加重入锁的保护,且对于用户资产的操作例如记账等所传入的值需要考虑好计算方式,根据业务逻辑选择合适且安全的方法来防止被外部操控。


往期回顾

瞒天过海 —— BonqDAO 被黑分析

喜迎五周年 | 慢而有为,雾释冰融(文末有惊喜)

引介|EVM 深入探讨 Part 4

慢雾出品 | 2022 区块链安全及反洗钱分析年度回顾

智能合约安全审计入门篇 —— 移花接木

暗度陈仓 —— Orion Protocol 被黑分析

慢雾导航


慢雾科技官网

https://www.slowmist.com/


慢雾区官网

https://slowmist.io/


慢雾 GitHub

https://github.com/slowmist


Telegram

https://t.me/slowmistteam


Twitter

https://twitter.com/@slowmist_team


Medium

https://medium.com/@slowmist


知识星球

https://t.zsxq.com/Q3zNvvF

原文始发于微信公众号(慢雾科技):暗度陈仓 —— Orion Protocol 被黑分析

版权声明:admin 发表于 2023年2月3日 下午7:04。
转载请注明:暗度陈仓 —— Orion Protocol 被黑分析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...