一种全新的硬件钱包攻击方式——费用超付攻击 | 号精选

撰文 | Cobo金库大掌柜

上周(2020年6月3日),海外比特币社区爆出了一个波及所有硬件钱包新型攻击形式——费用超付攻击(Fee Attacks),这种攻击仅限于隔离见证(SegWit)地址。发现这个攻击的是来自英国的一位少年黑客Saleem Rashid,他也是第一个找到 Ledger 的严重漏洞并攻击成功的黑客。

大掌柜和Cobo金库产品技术团队在攻击爆出的当天就及时作出了反应,并提出了我们的解决方案。该解决方案将会在6月17日发布的最新固件升级包V1.2.0中覆盖。

新型攻击

新型攻击

这篇文章会详细说明费用超付攻击的原理,以及Cobo金库的对应解决方案。国内其他硬件钱包厂商可以参考我们的解决方案,尽快修复漏洞。

阐述具体的攻击原理之前,先强调两个点:

  • 这个攻击会波及所有硬件钱包的原因,不是硬件钱包本身的设计缺陷,而是由隔离见证(SegWit)的天然特性所决定的。
  • 这个攻击在理论上是可行的,但是实操中黑客大概率不会实施这个攻击手段(敲重点,只是大概率不会实施,不代表不会实施)。因为攻击成功后的BTC,很难直接落进黑客的口袋。

大家知道,硬件钱包是一个脱网设备,它依赖配套App构建交易(比如Ledger的Ledger Live,以及Trezor的网页App),并且把待签名交易通过USB/蓝牙/二维码发送到硬件钱包,然后用硬件钱包脱网保存的私钥进行签名。所有硬件钱包的基本运作原理都是如此。

新型攻击▲ 硬件钱包的基本运作原理

如果你使用的是一个隔离见证(SegWit)地址,当你把待签名交易从配套App发往硬件钱包进行签名时,会有两个由隔离见证(SegWit)的天然特性所决定的特点

  • 待签名交易包含的所有UTXO不会带上其前一笔交易的完整信息。也就是说,所有UTXO的真实余额数据,硬件钱包是没有能力做检查的。
  • 签名过程中,会对每一个UTXO分别进行签名。

基于这两个隔离见证(SegWit)的特点,费用超付攻击的具体攻击路径如下:

1. 被攻击者的某一隔离见证地址有两个UTXO,UTXO A的余额是15 BTC,UTXO B的余额是20 BTC。

2. 被攻击者要发送一笔20 BTC的交易,手续费是0.000001 BTC。正常情况下的交易信息如下所示:

新型攻击

3. 攻击者篡改了配套App,发送了第一笔篡改交易给硬件钱包签名。这笔交易中,input 1来自于UTXO A,15 BTC,input 2来自于UTXO B,但不是20 BTC而是5.000001 BTC。此时由于隔离见证(SegWit)的天然特性,硬件钱包无法识别input 2是不合法的input(因为没有UTXO B的前一笔交易的所有信息,从而无法判断UTXO B的真实余额),并完成了对input 1和input 2的分别签名,并传到被篡改的配套App。交易信息如下:

新型攻击

4. 被篡改的配套App弹出一个消息——签名有误,请重新用硬件钱包进行签名。此时,被篡改配套App向硬件钱包发送了第二笔篡改交易。这笔交易中,input 3来自于UTXO A,0.000001 BTC,input 4来自于UTXO B,20 BTC。此时,input 3是一笔不合法的input,但是硬件钱包依旧无法识别,并分别对input 3和input 4进行了签名,并传到被篡改的配套App。(为方便叙述和区分,这里把第二笔篡改交易的input序号顺位为3,4)交易信息如下:

新型攻击

5. 被篡改的配套App将input 1和input 4这两个合法的签名合并,作为一笔新的交易发送了出去。交易信息如下:

新型攻击

6. 此时,用户花费了UTXO A的15 BTC和UTXO B的20 BTC,向目标地址发送了20 BTC,消耗了15 BTC的手续费

