2018年12月19日,眾多游戲類DApp遭遇交易回滾攻擊,其中包括BetDice,EOSMax,ToBet等。按當時18元人民幣的價格計算,損失超過500萬人民幣。期間BetDice通過鏈金術平臺發出多次公告,一度造成恐慌。
與此同時,慢霧安全團隊對交易所和中心化錢包給出了暫時性的方案。此刻,攻擊手法依舊是一個謎團。那么,攻擊手段究竟是怎樣的呢?在進行攻擊回顧之前,需要先了解一點技術背景。
技術背景
1、我們知道EOS采用的共識算法是DPOS算法,采用的是21個超級節點輪流出塊的方式。除了21個超級節點外的其他全節點,并沒有出塊的權限。起到的作用是將收到的交易廣播出去,然后超級節點將其進行打包。
說到這里,很容易看出,如果一筆交易是發給除了超級節點外的其他全節點,這筆交易會經歷兩個過程。首先,這筆交易先被全節點接收,然后交易再被節點廣播出去進行打包。而一筆交易是需要超級節點中超過2/31的節點進行確認之后才是不可回滾的,也就是不可逆的。
這個過程大概需要3分鐘左右,也就是說,交易發到除了超級節點外的全節點的時候,由于全節點沒有打包的權利,此時此刻交易仍然處于可逆狀態。這是一個核心關鍵點。
慢霧:GenomesDAO被黑簡析:據慢霧區hacktivist消息,MATIC上@GenomesDAO項目遭受黑客攻擊,導致其LPSTAKING合約中資金被非預期的取出。慢霧安全團隊進行分析有以下原因:
1.由于GenomesDAO的LPSTAKING合約的initialized函數公開可調用且無權限與不可能重復初始化限制,攻擊者利用initialized函數將合約的stakingToken設置為攻擊者創建的虛假LP代幣。
2.隨后攻擊者通過stake函數進行虛假LP代幣的抵押操作,以獲得大量的LPSTAKING抵押憑證。
3.獲得憑證后再次通過initialized函數將合約的stakingToken設置為原先真是的LP代幣,隨后通過withdraw函數銷毀LPSTAKING憑證獲取合約中真實的LP抵押物。
4.最后將LP發送至DEX中移除流動性獲利。
本次事件是因為GenomesDAO的LPSTAKING合約可被任意重復初始化設置關鍵參數而導致合約中的抵押物被惡意耗盡。[2022/8/7 12:07:06]
2、每一個bp,都可以在自己的節點的config.ini文件內進行黑名單的配置,在黑名單中的帳號是不能進行交易的,也就是說無論怎樣,黑名單的交易都會被回滾。
慢霧:iCloud 用戶的MetaMask錢包遭遇釣魚攻擊是由于自身的安全意識不足:據官方消息,慢霧發布iCloud 用戶的MetaMask錢包遭遇釣魚攻擊簡析,首先用戶遭遇了釣魚攻擊,是由于自身的安全意識不足,泄露了iCloud賬號密碼,用戶應當承擔大部分的責任。但是從錢包產品設計的角度上分析,MetaMask iOS App 端本身就存在有安全缺陷。
MetaMask安卓端在AndroidManifest.xml中有android:allowBackup=\"false\" 來禁止應用程序被用戶和系統進行備份,從而避免備份的數據在其他設備上被恢復。
MetaMask iOS端代碼中沒有發現存在這類禁止錢包數據(如 KeyStore 文件)被系統備份的機制。默認情況下iCloud會自動備份應用數據,當iCloud賬號密碼等權限信息被惡意攻擊者獲取,攻擊者可以從目標 iCloud 里恢復 MetaMask iOS App 錢包的相關數據。
慢霧安全團隊經過實測通過 iCloud 恢復數據后再打開 MetaMask 錢包,還需要輸入驗證錢包的密碼,如果密碼的復雜度較低就會存在被破解的可能。[2022/4/18 14:31:38]
黑名單配置路徑:
慢霧:BSC鏈上項目BXH遭受攻擊分析:10月30日消息,據慢霧區情報,2021年10月30日,幣安智能鏈上(BSC)去中心化交易協議BXH項目遭受攻擊,被盜約1.3億美金。經慢霧安全團隊分析,黑客于27日13時(UTC)部署了攻擊合約0x8877,接著在29日08時(UTC)BXH項目管理錢包地址0x5614通過grantRole賦予攻擊合約0x8877管理權限。30日03時(UTC)攻擊者通過攻擊合約0x8877的權限從BXH策略池資金庫中將其管理的資產轉出。30日04時(UTC)0x5614暫停了資金庫。因此BXH本次被盜是由于其管理權限被惡意的修改,導致攻擊者利用此權限轉移了項目資產。[2021/10/30 6:22:02]
MacOS:
~/Library/ApplicationSupport/eosio/nodeos/config/config.ini
Linux:
~/.local/share/eosio/nodeos/config/config.ini
配置方法:將config.ini文件內的actor-blacklist填入黑名單帳號,如下圖中,將attacker這個帳號作為黑名單帳號。
慢霧:跨鏈互操作協議Poly Network遭受攻擊并非由于網傳的keeper私鑰泄漏:對于跨鏈互操作協議Poly Network遭受攻擊事件,慢霧安全團隊分析指出:本次攻擊主要在于EthCrossChainData合約的keeper可由EthCrossChainManager合約進行修改,而EthCrossChainManager合約的verifyHeaderAndExecuteTx函數又可以通過_executeCrossChainTx函數執行用戶傳入的數據。因此攻擊者通過此函數傳入精心構造的數據修改了EthCrossChainData合約的keeper為攻擊者指定的地址,并非網傳的是由于keeper私鑰泄漏導致這一事件的發生。[2021/8/11 1:47:48]
了解了以上的知識點之后,我們就可以進行整個攻擊事件的回顧了。
攻擊回顧
跟蹤攻擊者的其中一個攻擊帳號,發現帳號合約內只有一個transfer函數
同時,我們可以通過復盤這個帳號的所有交易記錄發現,這個帳號只有開獎記錄,而沒有下注記錄,看起來就好像項目方故意給這個帳號進行開獎一樣。然而事實上并非如此。那為什么會出現這樣的情況呢?這就需要上面的技術背景的知識了。以下是詳細的攻擊手法:
慢霧:Lendf.Me攻擊者剛歸還了126,014枚PAX:慢霧安全團隊從鏈上數據監測到,Lendf.Me攻擊者(0xa9bf70a420d364e923c74448d9d817d3f2a77822)剛向Lendf.Me平臺admin賬戶(0xa6a6783828ab3e4a9db54302bc01c4ca73f17efb)轉賬126,014枚PAX,并附言\"Better future\"。隨后Lendf.Me平臺admin賬戶通過memo回復攻擊者并帶上聯系郵箱。此外,Lendf.Me攻擊者錢包地址收到一些受害用戶通過memo求助。[2020/4/20]
1、首先:攻擊者調用非黑名單合約的transfer函數,函數內部有一個inlineaction進行下注,from填寫的是攻擊者控制的非黑名單合約帳號,to填寫的是游戲合約帳號。這時,攻擊者發送交易是發向游戲合約自己的全節點服務器。使用的是黑名單帳號進行。
2、游戲節點讀取到了這筆交易,立刻進行開獎,如果中獎,將對攻擊者控制的非黑名單帳號發送EOS。
3、在經歷了一個1,2兩個操作之后。理論上攻擊者控制的非黑名單帳號是進行了余額扣除。然后進行正常的開獎邏輯。到這里之前,一切都是正常的。也許有讀者會問,為什么配置了黑名單,交易還能正常發起?原因是這個黑名單生效范圍是在bp內,普通的全節點的config.ini內是沒有黑名單的配置的。所以攻擊者依然可以發起交易。
4、到此為止,攻擊正式開始,也到了最關鍵的地方,由于項目方節點在收到下注交易的時候已經立馬完成了開獎邏輯,而且采用的是線下開獎的模式,即下注交易和開獎交易是兩筆不同的交易。但是,這兩筆交易僅僅是在項目方的節點內完成,仍然是可逆的。當項目方節點向bp廣播這兩筆交易的時候,由于第一筆下注交易的發起者在bp節點的黑名單內,這一筆交易將被回滾,也就是打包失敗,而開獎交易的發起者是項目方,不在黑名單之內,會被正常打包。因此兩筆交易中的第一筆下注交易一定會被回滾,而開獎交易依舊會被打包,這也就解釋了為什么只有開獎記錄,而沒有下注記錄。因為下注記錄都被回滾了。
整個過程可以參考下面的圖:
攻擊復現
本次攻擊復現參考EOSLIVE錢包團隊的文章:https://eos.live/detail/19255
1、環境準備
本地準備兩個節點,一個出塊節點,一個同步節點,出塊節點用于模擬真實bp,而同步節點則用于模擬項目方,其中出塊節點需要開啟history插件,方便后續的debug,并且把attacker加入節點黑名單。方便后續的debug。打包節點則需要開啟自動開獎插件,自動開獎插件配置詳見:
https://github.com/superoneio/security
本次復現用到的代碼:
https://github.com/superoneio/security
本地多節點配置方法官方參考:
https://developers.eos.io/eosio-nodeos/docs/local-multi-node-testnet
三個測試帳號,分別是tobetioadmin,tobetiologs1,attackproxy1,分別為項目方帳號,項目方log帳號,和攻擊代理帳號,其中tobetioadmin部署tobet游戲合約,tobetiologs1部署logs合約,attackproxy1部署attack合約。注意除了攻擊代理帳號外的其他兩個帳號不要改為其他帳號,如果改為其他帳號需要對自動開獎插件進行修改,自動開獎插件是攔截tobetioadmin這個帳號的。
附上我的雙節點的配置:
其中nodeos_main為出塊節點,nodeos_second為同步節點。
2、啟動節點
看到以上信息則代表dice_plugin配置成功
3、首先對正常的邏輯進行測試。
使用attackproxy1對tobetioadmin帳號進行正常的轉賬交易
可以看到,攻擊代理合約進行了正常的轉賬。
4、開始攻擊,使用黑名單帳號調用攻擊代理合約,向項目方合約發起攻擊。查詢初始余額
為保證攻擊成功,連續向項目方發起4起攻擊
再次查詢余額
查詢attacker帳號記錄
可見,并沒有attacker對attackproxy1的調用記錄,最后兩條記錄是我測試直接使用黑名單向tobetadmin發起攻擊的時候留下的記錄。與本次測試無關。但是通過查詢發現,本地記錄和鏈上記錄是相吻合的,即無下注記錄。
查詢attackproxy1的帳號記錄
可以看到的是,這個也與鏈上記錄吻合,只有開獎記錄,就像tobetadmio故意給attackproxy1開獎一般。
通過以上的復現及和鏈上記錄的對比,我們可以證明上文說的攻擊手法,就是黑客本次進行攻擊的手法,采用的就是使用黑名單進行回滾的操作。
防御建議
1、針對DApp的防御建議
節點開啟readonly模式,防止節點服務器上出現未確認的塊建立開獎依賴,如訂單依賴,開獎的時候判斷訂單是否存在,就算在節點服務器上開獎成功,由于在bp上下注訂單被回滾,所以相應的開獎記錄也會被回滾。
2、針對交易所和中心化錢包的防御建議
慢霧安全團隊建議EOS交易所及中心化錢包在通過RPC接口get_actions查詢熱錢包充值記錄時,應檢查充值transaction所在的block_num是否小于last_irreversible_block,如果block_num大于last_irreversible_block則表示該區塊仍然是可逆的,存在「假充值」風險。
本文來源于非小號媒體平臺:
慢霧科技
現已在非小號資訊平臺發布1篇作品,
非小號開放平臺歡迎幣圈作者入駐
入駐指南:
/apply_guide/
本文網址:
/news/3627097.html
免責聲明:
1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場
上一篇:
再提Mt.Gox,糟糕的「里程碑事件」正提升區塊鏈世界的安全意識
下一篇:
復盤數十萬EOS被盜過程,背后是其架構設計缺陷?
親愛的用戶: “猜大盤漲跌壕取海量ETH!”活動已結束,所有獎勵已發放至個人賬戶,請所有符合獎勵條件的用戶在個人賬戶查看分發結果.
1900/1/1 0:00:00區塊鏈技術以前所未有的發展速度,聚焦全球資本和市場。而誰能在公鏈中脫穎而出,誰就能決定行業中的地位.
1900/1/1 0:00:00也許我們這些聰明人,腦袋里能裝的目標太多,所以遺忘了執著。《阿甘正傳》里的這句話,無形中契合了當下區塊鏈行業的許多“紛雜”現象.
1900/1/1 0:00:00金色財經比特幣5月22日訊在傳統股市里,你可以選擇很多公司股票進行投資,加密貨幣市場里也有很多“目標”供你選擇,比如比特幣、以太坊、瑞波幣、萊特幣、比特幣現金、波場、Cardano……那么.
1900/1/1 0:00:00由東南亞數字貨幣、區塊鏈加密技術愛好者及投資者等共同發起并孵化的東南亞頭部社區G1旗下的質押服務平臺Validators.Online,今日宣布加入Wanchain星系共識PoS節點生態.
1900/1/1 0:00:00作者|殷耀平 引言 BOSCore是EOS生態內熱度較高的側鏈項目,已于今年1月發布主網,其旨在優化EOS生態的核心技術方案曾多次得到BM的認可.
1900/1/1 0:00:00