比特币也是黑暗森林:揭秘BTC内存池中的恶意机器人
作者:Tal Be'ery,ZenGo联创兼首席技术官;翻译:金色财经xiaozou?
研究人员揭露了恶意机器人监控比特币区块链中是否存在不良随机性地址,并立即利用它们,窃取了数百万美元——其中一次发生在2023年11月23日(参阅金色财经此前报道“比特币链上某单笔交易费用达83枚BTC”)。
这是一个恐怖的故事。
作为ZengoX正在进行的区块链安全研究的一部分,我们调查了最近发生的比特币失窃案件,在本文发表时,有139枚比特币(约550万美元)被盗。我们未曾料想,此举我们开启了比特币黑暗森林的潘多拉魔盒。
2020年,Paradigm研究员Dan Robinson和Georgios Konstantopoulos发表了他们开创性的有较大影响力的博文,题为“以太坊是一片黑暗森林”(Ethereum is a Dark forest),揭示了潜伏在以太坊内存池不为人知的机器人,它们监控待处理交易,并试图利用这些交易创造的盈利机会。
今天,我们将揭示这种现象不仅仅存在于以太坊,也存在于比特币(可能很多其他区块链也是如此)。
11月23日,一笔比特币交易引起了比特币分析师的注意。这笔交易创造了付费记录,支付了300多万美元(83.65枚BTC)的矿工费来进行价值200万美元(55.77枚BTC)的比特币转账。
虽然对次过高费用(通常费用不到10美元)有一个比较直接的解释是将其归咎于一些手动输入错误,但很快就有用户就在X(前Twitter)上声称他们是最初所有者,不知怎么被黑客攻击了。
来源:X/Twitter
X账户所有者通过使用相关私钥签名,用加密方式证明了他们实际上该比特币地址的所有者。
当我们开始深入调查该笔超额收费交易时,发现了一些更加微妙但非常有趣的事。
带注释的交易 来源:mempool.space
上图给出了一些有趣的见解:
此外,另一位X用户注意到,最初有多个超额收费候选交易,通过使用上述RBF方案支付更高的费用来彼此替换(在浏览器中不再可见,因为被替换的交易信息在一段时间后被清除了)。
根据这些数据,可以有多种可能性来解释该超额收费交易:
假设1:最初的所有者因为他们的手动输入错误而支付了过多的费用。所有者在X上的宣称只是为了挽回面子,因为声称自己是被黑客攻击了而不是因为笨拙的操作更容易接受。注意:这么说似乎并不合理,因为这笔交易是在上一笔交易仍在内存池中(参见上面的CPFP部分)时发送的,这需要具有技术专长并且清楚确切的费用(正好为60),这不符合手动输入错误和一般的笨拙操作的理论。
假设2:最初所有者的私钥被黑客攻击。攻击者泄露密钥并等待所有者将资金发送到此地址。我们的看法是:这也不太可能,因为交易是受RBF竞争的,这意味着已有多方知晓这个私钥。
假设3:最初所有者的私钥是可预测的。私钥是以某种可预测的方式创建的,例如通过对(“Brian-wallet”)密码(passphrase)进行哈希计算或从一个过小的数据集(32位)中选择密钥。
攻击者生成一组所有这些可预测的私钥及其相应的地址,每当向这些地址中的任何一个地址发送资金的交易出现在内存池中,他们就会立即争先恐后地发送后续交易,将这些资金转移到他们的地址上。
最后一个假设可以解释一切:攻击者需要即时响应和超额费用来击败其他攻击者。禁用RBF是攻击者采取的另一种机制,以增加击败其他方的几率。
这一假设也与超额收费交易接收方的地址的历史行为相一致。流入其中的许多交易都具有这种高费用交易的相同特征(尽管不像这种百万美元交易那么有利可图)。
攻击者的行为是一致的(来源:X/Twitter)
这个结论无疑是一个非常可怕和大胆的解释,需要进一步的证据才行。
为了验证我们的假设,我们决定生成一个可预测的私钥,向它发送资金,并观察结果。如果我们的假设是正确的,那么它应该立即被盗走。为了创建一个非随机私钥并获得结果地址,我们使用了的流行web工具Ian Cloeman(过去一直非常好用)。
将私钥设置为“1”(注意生成的助记词适当地主要由 0 索引词“abandon”组成)
使用该工具,我们将私钥设置为“1”,并获得结果地址:bc1q4jgysxyym8yvp6khka878njuh8dem4l7mneyefz。为了排除其他可能的解释,我们核实了过去该地址没有被使用过。
然后我们向这个地址发送了一笔10美元的交易,并发现,正如所料,它立即被一笔超额收费交易(5美元,或50%)重定向到了另一个地址!
此外,我们还看到了多方之间的激烈竞争,试图使用RBF以更高的费用赢得这笔交易,几乎高达交易金额的99%,但都因为第一笔交易禁用RBF而失败。
4笔RBF交易,最后一笔交易费用为9.87美元,总费用为10美元
如果用户的助记词或私钥是以可预测的方式生成的,或者具有不良的随机性,那么一旦攻击者知道了可预测生成的确切细节,就会利用其实施攻击。
加密钱包私钥生成安全性的话题在很大程度上被大多数用户忽视了,但事实证明这是一个一直困扰钱包领域并造成巨大损失的问题。
由于私钥不能由用户自己生成,也不能证明是随机的,因此用户没有办法验证其密钥的随机性,并且必须信任他们的钱包,别无他法。
这个问题是依赖单方钱包这一更大核心问题的另一方面表现。为了解决这个核心问题以及随机性问题,我们必须接受这样一个事实,即用户需要信任一些外部实体,并转向一个更可靠的架构,通过增加参与方的数量来尽力减少对各相关方的信任依赖。
添加多方减少了对每一方所需的信任,并使系统更加健壮。