近日據(jù)慢霧區(qū)情報(bào)顯示,針對門羅幣(XMR)轉(zhuǎn)賬鎖定攻擊在多個交易所出現(xiàn),慢霧安全團(tuán)隊(duì)在收到情報(bào)第一時間進(jìn)行分析跟進(jìn),本著負(fù)責(zé)任披露的原
近日據(jù)慢霧區(qū)情報(bào)顯示,針對門羅幣(XMR)轉(zhuǎn)賬鎖定攻擊在多個交易所出現(xiàn),慢霧安全團(tuán)隊(duì)在收到情報(bào)第一時間進(jìn)行分析跟進(jìn),本著負(fù)責(zé)任披露的原則我們第一時間在慢霧區(qū)進(jìn)行了預(yù)警并為我們所服務(wù)的客戶進(jìn)行了及時的情報(bào)同步以及協(xié)助檢測和修復(fù)。如有其他需要提供驗(yàn)證和檢測服務(wù)歡迎聯(lián)系慢霧安全團(tuán)隊(duì)。
攻擊步驟
0x01:通過 monero-wallet-cli 輸入密碼登錄錢包
0x02:通過命令發(fā)送鎖定交易
0x03:轉(zhuǎn)賬完成,交易所未進(jìn)行鎖定交易(locked_transfer)檢測,接收到被設(shè)置鎖定區(qū)塊高度才能解鎖的幣(可以理解為鎖定了指定時間)。
0x04:惡意用戶立即提幣走人,留下交易所一臉懵逼。
造成影響
首先該攻擊不會導(dǎo)致交易所任何資金損失,但是會鎖定了交易所 XMR 流動性。
極端情況舉例:如果交易所收到的都是需要鎖定一年甚至更多年的門羅幣則會導(dǎo)致一年內(nèi)用戶來提幣的時候無幣可以提(只能去購買額外的幣來給用戶提取)。
關(guān)于 locked_transfer 命令
monero-wallet-cli 關(guān)于 locked_transfer 命令解釋如下:
locked_transfer [index=
轉(zhuǎn)賬命令:
locked_transfer FromAddress ToAddress 0.0101 20000
FromAddress:發(fā)送地址(一般為攻擊者錢包地址)
ToAddress:接收地址(一般為交易所錢包地址)
0.0101:為轉(zhuǎn)賬金額
20000:為鎖定區(qū)塊數(shù)
如何防護(hù)
一般交易所會通過 get_transfers RPC 接口來解析 XMR 交易檢測充值是否到賬,在進(jìn)行解析的時候只需要對 unlock_time 字段進(jìn)行判斷是否大于 0 則可以進(jìn)行有效檢測。
注:unlock_time 為 int 類型,如果大于 0 則意味著該交易有鎖定區(qū)塊,為惡意交易可以不予確認(rèn)到賬。為了避免充值不予到賬損害“用戶”利益可以進(jìn)行另外一種處理:判斷鎖定區(qū)塊是否到達(dá),如果未到達(dá)則不予入賬。
所有受影響 RPC 接口
(1)get_transfer
(2)get_bulk_payments
(3)show_transfer
(4)get_payments
同理:在其他地方使用了如上四個接口的地方也需要對 unlock_time 字段進(jìn)行判斷是否大于 0 ,大于 0 則不予充值到賬。(慢霧安全團(tuán)隊(duì))
該問題之前在 HackerOne 也有被白帽子提過漏洞賞金,其中門羅官方回復(fù):
關(guān)鍵詞: 門羅幣轉(zhuǎn)賬 攻擊 資金損失