比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > Ethereum > Info

隱藏在眾目睽睽之下:復盤etherscan的零日漏洞_HER

Author:

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

“如果你在etherscan中找到一個0day漏洞,你會怎么做?我決定構建一個‘彈球機‘。"——paradigm研究合伙人samczsun

注:原文作者是samczsun。

我喜歡挑戰假設。

我喜歡嘗試做不可能的事情,找到別人錯過的東西,用他們從未見過的事來使他們震驚。去年的時候,我根據一個非常費解的Solidity漏洞為ParadigmCTF2021編寫了一個挑戰。雖然公開披露了一種變體,但我找到的漏洞從未真正被討論過。結果,幾乎所有嘗試過挑戰它的人,都被它看似不可能的性質所難倒。

幾周前,我們正在討論關于ParadigmCTF2022的計劃,當時Georgios在推特上發布了一條難題推文,我認為在啟動電話會議的同一天發布一個挑戰會非常酷。然而,這不可能只是一次老掉牙的挑戰。我想從這個世界得到一些東西,一些沒有人會看到的東西,一些超越人們想象極限的東西。我想編寫第一個利用0day漏洞的以太坊CTF挑戰。

如何制造0day漏洞

作為安全研究人員,為了優化我們的時間,我們會做出一些基本假設。一是我們正在閱讀的源代碼確實產生了我們正在分析的合約。當然,只有當我們從可信的地方讀取源代碼時,這種假設才成立,比如說Etherscan。因此,如果我能找到一種方法讓Etherscan錯誤地驗證某些東西,我就能夠圍繞它設計出一個真正迂回的謎題。

Pudgy Penguins將發布包含隱藏秘密的工作臺“Pudgy Workbench”:金色財經報道,NFT項目“胖企鵝”Pudgy Penguins在推特上公布包含隱藏秘密的工作臺“Pudgy Workbench”。根據一個正在倒計時的鬧鐘顯示,該工作臺的發布時間似乎指向太平洋時間5月12日中午12:30,此外其中還有兩個名為“Lil Pudgy's Playbook”和“Big Pudgy's Playbook”的文件夾,以及一個印有Pudgy Penguin #6272的ID身份證件卡。Pudgy Penguins表示其中每個內容都具有“目的性”的秘密和線索。[2023/5/3 14:39:28]

為了找出如何利用Etherscan的合約驗證系統,我必須驗證一些合約。我在Ropsten測試網部署了一些合約來折騰并嘗試驗證它們。很快,我就看到了下面的界面。

我選擇了正確的設置并進入下一頁。在這里,我被要求提供我的合約源代碼。

我輸入了源代碼并單擊了驗證按鈕,果然,我的源代碼現在附在了我的合約上。

既然我知道了事情是如何運作的,我就可以開始戲弄驗證過程了。我嘗試的第一件事是部署一個新的合約,將foo更改為bar,并用原始源代碼驗證該合約。毫不奇怪的是,Etherscan拒絕驗證我的合約。

網友向推特黑客轉幣包含隱藏信息:比特幣可追蹤 為何不使用門羅幣:7月16日消息,在今日早間推特眾多名人賬戶遭攻擊,并發布數字貨幣釣魚騙局后,根據Reddit網友發布的鏈上數據信息,有用戶正在向黑客相關的七個不同的地址發送0.00005348 BTC(約合0.5美元)。而在這7筆交易中隱藏著一份信息:使用比特幣時您處于危險之中,比特幣可以被追蹤,為何不使用門羅幣。(JP.Cointelegraph)[2020/7/16]

然而,當我手動比較兩個字節碼輸出時,我注意到一些奇怪的事情。合約字節碼應該是十六進制的,但顯然有一些并非是十六進制的。

我知道Solidity會將合約元數據附加到部署的字節碼中,但我從未真正考慮過它是如何影響合約驗證的。顯然,Etherscan正在掃描元數據的字節碼,然后用一個標記替換它,“這個區域中的任何東西都可以不同,我們仍然會認為它是相同的字節碼。”

對于潛在的0day漏洞,這似乎是一個很有希望的線索。如果我可以欺騙Etherscan將非元數據解釋為元數據,那么我將能夠在標記為{ipfs}的區域中調整我部署的字節碼,同時仍然讓它驗證為合法的字節碼。

我能想到的在創建事務中包含一些任意字節碼的最簡單方法,是將它們編碼為構造函數參數。Solidity通過將ABI編碼形式直接附加到創建交易數據上來對構造函數參數進行編碼。

