By : yudan@慢霧安全團隊

前言

據鏈聞消息,加密錢包ZenGo 發布報告稱其在Ledger、BRD 和Edge 等主流加密貨幣錢包中發現了一個漏洞(命名為「BigSpender」)。該漏洞可能會使未確認的交易計入用戶的總餘額中,而此時,攻擊者可在交易確認之前撤銷該筆交易。攻擊者利用了比特幣協議中的一項費用替代「Replace-by-Fee」功能。該功能可通過支付更高的手續費來替換此前的一筆交易。攻擊者可以連續多次使用該功能進行BigSpender 攻擊。下面,慢霧安全團隊將基於此次事件分析比特幣協議RBF 特性對交易所和錢包所產生的影響。

什麼是RBF

RBF,全稱Replace-by-fee,是比特幣內存池中的一種協議,允許使用其他交易將未確認交易進行替換的方式,RBF 的方案主要有以下幾種:

1、Full RBF :使用更高的手續費替換前一筆交易

2、First-seen-safe RBF:初見替換,即替換交易本身的輸出金額必須大於等於被替換交易

3、Opt-in RBF:選擇性替換交易,通過追加手續費的形式將舊交易替換,節點可選擇開啟或關閉此功能

4、Delayed RBF:當舊交易首次被網絡中節點接收,如果在給定數量的區塊數之後,舊交易仍然未被打包,則允許新交易無條件地替換舊交易

目前Bitcoin Core 採用的是Opt-in RBF 的方案,即通過聲明一筆交易為可替換的形式,後續可使用其他交易替換這筆交易。關於Opt-in RBF 的詳細說明可參考Bitcoin Core 的說明https://bitcoincore.org/en/faq/optin_rbf/

如何利用RBF 進行攻擊

RBF 主要針對的是0 確認交易,即對內存池中的未確認交易進行替換,當交易所或錢包在處理0 確認的交易時,沒有正確處理交易相關的狀態時,就會導致雙花和假充值的問題,具體攻擊手法如下:

1、攻擊者發送一筆RBF 交易,輸出地址指向交易所或錢包,並支付低額手續費,防止交易過快被打包;

2、在交易所檢索到這筆0 確認的交易後,攻擊者立刻發送一筆替換交易,並將輸出地址改為攻擊者可控的其他地址,替換先前的發送給交易所或錢包的交易;

3、由於交易所或錢包在對0 確認交易的處理存在問題,沒有校驗交易是否為RBF 交易和交易的確認狀態,直接在未確認的情況下入賬RBF 交易,導致交易所或錢包被假充值、雙花、欺詐攻擊及對錢包進行DoS 攻擊;

攻擊流程圖如下:

目前,慢霧安全團隊對市面上的幾款去中心化的錢包進行測試,已在部分錢包中發現此類問題,並將問題同步給相應的項目方以及協助修復。

防禦方案

1、交易所或錢包應禁止採用0 確認的方式對比特幣充值進行入賬;

2、如需要對0 確認交易進行入賬,必須檢測該交易不能為RBF 交易,具體為交易Input 中的nSequence 字段值必須為0xffffff,任意未確認交易中包含非0xffffff 值的nSequence 應拒絕入賬;

3、檢查交易狀態,如檢查比特幣交易是否被打包,或已達到相應的確認數(如3 個);

4、錢包應展示對應的交易確認狀態,防止欺詐攻擊;

5、慢霧安全團隊已支持該攻擊的檢測,如錢包或交易所不確定自己的入賬方式是否存在問題,可聯繫慢霧安全團隊(team@slowmist.com)進行檢測。