0x01:前言

风投 DAO 组织 Build Finance 在社交媒体发文表示,该项目遭遇恶意治理攻击,攻击者恶意铸造了110万枚BUILD并抛售套利。知道创宇区块链安全实验室第一时间对本次事件深入跟踪并进行分析。

0x02:事件详情

攻击者Suho.eth(0xD6dBed6297B539A11f1aAb7907e7DF7d9FFeda7e)在区块高度为14169198时尝试恶意接管,投票失败,随后在区块高度为
14175830发起的提案成功通过:


该合约线上提案投票地址 https://snapshot.org/#/build ,最近的提案在2021年11月24号,而参与线上提案的钱包地址未发现与治理合约有交互,推测线上的提案不直接上链和合约交互:


治理合约 0x3157439c84260541003001129c42fb6aba57e758 提案相关的合约代码如下:

function propose(address _target, bytes memory _data) public lockVotes returns (uint) {require(balanceOf[msg.sender] >= proposalThreshold, "Governance::propose: proposer votes below proposal threshold");bytes32 txHash = keccak256(abi.encode(_target, _data));proposalCount++;Proposal memory newProposal = Proposal({id: proposalCount,proposer: msg.sender,startTime:    block.timestamp,forVotes:     0,againstVotes: 0,txHash:       txHash,executed:     false});proposals[newProposal.id] = newProposal;return proposalCount;
}function vote(uint _proposalId, bool _support) public lockVotes {require(state(_proposalId) == ProposalState.Active, "Governance::vote: voting is closed");Proposal storage proposal = proposals[_proposalId];Receipt storage receipt = receipts[_proposalId][msg.sender];require(receipt.hasVoted == false, "Governance::vote: voter already voted");uint votes = balanceOf[msg.sender];if (_support) {proposal.forVotes += votes;} else {proposal.againstVotes += votes;}receipt.hasVoted = true;receipt.support = _support;receipt.votes = votes;
}

该函数方法允许任何拥有一定数量资产的用户发起提案,持有该资产的其他用户进行投票,函数代码未发现安全问题,因此我们推测攻击者可能是通过合约发起的提案。在提案通过后,攻击者铸造了100万个BUILD代币,耗尽大部分Balancer和Uniswap流动性池的资金:


随后又通过治理合约控制平衡池,耗尽包括13万METRIC代币在内的其他数字资产:


最后丧心病狂的铸造了一亿个Build,出售给任何还存在流动性的池子:


目前还未确定攻击者发起通过的提案内容,但根据通过提案后的铸币行为,跟进到代币合约0x6e36556b3ee5aa28def2a8ec3dae30ec2b208739:

address public governance;
constructor () public ERC20Detailed("BUILD Finance", "BUILD", 18) {governance = msg.sender;
}function mint(address account, uint amount) public {require(msg.sender == governance, "!governance");_mint(account, amount);
}function setGovernance(address _governance) public {require(msg.sender == governance, "!governance");governance = _governance;
}

合约在初始化的时候会设置合约拥有者为治理者,并且只有治理者可以发起铸币请求,而只有治理者才能调用setGovernance函数更换治理者,因此可以确定,攻击者发起的具体提案为更换治理者。

在创建合约的时候,治理者为0x2Cb037BD6B7Fbd78f04756C99B7996F430c58172,也就是合约部署者,他在部署合约后将治理者更换为Time Lock合约0x38bce4b45f3d0d138927ab221560dac926999ba6:


而在2021年1月,Time Lock合约将治理权交给了0x5a5a6ebeb61a80b2a2a5e0b4d893d731358d888583:


最后在2022年2月,由Suho.eth(0xD6dBed6297B539A11f1aAb7907e7DF7d9FFeda7e)发起提案,利用低投票阈值将治理者更换为0xdcc8a38a3a1f4ef4d0b4984dcbb31627d0952c28,恶意接管后铸币套现。

0x03:总结

经过完整分析,知道创宇区块链安全实验室明确了该次事件的源头由攻击者创造低阈值提案,让自己恶意接管了治理权限,去中心化的治理实现是很有必要的,但不应该让攻击者可以利用少量投票就通过提案。