動態 | 1inch團隊:bZx拒絕停止智能合約并打算隱藏整個事件:加密貨幣兌換聚合器公司1inch.exchange官方推特今日發布詳述其與bZx團隊接觸過程的文章,文中提到,1月11日,bZx的Fulcrum平臺在以太網上發布其FlashFlash貸款功能,我們發現其中有一筆交易可能會竊取3個池中的250萬美元用戶資金。于是向Fulcrum提供了指向黑客證明交易的鏈接,希望他們能夠立即停止其智能合約。但Fulcrum方拒絕了,他們認為在構建和排隊補丁的過程中,有必要冒著用戶資金損失的風險,以避免造成負面關注。Fulcrum團隊還試圖用35000美元使我們沉默并隱藏整個事情。對此,bZx聯合創始人Kyle Joseph Kistner在推特上留言稱,1inch團隊威脅了我們。隨后1inch回應稱,我們并沒有行威脅之事,我們只是說你不應該在截圖上公開我們的照片和名字,否則我們有辦法阻止。[2020/2/21]

然而,Etherscan太聰明了,它將構造函數參數排除在任何類型的元數據嗅探之外。你可以看到構造函數參數是斜體的,以表明它們與代碼本身是分開的。

這意味著我需要以某種方式欺騙Solidity編譯器,使其發出我控制的字節序列,以便使其類似于嵌入的元數據。然而,這似乎是一個很難去解決的問題,因為如果沒有一些嚴重的編譯器爭論,我幾乎無法控制Solidity選擇使用的操作碼或字節,之后源代碼看起來會非常可疑。

動態 | 黑客正在使用假Adobe Flash更新來隱藏數字貨幣挖掘惡意軟件:據CCN報道,人們發現,假冒的Adobe Flash更新被用于在計算機和網絡上秘密安裝數字貨幣挖掘惡意軟件,給受影響的用戶造成嚴重的時間、系統性能和功耗損失。傳統上,假冒的Flash更新很容易識別和避免惡意軟件,但一項新的活動采用了新的技巧,在Windows系統上偷偷下載數字貨幣。當受害者的Windows計算機背景中的XMRig數字貨幣礦工軟件或其他有害程序正在悄悄運行時,潛在的受害者可能不會發現任何異常情況。該礦工軟件可能會在未經受害者同意的情況下,使受害者計算機的處理器速度變慢,損壞硬盤驅動器或提取機密數據并將其傳輸到其他數字平臺。[2018/10/13]

我考慮了一會兒這個問題,直到我意識到:導致Solidity發出任意字節實際上是非常容易的。以下代碼將導致Solidity發出32個字節的0xAA。

bytes32value=0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;

受到鼓舞,我很快寫了一個小合約,它將推送一系列常量,以便Solidity會發出與嵌入的元數據完全相似的字節碼。

令我高興的是,Etherscan在我的合約中間標記了IPFS哈希的存在。

分析 | 哈希派:成敗全看ETF 樂觀行情背后隱藏著更大的系統性風險:哈希派稱,近期整個幣市迎來了一波相當可觀的漲勢,市值相比月中行情啟動前大約增長了20%。CoinMarketCap平臺給出的數據顯示,BTC本月16日至今近10日的平均交易額相比上一周期增長了42.5%,同時其他主流幣種如ETH、EOS交易額也略有增幅,但相比BTC并不明顯。哈希派分析師Eric認為,市場對比特幣ETF樂觀的預期再加上已經持續半年以上的熊市共同形成了這輪上漲很明顯的頭部吸血效應,然而資金過度集中在BTC也加大了幣市的整體風險。從近期輿論的熱點可以看出目前市場對于下一個牛市的信心完全是基于比特幣ETF的順利獲批。反過來說,我們可以認為這種牛市信心的基礎是相當脆弱的。如果此次比特幣ETF的申請再次受阻,隨即迎來的就是頭部資金的出逃以及新一輪的恐慌性拋售,投資者迎來的可能不是牛市而是幣市寒冬的延續。[2018/7/26]

我快速復制了預期的字節碼,并用一些隨機字節替換了IPFS哈希,然后部署了生成的合約。果然,Etherscan像往常一樣考慮了不同的字節業務,并允許我的合約得到驗證。

有了這個合約,源代碼建議在調用example()時應該返回一個簡單的字節對象。但是,如果你真的嘗試調用它,就會發生這種情況。

