据慢雾区情报,2020 年 11 月 22 日,以太坊 DeFi 项目 Pickle Finance 遭受攻击,损失约 2000万DAI。慢雾安全团队第一时间跟进相关事件并进行分析,以下为分析简略过程
1、项目的 Controller 合约中的 swapExactJarForJar 函数允许传入两个任意的 jar 合约地址进行代币的兑换,其中的 _fromJar, _toJar, _fromJarAmount, _toJarMinAmount 都是用户可以控制的变量,攻击者利用这个特性,将 _fromJar 和 _toJar 都填上自己的地址,_fromJarAmount 是攻击者设定的要抽取合约的 DAI 的数量,约 2000万 DAI
慢雾:从Multichain流出的资金总额高达2.65亿美元,分布在9条链:金色财经报道,自7月7日以来,从 Multichain 流出的资金总额高达 2.65 亿美元,分布在 Ethereum、BNB Chain、Polygon、Avalanche、Arbitrum、Optimism、Fantom、Cronos、Moonbeam 链。其中 6582 万美元已经被 Circle 和 Tether 冻结,1,296,990.99 ICE(约 162 万美元) 被 Token 发行方 Burn。流出的资金中,包括:
1)从 Multichain: Old BSC Bridge 转出的 USDT;
2)从 Multichain: Fantom Bridge 转出的 USDC、DAI、LINK、UNIDX、USDT、WOO、ICE、CRV、YFI、TUSD、WETH、WBTC;
3)从 Anyswap: Bridge Fantom 转出的 BIFI;
4)从 Multichain: Moonriver Bridge 转出的 USDC、USDT、DAI、WBTC;
5)从 MultiChain: Doge Bridge 转出的 USDC;
6)从 Multichain: Executor 转出的 DAI、USDC、BTCB、WBTC、WETH、Dai.e、WBTC.e、Bridged USDC、BTC、fUSDT、ETH 等;
7)从被 Etherscan 标记为 Fake_Phishing183873 的 0xe1910...49c53 转出的 WBTC、USDT、ETH,同时我们认为该标记(Fake Phishing183873)或许是 Etherscan 上的虚假标记,地址可能以前属于 Multichain 官方账户。[2023/7/11 10:48:30]
2、使用 swapExactJarForJar 函数进行兑换过程中,合约会通过传入的 _fromJar 合约和 _toJar 合约的 token() 函数获取对应的 token 是什么,用于指定兑换的资产。 而由于 _fromJar 合约和 _toJar 合约都是攻击者传入的,导致使用 token() 函数获取的值也是可控的,这里从 _fromJar 合约和 _toJar 合约 获取到的 token 是 DAI,。
动态 | 慢雾:巨鲸被盗2.6亿元资产,或因Blockchain.info安全体系存在缺陷:针对加密巨鲸账户(zhoujianfu)被盗价值2.6亿元的BTC和BCH,慢雾安全团队目前得到的推测如下:该大户私钥自己可以控制,他在Reddit上发了BTC签名,已验证是对的,且猜测是使用了一款很知名的去中心化钱包服务,而且这种去中心化钱包居然还需要SIM卡认证,也就是说有用户系统,可以开启基于SIM卡的短信双因素认证,猜测可能是Blockchain.info,因为它吻合这些特征,且历史上慢雾安全团队就收到几起Blockchain.info用户被盗币的威胁情报,Blockchain.info的安全体系做得并不足够好。目前慢雾正在积极跟进更多细节,包括与该大户直接联系以及尽力提供可能需求的帮助。[2020/2/22]
3. 此时发生兑换,Controller 合约使用 transferFrom 函数从? _fromJar 合约转入一定量的的 ptoken,但是由于 fromJar 合约是攻击者控制的地址,所以这里转入的 ptoken 是攻击者的假币。同时,因为合约从 _fromJar 合约中获取的 token 是 DAI,然后合约会判断合约里的资金是否足够用于兑换,如果不够,会从策略池中赎回一定量的代币 然后转到 Controller 合约中。在本次的攻击中,合约中的 DAI 不足以用于兑换,此时合约会从策略池中提出不足的份额,凑够攻击者设定的 2000万 DAI?
动态 | 慢雾: 警惕利用EOS及EOS上Token的提币功能恶意挖矿:近期由于EIDOS空投导致EOS主网CPU资源十分紧张,有攻击者开始利用交易所/DApp提币功能恶意挖矿,请交易所/DApp在处理EOS及EOS上Token的提币时,注意检查用户提币地址是否是合约账号,建议暂时先禁止提币到合约账号,避免被攻击导致平台提币钱包的CPU资源被恶意消耗。同时,需要注意部分交易所的EOS充值钱包地址也是合约账号,需要设置白名单避免影响正常用户的提币操作。[2019/11/6]
4. 兑换继续,Controller 合约在从策略池里提出 DAI 凑够攻击者设定的 2000万 DAI后,会调用 _fromJar 的 withdraw 函数,将攻击者在第三步转入的假 ptoken burn 掉,然后合约判断当前合约中 _toJar 合约指定的 token 的余额是多少,由于 _toJar 合约指定的 token 是 DAI,Controller 合约会判断合约中剩余 DAI 的数量,此时由于 第三步 Controller 合约已凑齐 2000万DAI,所以 DAI 的余额是 2000万。这时 Controller 合约调用 _toJar 合约的 deposit 函数将 2000万 DAI转入攻击者控制的 _toJar 合约中。到此,攻击者完成获利
总结:此次攻击中,攻击者通过调用 Controller 合约中的 swapExactJarForJar 函数时,伪造? _fromJar 和 _toJar 的合约地址,通过转入假币而换取合约中的真 DAI,完成了一次攻击的过程。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。