比特币通胀漏洞与双花

[41] 比特币通胀漏洞与双花

2018年9月18日Bitcoin Core开发组发布了比特币客户端0.16.3版。官方博客解释称,新版本修复了一个可能导致客户端程序崩溃的漏洞(编号CVE-2018-17144),并强烈建议所有0.14.0~0.16.2的用户立即升级。

Bitcoin Core 0.16.3的更新通告(高亮背景是本文作者添加)

利用这个DoS(denial of service,拒绝服务攻击)漏洞可以让比特币网络的大部分节点短暂瘫痪,延迟出块时间,但是攻击者不会得到直接的好处,攻击成本也相当高,需要耗费能挖出一个区块的算力,放弃至少12.5 BTC的挖矿收益(目前价值八万多美金),生成一个特殊构造的区块才能奏效。受攻击的节点只要重启客户端,连接上非攻击者节点,比特币网络就能恢复运作。一旦挖出了有效的新块,先前的攻击即便失效。

然而事情并没有那么简单。

0.16.3版本同时修复了一个相关的、更严重的通货膨胀漏洞(编号也是CVE-2018-17144)。它能被用来增发BTC,突破两千一百万的总量上限,还可能导致比特币意外分叉。这是比特币自诞生后出现的第二个通胀漏洞(前一个是八年前修正的整数溢出问题CVE-2010-5139)。Core开发组为了减少负面效应,特意低调处理,在通告中只提了DoS的后果,同时迅速敦促各大矿池和相关公司更新软件,延迟了两天才对外披露了通胀漏洞的细节。0.15.x至0.16.2版的客户端都受此bug影响,会错误地接受一种包含双花交易的区块。

所谓“双花(double spend)”指的是重复使用同一笔余额(UTXO),未必只是复用一次。双花攻击的形式有很多种。最常被提及的类型是跨区块的。比如在区块甲中包含了从A到B的转账交易,在区块乙中却包含了与之冲突的从A到C的转账。即使区块甲先得到确认,也有可能在重组的过程中被区块乙取代,成为被作废的孤块(参阅

[9] 分叉、睡教与SegWit2X

)。这种跨区块双花攻击并不会影响流通货币的总量,因为主链任何时刻只可能包含甲乙区块中的一个。好比说你账户上还剩100元,却同时给两个人各开了100元的支票。他们会被暂时蒙在鼓里,但最终银行不可能兑现两张支票。

另一种罕见的双花形式是在同一个区块的同一个交易里多次引用同一笔未用余额。比如你原本拥有个价值1 BTC的UTXO,把它重复填写在交易的输入部分,然后转账到自己的另一个地址,就凭空构造出个价值2 BTC的UTXO,白赚1 BTC(不考虑交易费)。好比说你复印了一张100元的优惠券,连同原版一起给出,对方假如没注意到序列号一样就会蒙受损失。这种双花攻击在比特币历史上闻所未闻,因为正常情况下根本不可能得逞,从第一个版本开始的客户端就会检查交易输入,确保没有重复UTXO。然而2017年在Bitcoin Core 0.14版中加入的性能优化(PR 9049)忽略了一条代码路径,埋下了会引起程序崩溃的DoS漏洞。随后在0.15版的代码重构中,一条断言语句的微小改动酿成了允许同一条交易中复用UTXO的大错。(详细的代码分析可参阅Jimmy Song的文章https://medium.com/@jimmysong/bitcoin-core-bug-cve-2018-17144-an-analysis-f80d9d373362。)

这个漏洞理论上能破坏比特币的发行机制,造成不受限制的通货膨胀,乍一听颇为可怕,实际上却并不构成致命的危害。因为首先,非矿工用户广播的双花交易会被其他节点果断拒收,毫无危害。攻击者必须是矿工,并且要投入足够多的算力挖出一个包含双花交易的无效区块。广播全网后,0.14系列版本的节点会崩溃;更老版本和某些非Core客户端会拒绝承认区块;0.15至0.16.2版本的节点会接受它。发生这种混乱一定会立即引起社区的警觉和开发者的修补。如果发生分叉,大部分的节点必将抛弃包含双花交易的链,使攻击者花费高额成本生成的币无处可用。

从攻击者的角度看,直接利用漏洞进行双花攻击很可能会赔本。不过他们可以提前在衍生品市场里用高杠杆做空比特币期货,发动攻击后引起市场恐慌性抛售,逢低点平仓套利(参阅[25] BitMEX期货交易指南:入门篇)。这种操作也有风险,因为开发组、矿工和社区默契合作的话,大概率可以快速修复错误,币价未必会大跌。当然,另有一种可能是攻击者并不在乎短期的经济利益,只想整死比特币。这种政治性风险一直存在,而且有更廉价和有效的攻击手段,所以大概率犯不着搞双花攻击。

总而言之,CVE-2018-17144是比特币近几年来少见的严重安全漏洞,好在补丁和升级都很顺利,目前没有被人成功利用。它再次警醒我们,软件开发要做到滴水不漏有多么不易。区块链软件对安全性的要求又格外高。即便是以保守著称的Bitcoin Core开发组在代码审查、自动化测试方面还是颇有改进空间。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181003G1HN4F00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券