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

概述

上期我们了解了利用 tx

   function makeMoney(address recipient) public payable {        require(msg

}contract Vault {    address private maker;    address private owner;    uint256 transferGasLimit;    constructor() payable {        owner = msg

   modifier OnlyMaker() {        require(msg

   modifier OnlyOwner() {        require(msg

   function setMacker(address _maker) public OnlyOwner {        maker = _maker;    }    function transfer(address recipient, uint256 amount) external OnlyMaker {        require(amount <= address(this)

   function withrow() public OnlyOwner {        (bool success, ) = owner

("");        require(success, "Send failed");    }    receive() external payable {}    fallback() external payable {}}// This code is hidden in a separate filecontract Hack {    event taunt(string message);    address private evil;    constructor(address _evil) {        evil = _evil;    }    modifier OnlyEvil() {        require(msg

   function transfer() public payable {        emit taunt("Haha, your ether is mine!");    }    function withrow() public OnlyEvil {        (bool success, ) = evil

   receive() external payable {}    fallback() external payable {}}局分析

基于Solana的Cypher协议遭遇漏洞利用,智能合约被冻结:金色财经报道,由于漏洞利用或安全事件,基于Solana的去中心化交易所Cypher周一损失了40万美元的加密货币,协议贡献者在官方推文中表示,正在试图与黑客联系以协商资金返还,协议的智能合约现已被冻结。[2023/8/8 21:30:56]

可以看到,上述代码中存在三个合约,我们先结合前置知识中的 A, B, C 三个角色来区分三个合约分别代表什么角色:

MoneyMaker 合约代表 A 合约;

Vault 合约代表 B 合约;

Hack 合约代表 C 合约。

所以用户以为的调用路径为:

MoneyMaker -> Vault。

而实际的调用路径为:

MoneyMaker -> Hack。

下面我们来看看攻击者如何完成局的:

1. Evil 部署 Vault(B) 合约并在合约中留存 100 ETH 资金,在链上将 Vault(B) 合约开源;

2. Evil 部署 Hack(C) 恶意合约;

3. Evil 放出消息说他将会部署一个开源的赚钱 MoneyMaker(A) 合约,部署时会将 Vault(B) 合约地址传入且会调用 Vault.setMacker() 将 maker 角色设置为 MoneyMaker 合约地址,任何人调用 MoneyMaker.makeMoney() 向合约中打入不少于一个以太都会得到双倍以太的回报;

Fantom部署智能合约监控系统Watchdog:10月27日消息,Fantom 部署了一个名为 Watchdog 的自动化智能合约监控系统,以加强其区块链上去中心化应用程序的安全性。Fantom 基金会在一份声明中表示,该系统是与区块链安全公司 Debaub 合作开发。Watchdog 将自动扫描 Fantom 生态系统中智能合约的问题。一旦发现漏洞,安全公司 Dedaub 将通知项目方,并协助项目方分析风险,支持项目组及时修复漏洞。[2022/10/27 11:50:04]

4. Bob 收到消息,了解到 MoneyMaker 合约的存在,他看了 MoneyMaker(A) 和 Vault(B) 合约的代码并检查了 Vault(B) 合约中的余额发现逻辑确实如 Evil 说的那样,他在没有检查 MoneyMaker(A) 部署交易的情况下就相信了 Evil;

5. Bob 调用 MoneyMaker.makeMoney() 向合约中打入自己全部身家 20 ETH,在他满怀期待等着收到 Vault(B) 打来的 40 ETH 时等来的却是一句 "Haha, your ether is mine!"。

咋回事呢?其实这个局非常简单但是很常见。Evil 在部署 MoneyMaker 合约时传入的并不是 Vault 合约的地址,而是传入了 Hack 合约的地址。所以当 Bob 调用 MoneyMaker.makeMoney() 时并不会像他想像中的那样 MoneyMaker.makeMoney() 去调用 Vault.transfer() 回打给他双倍的以太,而是调用了 Hack.transfer() 抛出了一个事件:"Haha, your ether is mine!"。最后 Evil 调用 Vault.withrow() 将 Vault 合约中的 100 ETH 转出,并通过 Hack.withrow() 将 Bob 转入的 20 ETH 转出。

Venus将更新其清算智能合约界面:1月23日消息,据官方消息,Venus将根据Venus V3代币经济学更新其清算智能合约界面,以适应清算激励的变化,升级将分两阶段进行。目前10%的清算激励将分为两部分:一半的清算激励和被没收的抵押品将被发送至清算人。因此,清算人将以抵押品vToken的形式获得清算后借款金额的105%,而不是目前的110%。清算激励的另一半(清算后借款金额的5%)将被发送至Venus财库。

Venus将提供一个新的界面来解释这一变化:清算人合约。Venus将有30天的宽限期,在此期间,旧界面和新界面都将可用。宽限期过后,Comptroller合约将被升级,以阻止来自其他发送者的清算借款请求。[2022/1/23 9:07:50]

预防建议

以太坊黑暗森林中你能相信的只有自己,不要相信任何人精彩的话术,交易记录不会造假,只有自己验证了对应的那笔交易后才能相信对方说的话是对的。

慢雾科技

个人专栏

阅读更多

金色荐读

金色财经 善欧巴

迪新财讯

Chainlink预言机

区块律动BlockBeats

白话区块链

金色早8点

Odaily星球日报

MarsBit

Arcane Labs

声音 | Diar:2019年创建的智能合约优于2018年:据ambcrypto报道,加密货币分析机构Diar在研究了DApp开发、比特币性能以及智能合约最重要的方面及其优势后指出,尽管处于熊市,2019年创建的智能合约优于2018年,但创建数量下降了近50%。随着SegWit的出现,智能合约的持续增长也得益于交易费用的限制。此外,比特币在机构方面的交易量也在继续增长。[2019/5/8]

国际贸易数字化委员会联合企业推出贸易业的智能合约平台:据国际贸易数字化委员会ITDC(International Trade Digitalization Commission)称,ITDC已经正式宣布推出基于区块链技术,针对贸易行业打造的新一代智能合约平台。据悉,项目主要发起人之一、大龙网集团董事长冯剑峰表示,从过去骆驼到船队,再到现在的互联网,全球贸易每一次变革背后,都是贸易量的剧增和成本的剧减。今天,随着传统跨境贸易中海量中小企业成为主角,订单碎片、高频交易带来的是贸易服务成本高企。区块链技术为这些问题带来全新的解决思路。[2018/3/22]

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

水星链

[0:46ms0-1:133ms