8月12日,根据DAO Maker电报群用户反馈,该项目疑似遭到黑客攻击,价值700万美元的USDC被黑客提取至未知地址。团队经过分析后,发现该事件的起因是私钥泄露或者内部人士所为。
通过我们的交易分析系统(https://tx.blocksecteam.com)我们发现,攻击的过程非常简单。攻击交易的hash是:
0x26aa86261c834e837f6be93b2d589724ed5ae644bc8f4b8af2207e6bd70828f9
涉及到的地址:
0x41b856701bb8c24cece2af10651bfafebb57cf49: 受害者钱包
Huntingdon Valley Bank向MakerDAO提交抵押品引入申请:3月26日消息,Maker发推称,一家成立于1871年的宾夕法尼亚特许银行Huntingdon Valley Bank已经向MakerDAO提交了一份抵押品引入(Collateral Onboarding)申请。如果该申请得到Governance的批准,这将是美国银行首次将抵押品集成到DeFi生态系统中。
该申请提出了一种法律结构,其中Huntingdon Valley Bank与一家信托公司签订了一份主要购买协议,以使MakerDAO受益。该法律结构还有意在未来纳入更多银行。拟议的第一投资组合购买协议是为了平等参与由Huntingdon Valley Bank发起的贷款,或从其他金融机构购买或银团贷款。该申请还要求Huntingdon Valley Bank参与贷款的初始债务上限为1亿美元,这些贷款在所有拟议的贷款类别中多样化,从开始后的12至24个月期间进行部署。[2022/3/27 14:19:49]
0x1c93290202424902a5e708b95f4ba23a3f2f3cee: XXX,攻击者合约
YouTube加密频道DataDash、交易员Flood和真本聪社区将作为基金经理加入dHEDGEDAO:3月11日消息,去中心化资产管理平台dHEDGE宣布,经过筛选,YouTube上加密货币频道DataDash、加密货币交易员Flood和以及真本聪RealSatoshi将作为基金经理加入其去中心化自治组织dHEDGE DAO。
dHedge是一个建立在Synthetix之上的资产管理协议,允许任何人在以太坊区块链上建立自己的投资基金,或者以完全非托管的方式投资于他人管理的基金。对于公有池,基金经理只能部署和管理池内资金,不能撤出别人的资本。资金可以由活跃的基金经理负责管理,这些基金经理自己也可以部署资金,或者通过算法在投资预定策略之上构建投资。[2021/3/11 18:35:54]
0x0eba461d9829c4e464a68d4857350476cfb6f559:中间人
MakerDao超越Uniswap成为市值最高的DeFi协议:据 CoinMarketCap 数据显示,DeFi 协议 MakerDAO 代币MKR 大幅上涨,24小时涨幅达 54.53%。
截至目前 MakerDAO 锁仓量已突破46亿美元。正式超越了Uniswap 成为市值最高的DeFi协议。[2021/1/10 15:47:13]
0x054e71d5f096a0761dba7dbe5cec5e2bf898971c:受害合约创建者(也是攻击者)
声音 | MakerDAO中国社区负责人潘超:需要分不同模式来看稳定币的瓶颈:MakerDAO中国社区负责人潘超近日接受Odaily星球日报采访时表示,需要分不同模式来看稳定币的瓶颈。法币托管模式面临两难的困境,USDT就有流动性和兑付性的两难问题。同时还有监管层面,它其实并不是区块链上的产品,只是一种凭证。它的方向可能是如何成为已有监管模式下的一个子产品。 另一种,数字资产抵押模式的瓶颈就是区块链的瓶颈。这种模式的稳定币最终还是要合规,但它并不依赖机构的信用,依靠区块链本身的发展和扩大。[2019/1/6]
攻击者XXX (0x1c93290202424902a5e708b95f4ba23a3f2f3cee)调用受害者钱包合约(0x41b856701bb8c24cece2af10651bfafebb57cf49)的函数查询用户余额,然后调用withdrawFromUser将钱转到自己的账户。攻击完成。由于转账的操作是一个特权操作,因此通常需要对调用者的身份做校验。我们通过分析发现,攻击者确实具有相应的权限来将受害者钱包中的余额转出。
这里的问题就变成为什么攻击者能具有相应的权限?通过进一步分析我们发现另外一笔交易。这一笔交易将攻击者赋予具有转账的权限。交易trace如下:
0x2fba930502d27f9c9a2f2b9337a0149534dda7527029645752b2a6507ca6b0d6
0x0eba461d9829c4e464a68d4857350476cfb6f559调用受害者合约的grantRole函数将攻击者0x1c93赋予具有转账的权限。但是能调用grantRole赋予其他账户权限,那么0x0eba4必须具有admin的权限。那么他的admin权限是谁授予的呢?
继续追踪,我们发现它的admin权限是由另外一笔交易完成的。
0x054e71d5f096a0761dba7dbe5cec5e2bf898971c账户将0x0eba461d9829c4e464a68d4857350476cfb6f559账户设置成受害合约的admin。
然而我们发现,受害合约是由0x054e71d5f096a0761dba7dbe5cec5e2bf898971c创建的。
总结一下,整个的流程是:
那问题就来了,为什么部署受害者合约的0x054e最后间接赋予了攻击者能转账的特殊权限呢?这里有两个可能性。第一个0x054e是内鬼,第二个就是私钥泄露。
另外一个有趣的点就是攻击者的合约是开源的,代码简单易懂,可以作为学习合约开发的启蒙教程。
但是受害者的合约代码是不开源的。这有点匪夷所思。不开源的钱包也有人敢用?
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。