我们从攻击路径中可总结出,攻击者实施费用超付攻击的必要条件:两笔篡改交易的output必须与攻击者最终广播交易的output保持一致,合法的两笔input才能被合并成一笔合法交易,以此来实现费用超付攻击。

但是,黑客要从这个攻击中获利,就变得非常困难。因为正常情况下,这多出来的15 BTC的手续费,会通过矿池分发到矿工的手里。如果黑客要通过成功挖出一个块来独吞这15 BTC,需要进行以下操作:

  1. 黑客拿到签完名的交易,不发送给mempool,自己掌握这个交易并尝试挖出一个区块。
  2. 假设黑客使用的是蚂蚁 S19 Pro矿机,每台矿机的算力是 110 TH/s,当前全网算力是105 EH/s。
  3. 由于受害者可能会察觉问题,所以假定黑客要在24小时内挖出这个区块并将手续费15 BTC的这个交易打包进去。那么,黑客需要购买约6600台蚂蚁 S19 Pro矿机(官方售价是20770元/台)。
  4. 大家可以自行计算这里的攻击成本。
  5. 如果考虑黑客和大矿工甚至矿池合谋,攻击成本会有所降低,但依旧非常高。何况24小时是个非常非常保守的估计,可能大部分用户几个小时甚至一个小时内就会发现问题。

海外大神级的硬件黑客LazyNinja(也是Cobo金库的内测用户之一),提出了另一种攻击路径。简单来说就是黑客握着高手续费的交易不进mempool,然后向受害者勒索(转为Ransom Attack)。同时,黑客会监控mempool,一旦发现受害者自己用同样的UTXO再发一笔交易的话,就立即把自己手里的交易发到mempool,矿工会优先选择巨额手续费的交易,从而让用户遭受损失。这样的攻击路径会降低一定的成本,但依旧会比较难以实施。

针对这个攻击,Trezor在三个月前就已开始调研,直至最近发布了新固件,其解决方案是:所有隔离见证(SegWit)地址的交易,全部附带上对应UTXO的前一笔交易的所有信息。但这样的方案又引出两个问题:

  • 隔离见证(SegWit)的优势被削弱了。
  • Trezor硬件钱包现在几乎与所有第三方钱包的适配都出了问题(这也是Trezor在这次事件中广受诟病的一点)。

针对这个攻击的特性,Cobo金库使用了另一种解决方案:

前面提到,黑客的攻击路径中,必须要向硬件钱包发送两笔output完全相同的交易。在Cobo金库硬件钱包端,可以记录用户的签名记录,然后直接禁止用户签第二笔output完全相同的交易并给出相关提醒。如果用户由于种种原因,的确是想重新签名一笔交易,这种情况下,input和output和前一笔交易应是完全一致的,说明未发生手续费攻击,Cobo金库则会放行这笔签名。

新型攻击

这个解决方案最大的优势在于,各个第三方钱包的兼容性不会有任何问题。当然,如果第三方钱包(比如Electrum)未来采用Trezor的解决方案,Cobo金库也会采用完全一样的方案。

从一个更高的维度来看这个解决方案,一定程度上,Cobo金库扮演了一个交易签名风控的角色,这也可能是硬件钱包未来的一个重要发展方向。

参考链接:

[1]https://medium.com/cobo-vault/a-potential-solution-to-fee-attacks-cfb90defe1ce

[2]https://blog.trezor.io/details-of-firmware-updates-for-trezor-one-version-1-9-1-and-trezor-model-t-version-2-3-1-1eba8f60f2dd

[3]https://twitter.com/FreedomIsntSafe/status/1268572922911887360​​​​​​

转载声明:本文 由CoinON抓取收录,观点仅代表作者本人,不代表CoinON资讯立场,CoinON不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。若以此作为投资依据,请自行承担全部责任。

声明:图文来源于网络,如有侵权请联系删除

