8月12日,根据DAO Maker电报群用户反馈,该项目疑似遭到黑客攻击,价值700万美元的USDC被黑客提取至未知地址。团队经过分析后,发现该事件的起因是私钥泄露或者内部人士所为。
通过我们的交易分析系统(https://tx.blocksecteam.com)我们发现,攻击的过程非常简单。攻击交易的hash是:
0x26aa86261c834e837f6be93b2d589724ed5ae644bc8f4b8af2207e6bd70828f9
涉及到的地址:
0x41b856701bb8c24cece2af10651bfafebb57cf49: 受害者钱包
SubDAO将参与波卡首轮平行链竞拍并推出平行链网络Starfish:10月14日消息,波卡DAO基础设施SubDAO计划参与波卡第一轮平行链竞拍,并将正式推出平行链网络Starfish(海星网络)。其中所有为 SubDAO 竞拍提供 DOT 质押的社区用户都可获得SubDAO原生代币GOV(Governance)作为奖励,具体竞拍策略和奖励规则将于近期公布。
SubDAO 是波卡 DAO 基础设施,创始团队由 IBM 前 Technical Team Leader 和波卡早期开发者组成,它允许任何去中心化组织快捷地创建和管理 DAO,并提供基于区块链的电子协议签署、DAO 社交、资产管理等工具与服务。[2021/10/14 20:28:33]
0x1c93290202424902a5e708b95f4ba23a3f2f3cee: XXX,攻击者合约
MakerDAO通过执行投票,启动清算系统1.2:8月31日,MakerDAO正式通过执行投票,将启动清算系统1.2,提高WBTC风险溢价至4%,降低USDC-A债务上限4000万,同时,添加yEarnFinance进入ETH/USD预言机白名单。[2020/8/31]
0x0eba461d9829c4e464a68d4857350476cfb6f559:中间人
0x054e71d5f096a0761dba7dbe5cec5e2bf898971c:受害合约创建者(也是攻击者)
MakerDAO新提案通过 提高ETH-A债务上限至1.8亿:此前7月17日,Maker基金会风险小组将一项执行投票纳入投票系统,旨在将ETH-A债务上限提高2000万至1.8亿。经查询,该提案已于UTC时间7月19日15:08通过,将于UTC时间7月20日03:08(北京时间今日11:08)执行。[2020/7/20]
攻击者XXX (0x1c93290202424902a5e708b95f4ba23a3f2f3cee)调用受害者钱包合约(0x41b856701bb8c24cece2af10651bfafebb57cf49)的函数查询用户余额,然后调用withdrawFromUser将钱转到自己的账户。攻击完成。由于转账的操作是一个特权操作,因此通常需要对调用者的身份做校验。我们通过分析发现,攻击者确实具有相应的权限来将受害者钱包中的余额转出。
声音 | MakerDAO创始人:比特币和以太坊市场依赖于中心化基础设施:金色财经报道,MakerDAO创始人Rune Christensen近期接受采访时表示,DeFi目前只存在于加密的泡沫中,尽管它也可以在未来为发展中国家的人们提供小企业贷款,而不是完全切断他们与金融系统的联系。他还谈到,随着MCD的推出,Maker已经成为一个完整的程序包,在此基础上可以不受任何限制地构建DeFi。当被问及为何将代币化的贷款或证券纳入其中,而这些贷款或证券与Maker和DeFi所持的无许可和去中心化的理念背道而驰时,Christensen回答道称,关键是风险多样化。他还解释称,从监管的角度来看,比特币和以太坊市场完全依赖于中心化的基础设施,而比特币的价格是基于中国和美国的少数中心化交易所。[2019/11/21]
这里的问题就变成为什么攻击者能具有相应的权限?通过进一步分析我们发现另外一笔交易。这一笔交易将攻击者赋予具有转账的权限。交易trace如下:
0x2fba930502d27f9c9a2f2b9337a0149534dda7527029645752b2a6507ca6b0d6
0x0eba461d9829c4e464a68d4857350476cfb6f559调用受害者合约的grantRole函数将攻击者0x1c93赋予具有转账的权限。但是能调用grantRole赋予其他账户权限,那么0x0eba4必须具有admin的权限。那么他的admin权限是谁授予的呢?
继续追踪,我们发现它的admin权限是由另外一笔交易完成的。
0x054e71d5f096a0761dba7dbe5cec5e2bf898971c账户将0x0eba461d9829c4e464a68d4857350476cfb6f559账户设置成受害合约的admin。
然而我们发现,受害合约是由0x054e71d5f096a0761dba7dbe5cec5e2bf898971c创建的。
总结一下,整个的流程是:
那问题就来了,为什么部署受害者合约的0x054e最后间接赋予了攻击者能转账的特殊权限呢?这里有两个可能性。第一个0x054e是内鬼,第二个就是私钥泄露。
另外一个有趣的点就是攻击者的合约是开源的,代码简单易懂,可以作为学习合约开发的启蒙教程。
但是受害者的合约代码是不开源的。这有点匪夷所思。不开源的钱包也有人敢用?
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。