$sethcall0x3cd2138cabfb03c8ed9687561a0ef5c9a153923f'example()'seth-rpc:{"id":1,"jsonrpc":"2.0","method":"eth_call","params":}seth-rpc:error:code-32000seth-rpc:error:messagestackunderflow(5<=>16)我在Etherscan中成功發現了一個0day漏洞,現在我可以驗證行為與源代碼建議完全不同的合約。而現在,我只需要圍繞它設計一個解密游戲。

一個錯誤的開始

顯然,這個解密游戲將圍繞這樣一個想法,即Etherscan上看到的源代碼并不意味著合約的實際行為方式。我還想確保玩家不能簡單地直接重放交易,因此解決方案必須是每個地址唯一的。最好的方法顯然是要求簽名。

但是在什么情況下會要求玩家簽署一些數據呢?我的第一個設計是一個具有單一公開函數的簡單puzzle。玩家將使用一些輸入調用該函數,對數據進行簽名以證明他們提出了解決方案,如果輸入通過了所有各種檢查,那么他們將被標記為solver。然而,當我在接下來的幾個小時內充實這個設計時,我很快就對事情的結果感到不滿意了,它開始變得非常笨重和不優雅,我無法忍受在一個設計如此糟糕的puzzle上毀掉如此棒的0day漏洞想法。

不得不承認,我無法在周五前完成這件事,于是我決定睡一覺。

Pinball彈球難題

周末我繼續嘗試迭代我的初始設計,但沒有取得更多的進展。就好像我現在的方法碰壁了,盡管我不想承認,但我知道如果我想要我滿意的東西,我可能不得不重新開始。

最終,我發現自己從第一原理重新審視了這個問題。我想要的是一個解密游戲,玩家必須在其中完成各種知識檢查。但是,我沒有要求完成知識檢查本身就是獲勝的條件,相反,這可能是允許玩家選擇的眾多路徑之一。也許玩家可以在整個puzzle中累積分數,利用這個漏洞可以獲得某種獎勵。贏的條件只是最高的分數,因此間接鼓勵使用漏洞。

我回想起我去年設計的一個挑戰,Lockbox?,它迫使玩家構建一個單一的數據塊,以滿足六個不同合約的要求。合約會對相同的字節應用不同的約束,迫使玩家在構建有效載荷的方式上變得聰明。我意識到我想在這里做一些類似的事情,我會要求玩家提交一個單一的數據blob,我會根據滿足特定要求的某些數據部分來獎勵分數。

正是在這一點上,我意識到我基本上是在描述pinboooll?,這是我在DEFCONCTF2020決賽期間面臨的一個挑戰。pinboooll的噱頭是當你執行二進制文件時,執行會在控制流圖上反彈,就像一個球在彈球機中反彈一樣。通過正確構造輸入,你將能夠找到特定的代碼部分并獲得分數。當然,也有一個漏洞,但坦率地說,我已經忘記了它是什么,我也不打算再去尋找它。除此之外,我已經有了自己想要利用的漏洞。

由于我在處理的是一個運行當中的零日漏洞,我決定要盡快解決這個難題。最后,我花了幾個小時讓自己重新認識pinboooll的工作原理,并花了幾天時間將其重新實現。這就解決了puzzle的支架問題,現在我只需要集成這個漏洞。

武裝化一個零日漏洞

我讓Solidity輸出正確字節的方法一直是只加載幾個常量,并讓Solidity發出相應的PUSH指令。然而,這樣的任意常數可能是一個巨大的危險信號,我想要一些能更好地融入其中的東西。我還必須加載一行中的所有常量,這在實際代碼中很難解釋。

因為我真的只需要硬編碼兩個神奇的字節序列,所以我決定看看是否可以在它們之間夾入代碼,而不是第三個常量。在已部署的合約中,我只需要用一些其他指令替換夾在中間的代碼。

addressa=0xa264...1220;uintx=1+1+1+...+1;addressb=0x6473...0033;經過一些實驗,我發現這是可能的,但前提是啟用了優化器。否則,Solidity會發出過多的值清理代碼。這是可以接受的,所以我繼續改進代碼本身。

我只能在兩個地址內修改代碼,但是在最后看到一個懸空的地址會很奇怪,所以我決定在條件語句中使用它們。我還必須證明第二個條件的必要性,所以最后我投了一點分數獎勵。我做了第一次有條件的檢查,檢查tx.origin是否匹配了硬編碼的值,以給人們一個最初的印象,即沒有必要進一步追求這個代碼路徑。

