該攻擊不會導致交易所任何資金損失,但是會鎖定了交易所 XMR 流動性。

原文標題:《門羅幣 (XMR) 鎖定轉賬攻擊細節分析》
作者:ISME@SlowMist team

近日據慢霧區情報顯示,針對門羅幣 (XMR) 轉賬鎖定攻擊在多個交易所出現,慢霧安全團隊在收到情報第一時間進行分析跟進,本着負責任披露的原則我們第一時間在慢霧區進行了預警併爲我們所服務的客戶進行了及時的情報同步以及協助檢測和修復。如有其他需要提供驗證和檢測服務歡迎聯繫慢霧安全團隊。

慢霧:門羅幣鎖定轉賬攻擊可鎖定交易所 XMR 流動性,但不會導致資金損失

攻擊步驟

0x01: 通過 monero-wallet-cli 輸入密碼登錄錢包

0x02: 通過命令發送鎖定交易

0x03:轉賬完成,交易所未進行鎖定交易 (locked_transfer) 檢測,接收到被設置鎖定區塊高度才能解鎖的幣 (可以理解爲鎖定了指定時間)。

0x04: 惡意用戶立即提幣走人,留下交易所一臉懵逼。

造成影響

首先該攻擊不會導致交易所任何資金損失,但是會鎖定了交易所 XMR 流動性。

極端情況舉例:如果交易所收到的都是需要鎖定一年甚至更多年的門羅幣則會導致一年內用戶來提幣的時候無幣可以提 (只能去購買額外的幣來給用戶提取)。

關於 locked_transfer 命令

monero-wallet-cli 關於 locked_transfer 命令解釋如下:

locked_transfer [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] (<URI> | <addr> <amount>) <lockblocks> [<payment_id (obsolete)>]

轉賬命令:
locked_transfer FromAddress ToAddress 0.0101 20000

FromAddress: 發送地址 (一般爲攻擊者錢包地址)
ToAddress: 接收地址 (一般爲交易所錢包地址)
0.0101: 爲轉賬金額
20000: 爲鎖定區塊數

如何防護

一般交易所會通過 get_transfers RPC 接口來解析 XMR 交易檢測充值是否到賬,在進行解析的時候只需要對 unlock_time 字段進行判斷是否大於 0 則可以進行有效檢測。

注:unlock_time 爲 int 類型,如果大於 0 則意味着該交易有鎖定區塊,爲惡意交易可以不予確認到賬。爲了避免充值不予到賬損害「用戶」利益可以進行另外一種處理:判斷鎖定區塊是否到達,如果未到達則不予入賬。

所有受影響 RPC 接口

(1) get_transfer (2) get_bulk_payments (3) show_transfer (4) get_payments

同理:在其他地方使用瞭如上四個接口的地方也需要對 unlock_time 字段進行判斷是否大於 0 ,大於 0 則不予充值到賬。

該問題之前在 HackerOne 也有被白帽子提過漏洞賞金,其中門羅官方 回覆

慢霧:門羅幣鎖定轉賬攻擊可鎖定交易所 XMR 流動性,但不會導致資金損失

附:官方文檔 摘錄

來源鏈接:mp.weixin.qq.com