风险提示:投资有风险,入市需谨慎。本资讯不作为投资理财建议。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2020年7月9日 上午12:19
下一篇 2020年7月9日 上午8:19

相关推荐

一种全新的硬件钱包攻击方式——费用超付攻击 | 号精选

星期四 2020-07-09 7:19:15

撰文 | Cobo金库大掌柜

上周(2020年6月3日),海外比特币社区爆出了一个波及所有硬件钱包新型攻击形式——费用超付攻击(Fee Attacks),这种攻击仅限于隔离见证(SegWit)地址。发现这个攻击的是来自英国的一位少年黑客Saleem Rashid,他也是第一个找到 Ledger 的严重漏洞并攻击成功的黑客。

大掌柜和Cobo金库产品技术团队在攻击爆出的当天就及时作出了反应,并提出了我们的解决方案。该解决方案将会在6月17日发布的最新固件升级包V1.2.0中覆盖。

新型攻击

新型攻击

这篇文章会详细说明费用超付攻击的原理,以及Cobo金库的对应解决方案。国内其他硬件钱包厂商可以参考我们的解决方案,尽快修复漏洞。

阐述具体的攻击原理之前,先强调两个点:

  • 这个攻击会波及所有硬件钱包的原因,不是硬件钱包本身的设计缺陷,而是由隔离见证(SegWit)的天然特性所决定的。
  • 这个攻击在理论上是可行的,但是实操中黑客大概率不会实施这个攻击手段(敲重点,只是大概率不会实施,不代表不会实施)。因为攻击成功后的BTC,很难直接落进黑客的口袋。

大家知道,硬件钱包是一个脱网设备,它依赖配套App构建交易(比如Ledger的Ledger Live,以及Trezor的网页App),并且把待签名交易通过USB/蓝牙/二维码发送到硬件钱包,然后用硬件钱包脱网保存的私钥进行签名。所有硬件钱包的基本运作原理都是如此。

新型攻击▲ 硬件钱包的基本运作原理

如果你使用的是一个隔离见证(SegWit)地址,当你把待签名交易从配套App发往硬件钱包进行签名时,会有两个由隔离见证(SegWit)的天然特性所决定的特点

  • 待签名交易包含的所有UTXO不会带上其前一笔交易的完整信息。也就是说,所有UTXO的真实余额数据,硬件钱包是没有能力做检查的。
  • 签名过程中,会对每一个UTXO分别进行签名。

基于这两个隔离见证(SegWit)的特点,费用超付攻击的具体攻击路径如下:

1. 被攻击者的某一隔离见证地址有两个UTXO,UTXO A的余额是15 BTC,UTXO B的余额是20 BTC。

2. 被攻击者要发送一笔20 BTC的交易,手续费是0.000001 BTC。正常情况下的交易信息如下所示:

新型攻击

3. 攻击者篡改了配套App,发送了第一笔篡改交易给硬件钱包签名。这笔交易中,input 1来自于UTXO A,15 BTC,input 2来自于UTXO B,但不是20 BTC而是5.000001 BTC。此时由于隔离见证(SegWit)的天然特性,硬件钱包无法识别input 2是不合法的input(因为没有UTXO B的前一笔交易的所有信息,从而无法判断UTXO B的真实余额),并完成了对input 1和input 2的分别签名,并传到被篡改的配套App。交易信息如下:

新型攻击

4. 被篡改的配套App弹出一个消息——签名有误,请重新用硬件钱包进行签名。此时,被篡改配套App向硬件钱包发送了第二笔篡改交易。这笔交易中,input 3来自于UTXO A,0.000001 BTC,input 4来自于UTXO B,20 BTC。此时,input 3是一笔不合法的input,但是硬件钱包依旧无法识别,并分别对input 3和input 4进行了签名,并传到被篡改的配套App。(为方便叙述和区分,这里把第二笔篡改交易的input序号顺位为3,4)交易信息如下:

新型攻击