if(tx.origin!=0x13378bd7CacfCAb2909Fa2646970667358221220)returntrue;state.rand=0x40;state.location=0x60;if(msg.sender!=0x64736F6c6343A0FB380033c82951b4126BD95042)returntrue;state.baseScore+=1500;現在源代碼都準備好了,我必須編寫實際的后門。我的后門需要驗證玩家是否正確觸發了漏洞利用,如果他們沒有正確觸發,則不給出任何提示就失敗,如果他們成功觸發,則獎勵他們。我想確保漏洞不會被輕易重放,所以我決定只要求玩家簽署自己的地址,并在交易中提交簽名。為了增加樂趣,我決定要求簽名位于交易數據中的偏移量0x44處,球通常會從這里開始。這將需要玩家了解ABI編碼的工作原理,并手動將球數據重新定位到其他地方。

但是,在這里我遇到了一個大問題:根本不可能將所有這些邏輯都放入31字節的手寫匯編中。幸運的是,經過一番考慮,我意識到我還有另外31個字節可以使用。畢竟,真正嵌入的元數據包含了另一個Etherscan也會忽略的IPFS哈希。

在打了一些代碼高爾夫之后,我抵達了一個可以工作的后門。在第一個IPFS哈希中,我會立即彈出剛剛推送的地址,然后跳轉到第二個IPFS哈希。在那里,我會哈希調用方,并部分設置memory/堆棧以調用ecrecover。然后我會跳回第一個IPFS哈希,在那里我完成設置堆棧并執行調用。最后,我將分數乘數設置為等于(msg.sender==ecrecover())*0x40+1,這意味著不需要額外的分支。

在把后門編碼成一定大小后,我在推特上發布了我的Rinkeby地址,以便從水龍頭處獲取一些測試網ETH,然后向任何觀看這條推文的人暗示可能會發生一些事情。接著,我部署了合約并對其進行了驗證。

現在剩下要做的,就是等待有緣人發現隱藏在視線中的后門。

注:截至發稿時,來自RocketPool的軟件開發者KaneWallmann已經解出了這個謎題,具體過程在這里:https://medium.com/@kanewallmann_71759/an-untrustworthy-pinball-machine-d9dcd07882c

此外,Etherscan開發者CalebLau也已經修復了該漏洞。

Tags:ETHAAAETHERHERETHMSAAA幣togetherbnb薇拉雙人互動28 VOUCHER KOREA

Ethereum
「互聯網檔案館」創始人:淺談歸檔互聯網背后的愿景—Web3.0_WEB3.0

編譯出品|白澤研究院 「互聯網檔案館」是一個非盈利性的、提供互聯網資料檔案閱覽服務的數字圖書館,是布魯斯特·卡利于1996年創辦的.

1900/1/1 0:00:00
微軟總裁稱科技行業應配合監管機構,淡化元宇宙“炒作”_區塊鏈

來源:財聯社 作者:瀟湘 微軟總裁布拉德·史密斯(BradSmith)周三在接受采訪時表示,科技行業應配合監管機構,認真對待政府和民眾對相關問題的關切.

1900/1/1 0:00:00
第七屆萬向區塊鏈全球峰會 | 對話:區塊鏈如何加速推動城市治理體系和治理能力的數字化發展_VEN

2021年7月28日,在新加坡榜鵝數字園區開幕儀式上,萬向區塊鏈和新加坡貿易與工業部下屬官方機構裕廊集團宣布達成合作.

1900/1/1 0:00:00
多鏈生態的“競賽”如火如荼:一文說透多鏈網絡的特性和優勢體現_DEFI

當市場經過十多年的發展,數字資產的種類越來越多,圍繞數字資產形成的各種衍生品也有了質的飛躍。尤其是DEFI的出現,讓數字資產有了在質押的前提下廣泛交換的能力,進入2021年10月之后,隨著比特幣.

1900/1/1 0:00:00
如何看待當下的DeFi范式轉變:從TVL到PCV_REA

作者:Starit 原標題:《當下的DeFi范式轉變:從TVL到PCV》前陣子OlympusDAO的發展讓很多人非常震驚,也有人用DeFi2.0來給這一波興起的DeFi項目貼上了標簽.

1900/1/1 0:00:00
格局打開!Meta與微軟達成合作協議,互通元宇宙相關產品_MET

/本期主角:元宇宙&Meta&微軟/有關元宇宙的火熱程度想必不用mooseen多加贅述各位都懂~特別是最近前有Facebook改名Meta使元宇宙概念出圈.

1900/1/1 0:00:00
ads