2018年12月19日,眾多游戲類DApp遭遇交易回滾攻擊,其中包括BetDice,EOSMax,ToBet等。按當時18元人民幣的價格計算,損失超過500萬人民幣。期間BetDice通過鏈金術平臺發出多次公告,一度造成恐慌。
與此同時,慢霧安全團隊對交易所和中心化錢包給出了暫時性的方案。此刻,攻擊手法依舊是一個謎團。那么,攻擊手段究竟是怎樣的呢?在進行攻擊回顧之前,需要先了解一點技術背景。
技術背景
1、我們知道EOS采用的共識算法是DPOS算法,采用的是21個超級節點輪流出塊的方式。除了21個超級節點外的其他全節點,并沒有出塊的權限。起到的作用是將收到的交易廣播出去,然后超級節點將其進行打包。
說到這里,很容易看出,如果一筆交易是發給除了超級節點外的其他全節點,這筆交易會經歷兩個過程。首先,這筆交易先被全節點接收,然后交易再被節點廣播出去進行打包。而一筆交易是需要超級節點中超過2/31的節點進行確認之后才是不可回滾的,也就是不可逆的。
這個過程大概需要3分鐘左右,也就是說,交易發到除了超級節點外的全節點的時候,由于全節點沒有打包的權利,此時此刻交易仍然處于可逆狀態。這是一個核心關鍵點。
慢霧:從Multichain流出的資金總額高達2.65億美元,分布在9條鏈:金色財經報道,自7月7日以來,從 Multichain 流出的資金總額高達 2.65 億美元,分布在 Ethereum、BNB Chain、Polygon、Avalanche、Arbitrum、Optimism、Fantom、Cronos、Moonbeam 鏈。其中 6582 萬美元已經被 Circle 和 Tether 凍結,1,296,990.99 ICE(約 162 萬美元) 被 Token 發行方 Burn。流出的資金中,包括:
1)從 Multichain: Old BSC Bridge 轉出的 USDT;
2)從 Multichain: Fantom Bridge 轉出的 USDC、DAI、LINK、UNIDX、USDT、WOO、ICE、CRV、YFI、TUSD、WETH、WBTC;
3)從 Anyswap: Bridge Fantom 轉出的 BIFI;
4)從 Multichain: Moonriver Bridge 轉出的 USDC、USDT、DAI、WBTC;
5)從 MultiChain: Doge Bridge 轉出的 USDC;
6)從 Multichain: Executor 轉出的 DAI、USDC、BTCB、WBTC、WETH、Dai.e、WBTC.e、Bridged USDC、BTC、fUSDT、ETH 等;
7)從被 Etherscan 標記為 Fake_Phishing183873 的 0xe1910...49c53 轉出的 WBTC、USDT、ETH,同時我們認為該標記(Fake Phishing183873)或許是 Etherscan 上的虛假標記,地址可能以前屬于 Multichain 官方賬戶。[2023/7/11 10:48:30]
2、每一個bp,都可以在自己的節點的config.ini文件內進行黑名單的配置,在黑名單中的帳號是不能進行交易的,也就是說無論怎樣,黑名單的交易都會被回滾。
慢霧:跨鏈互操作協議Nomad橋攻擊事件簡析:金色財經消息,據慢霧區消息,跨鏈互操作協議Nomad橋遭受黑客攻擊,導致資金被非預期的取出。慢霧安全團隊分析如下:
1. 在Nomad的Replica合約中,用戶可以通過send函數發起跨鏈交易,并在目標鏈上通過process函數進行執行。在進行process操作時會通過acceptableRoot檢查用戶提交的消息必須屬于是可接受的根,其會在prove中被設置。因此用戶必須提交有效的消息才可進行操作。
2. 項目方在進行Replica合約部署初始化時,先將可信根設置為0,隨后又通過update函數對可信根設置為正常非0數據。Replica合約中會通過confirmAt映射保存可信根開始生效的時間以便在acceptableRoot中檢查消息根是否有效。但在update新根時卻并未將舊的根的confirmAt設置為0,這將導致雖然合約中可信根改變了但舊的根仍然在生效狀態。
3. 因此攻擊者可以直接構造任意消息,由于未經過prove因此此消息映射返回的根是0,而項目方由于在初始化時將0設置為可信根且其并未隨著可信根的修改而失效,導致了攻擊者任意構造的消息可以正常執行,從而竊取Nomad橋的資產。
綜上,本次攻擊是由于Nomad橋Replica合約在初始化時可信根被設置為0x0,且在進行可信根修改時并未將舊根失效,導致了攻擊可以構造任意消息對橋進行資金竊取。[2022/8/2 2:52:59]
黑名單配置路徑:
慢霧: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]
MacOS:
~/Library/ApplicationSupport/eosio/nodeos/config/config.ini
Linux:
~/.local/share/eosio/nodeos/config/config.ini
配置方法:將config.ini文件內的actor-blacklist填入黑名單帳號,如下圖中,將attacker這個帳號作為黑名單帳號。
動態 | 慢霧:2020年加密貨幣勒索蠕蟲已勒索到 8 筆比特幣:慢霧科技反洗錢(AML)系統監測:世界最早的知名加密貨幣勒索蠕蟲 WannaCry 還在網絡空間中茍延殘喘,通過對其三個傳播版本的行為分析,其中兩個最后一次勒索收到的比特幣分別是 2019-04-22 0.0584 枚,2019-09-01 0.03011781 枚,且 2019 年僅發生一次,另外一個 2020 還在活躍,2020 開始已經勒索收到 8 筆比特幣支付,但額度都很低 0.0001-0.0002 枚之間。這三個傳播版本第一次發生的比特幣收益都是在 2017-05-12,總收益比特幣 54.43334953 枚。雖然收益很少,但 WannaCry 可以被認為是加密貨幣歷史上勒索作惡的鼻主蠕蟲,其傳播核心是 2017-04-13 NSA 方程式組織被 ShdowBrokers(影子經紀人) 泄露第三批網絡軍火里的“永恒之藍”(EternalBlue)漏洞,其成功的全球影響力且匿名性為之后的一系列勒索蠕蟲(如 GandCrab)帶來了巨大促進。[2020/2/23]
了解了以上的知識點之后,我們就可以進行整個攻擊事件的回顧了。
動態 | 慢霧: 警惕利用EOS及EOS上Token的提幣功能惡意挖礦:近期由于EIDOS空投導致EOS主網CPU資源十分緊張,有攻擊者開始利用交易所/DApp提幣功能惡意挖礦,請交易所/DApp在處理EOS及EOS上Token的提幣時,注意檢查用戶提幣地址是否是合約賬號,建議暫時先禁止提幣到合約賬號,避免被攻擊導致平臺提幣錢包的CPU資源被惡意消耗。同時,需要注意部分交易所的EOS充值錢包地址也是合約賬號,需要設置白名單避免影響正常用戶的提幣操作。[2019/11/6]
攻擊回顧
跟蹤攻擊者的其中一個攻擊帳號,發現帳號合約內只有一個transfer函數
同時,我們可以通過復盤這個帳號的所有交易記錄發現,這個帳號只有開獎記錄,而沒有下注記錄,看起來就好像項目方故意給這個帳號進行開獎一樣。然而事實上并非如此。那為什么會出現這樣的情況呢?這就需要上面的技術背景的知識了。以下是詳細的攻擊手法:
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被盜過程,背后是其架構設計缺陷?
2019年5月24日,在香港中文大學的會議室里,Fcoin發布了未來金融基礎設施的FT公鏈,此時,距離Fcoin上線推出交易即挖礦模式已滿一周年.
1900/1/1 0:00:00尊敬的用戶: Bibox支持為FOR持有者發放EFOR糖果,詳情如下:1.Bibox將根據官方空投給平臺的總量,以約定比例空投,您無需進行任何操作,即可獲得糖果.
1900/1/1 0:00:00尊敬的用戶: K網國際站將于新加坡時間2019年5月27日上線WB。計劃于5月26日10:00開啟WB的充提幣服務,5月27日10:00正式開啟交易.
1900/1/1 0:00:00據IMEOS報道,在彭博社文章中有提到B1持有14萬比特幣,有成員在電報群提問為什么要持有14萬比特幣。BM回應到應該沒人會把所有資金都放在銀行.
1900/1/1 0:00:005月26日,易到用車官方微博發布信息稱,服務器凌晨遭到連續攻擊,因此給用戶使用帶來嚴重的影響,攻擊導致易到核心數據被加密,服務器宕機。此外,攻擊者索要巨額的比特幣相要挾.
1900/1/1 0:00:00火星財經APP一線報道,5月24日,由FT公鏈團隊、共識實驗室聯合主辦的“FT公鏈及生態發表會·暨FCoin一周年社區代表大會”在香港舉行.
1900/1/1 0:00:00