知道创宇区块链安全实验室|Build Finance 惨遭攻击,恶意治理攻击难防御?相关推荐

  1. 知道创宇区块链安全实验室 | OneRing Finance 闪电贷攻击事件分析

    前言 北京时间 2022 年 3 月 22 日,知道创宇区块链安全实验室 监测到 Fantom 生态稳定币收益优化器 OneRing Finance 遭到闪电贷攻击,黑客窃取逾 145万 美元. 分析 ...

  2. 知道创宇区块链安全实验室|Hundred 与 Agave 闪电贷攻击事件分析

    1.前言 北京时间 3 月 15 日晚,知道创宇区块链安全实验室 监测到 Gnosis 链上的借贷类协议 Hundred Finance 与 Agave 均遭遇了闪电贷袭击,包括 AAVE 的分支 A ...

  3. 知道创宇区块链安全实验室|危险的授权转账-- Li.Finance 攻击事件始末

    一.前言 北京时间3月20日晚,知道创宇区块链安全实验室 监测到以太坊上分布式跨链协议 Li.Finance 受到了攻击,攻击者执行了37次call注入获取了多个钱包中约60万美元的资产(204个ET ...

  4. 知道创宇区块链安全实验室|二月安全事件总结与回顾

    前言 新春二月,知道创宇区块链安全实验室 拓宽了对区块链安全信息收集总结的信息广度,将专注于典型安全事件的视角,拔升到了对整个区块链安全资讯的审视. 以下是知道创宇区块链安全实验室对二月各类型安全资讯 ...

  5. 知道创宇区块链安全实验室|UmbNetwork 攻击事件分析

    一.前言 北京时间 2022 年 3 月 21 日,知道创宇区块链安全实验室 监测到 BSC 链和以太坊上的 UmbNetwork 奖励池遭到黑客攻击,损失约 70 万美元.实验室第一时间对本次事件进 ...

  6. 知道创宇区块链安全实验室|Ronin 安全事件分析

    前言 Ronin 是新加坡游戏工作室 Sky Mavis 开发的,是为支持游戏 Axie Infinity 而构建的以太坊侧链,使得用户能够自由地将资产转移到其他链上. 北京时间2022年3月29日, ...

  7. 知道创宇区块链安全实验室|Meter.io 攻击事件分析

    前言 北京时间2022年2月5日晚,Meter.io 跨链协议遭到攻击,损失约 430 万美元.知道创宇区块链安全实验室 第一时间跟踪本次事件并分析. 分析 基础信息 tx(Moonriver):0x ...

  8. 创宇区块链|Inverse Finance 安全事件分析

    前言 北京时间 2022 年 4 月 2 日晚,Inverse Finance 借贷协议遭到攻击,损失约 1560 万美元.知道创宇区块链安全实验室第一时间跟踪本次事件并分析. 分析 基础信息 攻击t ...

  9. 知道创宇区块链实验室受邀参加“2021 CCF中国区块链技术大会”

    2021 年12 月 26 - 27 日 ,由中国计算机学会(CCF)主办的 " 2021 CCF中国区块链技术大会" 在海南海口隆重举办.此次会议邀请来自政府部门.高等院校.金融 ...

最新文章

  1. 从面试角度一文学完 Kafka
  2. R可视化包ggplot2更改背景色实战
  3. iOS 11.3立春后发布,电量用得快的人千万别升级!
  4. 【PAT (Advanced Level) Practice】1124 Raffle for Weibo Followers (20 分)
  5. MATLAB Robotic Toolbox 机器人工具箱示例
  6. BugkuCTF-MISC题贝斯手
  7. Windows 2012 英文版系统安装中文语言包及时间格式设置
  8. java 泛型强制转换_java – 使用泛型强制转换为内部类
  9. 【简短】Autodesk宣布支持Windows 7
  10. java2月天数_java根据当前日期+指定天数(月份...)得到相应日期,计算两日期之差...
  11. bp神经网络误差反向传播,bp神经网络结果不一样
  12. cd rom是计算机的,CD-ROM是什么意思,CD-ROM是什么意思
  13. 云服务器系统么开始bios,云服务器怎么进入bios
  14. CSDR华为云_浅谈华为云Stack中Global、Region、AZ、资源池以及主机组
  15. git-常见问题解决方法(全)
  16. 写入CSV文件时乱码与格式问题
  17. HTML 标签简写及全称以及HTML总结
  18. python数据分析入门详解!!!非常详细!!!
  19. strcmp()函数:将指定的两个字符串进行比较。
  20. 【数据结构】迷宫问题实现(包含界面)

热门文章

  1. linux查看文件的有效权限,linux文件权限查看及修改-chmod ------入门的一些常识
  2. git命令行推送本地分支到远程仓库
  3. 细粒度图像分类论文研读-2019
  4. 安卓模拟器Genymotion黑屏
  5. 阿里程序员:入职才两个月,我决定离职
  6. Attempt to invoke interface method ‘java.lang.Object[] java.util.Collection.toArray()‘ on a null obj
  7. WIZnet产品选型指南(W5500/W5300/W5100/W5100S/W6100)
  8. Apache Avro是什么?
  9. 垂直切变对热带气旋的影响
  10. /static/fonts/SIMYOU.TTF’ 字体