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