曲速未來:充一贈一的假充值漏洞介紹區塊鏈

曲速未來安全區 2018-08-06 22:05
分享到:
導讀

曲速區:今年6月11就已經有用戶發現門羅幣存在假充值漏洞,并在門羅幣的GitHub倉庫上提交了相關issue。

事件介紹

在6月28日晚,有安全機構發布了一條針對USDT的預警及漏洞分析,同時提醒各大交易所盡快暫停有關USDT的充值功能,并對自身的代碼進行檢查,查看是否存在邏輯缺陷。“假充值”是指用戶向交易所充值USDT時并不會損失自身的USDT,這些充值的USDT可以正常使用。

同時,在今年6月11就已經有用戶發現門羅幣存在假充值漏洞,并在門羅幣的GitHub倉庫上提交了相關issue。

漏洞介紹

USDT

攻擊對者利用交易所對USDT交易充值的判斷邏輯缺陷,惡意進行虛假轉賬牟取交易所的代幣。USDT自身是沒有問題的。

我們以Omniexplorer提供的素材為例。

通過一例無效交易來闡釋這個過程。

地址:1b5c80f487d2bf8b69e1bbba2b1979aacb1aca7a094c00bcb9abd85f9af738ea

(https://omniexplorer.info/search/1b5c80f487d2bf8b69e1bbba2b1979aacb1aca7a094c00bcb9abd85f9af738ea)

這筆無效的交易發生在Omniexplorer。 Omin采用的數字資產轉移的方法是Simple Send。

而他的記賬模型是基于地址的。通過地址查詢交易者余額并與交易發送的地址對比,余額小于發送的金額,這筆交易就會被標記為無效。

同時,對余額的檢驗是通過Omni  客戶端進行的,但Omni沒有 UTXO 機制,這也就導致了無效交易也能被廣播。

利用場景

1.用戶發起惡意 USDT 充值行為;

2.黑客繞過檢查系統生成惡意交易并廣播;

3.由比特幣區塊鏈(Omni core 錢包基于比特幣)確認交易;

4.交易所檢查交易數目(繞過了余額檢查);

5.交易完成;

6.?戶發起提幣。

門羅幣

首先我們先看一下官方發布的修復代碼

判讀一次交易的公共密鑰是否已經存在,若存在,則否定此次交易。

在沒有添加這段代碼前,門羅幣客戶端的show_transfers指令不會跳過重復的交易,重復的交易金額也會被計算出來。

也就是說,當攻擊者交易所的充值地址發送多條重復交易,若交易所校驗不嚴謹沒有檢測真實錢包收賬余額,僅僅通過show_transfers來確認用戶充值的話,便會出現假充值漏洞,導致交易所給用戶充值的余額和交易所自己實際收到的余額不符,攻擊者假充值成功后可以進行消費或提款。

利用場景

在門羅幣的開源代碼中插入利用代碼,然后編譯運行。

攻擊者在門羅幣的cryptonote_tx_utils.cpp文件的第354行中插入大量重復代碼。客戶端每次發起交易的時候便會向目標多發送3次重復交易,這樣便達到了利用該漏洞的目的。

總結

曲速區提醒:黑客只需要幾行代碼就可以完成假轉賬,這種漏洞的原因要歸于交易所沒有處理好邏輯漏洞。開發人員在代碼上線前應注意檢查,小心仔細。安全無小事。

交易 交易所 代碼 USDT 漏洞
分享到:

1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。


專題報道