智能合約蜜罐概述
研究安全的讀者應該都清楚,蜜罐本質上是一種對攻擊方進行欺騙的技術,通過布置一些作為誘餌的主機、網絡服務或者信息,誘使攻擊方對它們實施攻擊。蜜罐設計的初衷就是讓黑客來入侵系統,并借此收集證據,也隱藏了真實環境。智能合約中也有蜜罐,但它不同于我們一般聽到的蜜罐。在本文中,知道創宇區塊鏈安全實驗室主要針對智能合約蜜罐進行分析。智能合約蜜罐的作用更像是釣魚,通過引誘攻擊者轉賬到蜜罐合約。相比于普通釣魚行為面對一般用戶,智能合約蜜罐的釣魚行為針對的是智能合約開發者、智能合約代碼審計人員以及黑客,這種釣魚行為明顯門檻更高。接下來我們會對一些智能合約蜜罐的案例做講解,揭露其中的騙局,這些智能合約蜜罐代碼都可以GitHub上找到,這里給出他們的網址:smart-contract-honeySolidlity-Vulnerable根據這些智能合約蜜罐的欺騙手法,可以將它們大致的分類為以下幾種古老的欺騙手段黑客的漏洞利用新穎的賭博游戲黑客的漏洞利用由于篇幅有限,文章分為兩部分進行講解,本文作為上篇,主要對古老的欺騙手段和神奇的邏輯漏洞進行講解和復現,新穎的賭博游戲和黑客的漏洞利用會在下篇中進行講解。古老的欺騙方法
2
require(msg
當我們將合約的代碼放到本地進行自動換行時就可以發現該合約是存在問題的。//contractaddress:0x7a4349a749e59a5736efb7826ee3496a2dfd5489pragmasolidity^0
}functionwithdraw()payablepublic{if(msg
require(msg
Visa全球CBDC產品負責人:Visa想要“有趣的用例”,在穩定幣領域的重點是法幣支持的數字貨幣:5月19日消息,Visa全球CBDC產品負責人Catherine Gu在Permissionless大會中發言稱,Visa想要“有趣的用例”,它在穩定幣領域的重點是法定支持的數字貨幣,Visa還研究了利用鏈上抵押品的項目。Gu表示:我們必須考慮如何構建這些不同的項目,保障措施和標準對消費者、散戶投資者和機構都很重要。此外,重要的是要了解穩定幣儲備是如何被審計的,以及誰來模擬和測試他們的系統性風險,即使是最安全的資產也可能存在風險。(blockworks)[2022/5/19 3:27:23]
functionCommand(addressadr,bytesdata)payablepublic{require(msg
}2
else{throw;}}//當區塊塊號大于504027時再判斷調用者是否為合約所有者,如果是則將合約所有余額轉給合約所有者。msg
該蜜罐合約完整的代碼如下:contractTestToken{stringconstantname="TestToken";stringconstantsymbol="TT";uint8constantdecimals=18;uinttotal;boollocked;address_owner;structAllowed{mapping(address=>uint256)_allowed;}mapping(address=>Allowed)allowed;mapping(address=>uint256)balances;eventTransfer(addressindexed_from,addressindexed_to,uint256_value);eventApproval(addressindexed_owner,addressindexed_spender,uint256_value);functionTestToken(){total=0;_owner=msg
波卡創始人Gavin Wood:Web 3是“后斯諾登時代網絡”,一個非常有趣的社會實驗:金色財經報道,波卡Polkadot創始人Gavin Wood在BlockDown: DeData Conference大會上對互聯網演變發表看法,他表示,因為愛德華·斯諾登事件,讓互聯網感到創建一個全新平臺的緊迫性,他將這種在全球范圍內進行人際互動的方式稱為“后斯諾登時代網絡”(Post-Snowden Web)。展望未來10年或20年,Gavin Wood未來大規模多用戶應用程序框架可以為用戶提供“實際”保證。當被要求預測十年后的Web 3,Gavin Wood回答說:“這將是一個非常有趣的社會實驗,我們將看到世界對隱私、自我主權和透明度的關注,知道系統或服務規則如何運作,非常真實。”[2021/12/4 12:50:10]
functiontotalSupply()constantreturns(uint256totalSupply){returntotal;}functionbalanceOf(address_owner)constantreturns(uint256balance){returnbalances;}functiondeposit()payablereturns(boolsuccess){if(balances+msg
functionwithdraw(uint256_value)payablereturns(boolsuccess){if(balances<_value)returnfalse;msg
functiontransfer(address_to,uint256_value)returns(boolsuccess){if(balances<_value)returnfalse;if(balances+_value<_value)returnfalse;balances-=_value;balances+=_value;Transfer(msg
Ripple CTO:“收集東西的動力”與“數字版權概念”是NFT有趣的兩個點:Ripple首席技術官David Schwartz在最近的一次采訪中表示,他認為與NFT相關的兩個點很有趣,一個是“人們收集東西的動力”,另一個是數字版權的概念。Schwartz指出,盡管許多人目前擁有“捆綁的數字版權”(例如從谷歌Play商店購買的書籍或歌曲),但這些版權的用戶體驗并不好。(CryptoGlobe)[2021/3/22 19:06:28]
functionapprove(address_spender,uint256_value)returns(boolsuccess){allowed._allowed=_value;Approval(msg
functionallowance(address_owner,address_spender)constantreturns(uint256remaining){returnallowed._allowed;}functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess){if(balances<_value)returnfalse;if(allowed._allowed<_value)returnfalse;if(balances+_value<_value)returnfalse;balances-=_value;balances+=_value;allowed._allowed-=_value;returntrue;}functionwithdrawAll()payable{//require(msg
聲音 | Jameson Lopp:比特幣是一個非常有趣的實驗:據cointelegraph報道,比特幣開發者Jameson Lopp稱,我相信比特幣是一個非常有趣的實驗,如果從長遠來看,如果成功,不僅可以徹底改變金錢,還可以徹底改變我們對治理的看法,可以實現向無政府資本主義社會的過渡。[2019/1/1]
else{throw;}}msg
}2
bytes32publichashPass;functionSetPass(bytes32hash)payable{if(!passHasBeenSet&&(msg
}functionGetGift(bytespass)returns(bytes32){if(hashPass==sha3(pass)){msg
returnsha3(pass);}functionPassHasBeenSet(bytes32hash){if(hash==hashPass){passHasBeenSet=true;}}}整個合約有三個關鍵的功能函數,分別是setPass()、GetGift()以及PassHasBeenSet()。首先是setPass()函數,代碼如下,其功能為在還未設置密碼且轉賬大于1eth時可以設置密碼hashPass。functionSetPass(bytes32hash)payable{//設置密碼if(!passHasBeenSet&&(msg
functionCommand(addressadr,bytesdata)payablepublic{require(msg
投資管理公司的首席宏觀投資策略師表示 數字貨幣是一件新鮮有趣的事物:全球最大投資管理公司BlackRock的首席宏觀投資策略師Isabelle Mateos Y Lago 表示,數字貨幣是一件非常新鮮、非常有趣的事物,該公司正在密切關注。Lago還表示,投資于數字貨幣并不難,但重要的是資產的安全性,并認為比特幣并非“可投資資產”。(彭博)[2018/1/30]
functionmultiplicate(addressadr)publicpayable{if(msg
}}該蜜罐合約有三個關鍵的功能函數,分別是withdraw()、Command()以及multiplicate()。首先是withdraw()函數,代碼如下,其功能為判斷調用者是否為合約所有者,如果是則獲取合約中的所有代幣。functionwithdraw()payablepublic{//提款require(msg
modifieronlyOwner{if(msg
}contractTestBankisOwned{eventBankDeposit(addressfrom,uintamount);eventBankWithdrawal(addressfrom,uintamount);addresspublicowner=msg
functiondeposit()publicpayable{require(msg
functionsetEmergencyCode(uint256code,uint256value)publiconlyOwner{ecode=code;evalue=value;}functionuseEmergencyCode(uint256code)publicpayable{if((code==ecode)&&(msg
functionwithdraw(uintamount)publiconlyOwner{require(amount<=this
}該蜜罐合約的關鍵點在于useEmergencyCode()函數,代碼如下,其功能為判斷code是否等于合約的ecode,傳入的msg
functiontest2(uinta)returns(uint){variable+=a;returnvariable;}}contractBisA{uintvariable=0;functiontest2(uinta)returns(uint){variable++;returnvariable;}}====================contractB{uintvariable1=0;uintvariable2=0;functiontest1(uinta)returns(uintv){variable1++;returnvariable1;}functiontest2(uinta)returns(uintv){variable2++;returnvariable2;}}那么再看懂了上面講解的基礎上我們再回到蜜罐合約本身,Owner和TestBank合約中都有一個owner變量,因此TestBank合約中useEmergencyCode()函數修改的其實只是TestBank合約的所有者,并不會對Owner合約的所有者造成任何影響,而函數修飾器onlyOwner中判斷的合約所有者為Owner合約的所有者,也就是合約創建者,無論攻擊者如何修改TestBank合約中的owner值,最后都不能通過onlyOwner的判斷提款成功。根據上述的分析,我們可以將該蜜罐合約的核心代碼修改為如下內容,這樣大家就能夠一目了然的知道原因了,onlyOwner中判斷的owner和useEmergencyCode()函數中的owner參數并不是一個東西,只是同名而已。contractTestBankisOwned{addresspublicowner1=msg
addresspublicowner2=msg
functionwithdraw(uintamount)publiconlyOwner{require(amount<=this
3.3.2代碼復現將蜜罐合約完整代碼放入到RemixIDE中,選擇0x5B38Da6a701c568545dCfcB03FcB875f56beddC4作為合約創建者,點擊「Deploy」來部署合約,設置msg.value為10eth調用deposit()函數存入10eth到合約中。
在使用該用戶0x5B3調用setEmergencyCode()函數設置ecode和evalue,這里我們將ecode任意設置為「111111」,value設置為「10000000000000000000」也就是10eth。
如果蜜罐合約創建者故意泄露自己設置ecode和evalue的值,并且展示出合約中已經存在以太幣,當攻擊者0xAb8發現了這些問題并被欺騙認為該合約存在問題,將msg.value設置為10eth,并輸入code為「111111」去調用useEmergencyCode()函數,嘗試去將合約所有者地址修改為自己的地址,但該攻擊者只是成為了TestBank合約的所有者,并沒有成為Owner合約的所有者,這就導致了在執行withdraw()函數時函數修飾器onlyOwner會拒絕攻擊者。
攻擊者0xAb8查看owner的值確定自己就是合約的所有者了,之后調用withdraw()函數去提取合約中所有的20eth,會發現調用失敗,這是因為函數修飾器onlyOwner中判斷條件不能通過,導致withdraw()函數也不能正常執行,這樣一來攻擊者0xAb8就被蜜罐合約白白騙取了10eth。
而合約所有者0x5B3則可以去調用withdraw()函數取走合約中的20eth。
4.文獻參考
蜜罐技術_百度百科(baidu.com)以太坊蜜罐智能合約分析(seebug.org)Solidity原理:繼承(Inheritance)Solidity中文手冊
隨著Solana、Avalanche、Fantom等公鏈的集體爆發,新興生態的造富效應正在抬頭,為了追逐這些全新的財富機會,用戶的資產跨鏈需求正日漸抬升。當前,用戶執行資產跨鏈有兩種常用渠道.
1900/1/1 0:00:00為什么我們認為總價值鎖定(TVL)可能會誤導協議的財務表現,以及我們認為投資者應該關注哪些指標總價值鎖定(TVL)衡量什么?它衡量協議智能合約中閑置資金的價值.
1900/1/1 0:00:0010月18日-10月24日一周時間內,明星項目進展中值得關注的事件有:ProximityLabs宣布成立3億美元的GrantsDAO,用于扶持NEARDeFi生態;Terra正式激活IBC標準.
1900/1/1 0:00:00美東時間10月19日上午9時30分正值北京晚9點半,美國金融服務商ProShares的CEOMichaelSapir在紐約證券交易所按下了敲鐘鍵,鐘聲記錄了比特幣史上里程碑式的一刻.
1900/1/1 0:00:00公鏈賽道永遠充滿看點。去年,DeFi生態崛起,NFT項目、GameFi游戲、DeFi項目的數量快速增加,這既讓主流公鏈的資產規模被放大,也讓新興公鏈、跨鏈項目、以太坊Layer2生態快速發展起來.
1900/1/1 0:00:00DeFi周報是Odaily星球日報聯合全球Defi孵化工場DeFictory、區塊鏈營銷咨詢公司WXY、數據提供方OKLink、內容合作方BlockArk推出的一檔欄目.
1900/1/1 0:00:00