5. 被篡改的配套App将input 1和input 4这两个合法的签名合并,作为一笔新的交易发送了出去。交易信息如下:

新型攻击

6. 此时,用户花费了UTXO A的15 BTC和UTXO B的20 BTC,向目标地址发送了20 BTC,消耗了15 BTC的手续费

我们从攻击路径中可总结出,攻击者实施费用超付攻击的必要条件:两笔篡改交易的output必须与攻击者最终广播交易的output保持一致,合法的两笔input才能被合并成一笔合法交易,以此来实现费用超付攻击。

但是,黑客要从这个攻击中获利,就变得非常困难。因为正常情况下,这多出来的15 BTC的手续费,会通过矿池分发到矿工的手里。如果黑客要通过成功挖出一个块来独吞这15 BTC,需要进行以下操作:

  1. 黑客拿到签完名的交易,不发送给mempool,自己掌握这个交易并尝试挖出一个区块。
  2. 假设黑客使用的是蚂蚁 S19 Pro矿机,每台矿机的算力是 110 TH/s,当前全网算力是105 EH/s。
  3. 由于受害者可能会察觉问题,所以假定黑客要在24小时内挖出这个区块并将手续费15 BTC的这个交易打包进去。那么,黑客需要购买约6600台蚂蚁 S19 Pro矿机(官方售价是20770元/台)。
  4. 大家可以自行计算这里的攻击成本。
  5. 如果考虑黑客和大矿工甚至矿池合谋,攻击成本会有所降低,但依旧非常高。何况24小时是个非常非常保守的估计,可能大部分用户几个小时甚至一个小时内就会发现问题。

海外大神级的硬件黑客LazyNinja(也是Cobo金库的内测用户之一),提出了另一种攻击路径。简单来说就是黑客握着高手续费的交易不进mempool,然后向受害者勒索(转为Ransom Attack)。同时,黑客会监控mempool,一旦发现受害者自己用同样的UTXO再发一笔交易的话,就立即把自己手里的交易发到mempool,矿工会优先选择巨额手续费的交易,从而让用户遭受损失。这样的攻击路径会降低一定的成本,但依旧会比较难以实施。

针对这个攻击,Trezor在三个月前就已开始调研,直至最近发布了新固件,其解决方案是:所有隔离见证(SegWit)地址的交易,全部附带上对应UTXO的前一笔交易的所有信息。但这样的方案又引出两个问题:

  • 隔离见证(SegWit)的优势被削弱了。
  • Trezor硬件钱包现在几乎与所有第三方钱包的适配都出了问题(这也是Trezor在这次事件中广受诟病的一点)。

针对这个攻击的特性,Cobo金库使用了另一种解决方案:

前面提到,黑客的攻击路径中,必须要向硬件钱包发送两笔output完全相同的交易。在Cobo金库硬件钱包端,可以记录用户的签名记录,然后直接禁止用户签第二笔output完全相同的交易并给出相关提醒。如果用户由于种种原因,的确是想重新签名一笔交易,这种情况下,input和output和前一笔交易应是完全一致的,说明未发生手续费攻击,Cobo金库则会放行这笔签名。

新型攻击

这个解决方案最大的优势在于,各个第三方钱包的兼容性不会有任何问题。当然,如果第三方钱包(比如Electrum)未来采用Trezor的解决方案,Cobo金库也会采用完全一样的方案。

从一个更高的维度来看这个解决方案,一定程度上,Cobo金库扮演了一个交易签名风控的角色,这也可能是硬件钱包未来的一个重要发展方向。

参考链接:

[1]https://medium.com/cobo-vault/a-potential-solution-to-fee-attacks-cfb90defe1ce

[2]https://blog.trezor.io/details-of-firmware-updates-for-trezor-one-version-1-9-1-and-trezor-model-t-version-2-3-1-1eba8f60f2dd

[3]https://twitter.com/FreedomIsntSafe/status/1268572922911887360​​​​​​