时间检查:劫持与比特币



在年度最流行单词的竞争中,“区块链”一词可能会成为IT领域的赢家。 尽管存在不健康的趋势将其主动引入任何地方-在医学,经济,物联网,养兔和做馅饼的过程中,加密货币仍然是区块链的主要范围。 众所周知:黑客的虚拟钱包-就像一只带酸奶油的猫。

在本文中,我们将基于处理比特币加密货币系统中块时间戳的漏洞来考虑“时间劫持”攻击,并尝试解释这种攻击的成因,但成功的实现并非如此。

PS:“时间”一词将有许多派生词。 很多

简而言之


Alex Boverman第一次写了有关Timejacking攻击的文章。 您可以在此处熟悉其出版物。 实质是什么:攻击利用了用于检查区块时间戳和比特币时间计数器的机制的漏洞。 攻击者操纵受害者节点的时间计数器之一,并创建一个“中毒”块。 受害者将丢弃此阻止,网络的其余部分将成功接受,请-我们挑了一把叉子! 整个网络使用在“中毒”之后建立的区块链,并且受害者认为具有重复的令牌消费(又称为双重支出)的替代链是有效的,其中没有出现“中毒”区块。

攻击分两个阶段进行。 为了更清楚一点,让我们分别讨论它们。

行动1.制造一支叉子并隔离受害者


攻击者需要生成“争用的苹果”-受害者将忽略的“中毒”块。 以同样的方式,受害人将丢弃其他被“中毒”的块,这些块将被顺序添加。

如何欺骗受害者并迫使他放弃正确的障碍?

每个块的标题都有一个时间戳,节点在验证过程中会检查该时间戳。 这个值应该落在一定范围内,我们将其称为一个临时窗口。 时间窗口范围如下图所示:


时间窗口有两个边界:

  • lower- t min ,等于经过验证的块之前的11个块的时间戳的中位数
  • 上限-等于网络时间t 0 + 2小时的值

验证该块的时间戳的值不是相对于该节点的系统时间,而是相对于其邻居的中值时间-网络时间(又称网络调整时间)。

如何考虑网络时间:

  • 建立新连接后,节点交换系统时间
  • 每个节点都会计算自己的系统时间与每个邻居的系统时间的偏差
  • 对于计算出的偏差,选择中值。
  • 本机系统时间+中位数偏差= 网络时间

这是计算网络时间的示例:


因此,攻击者可以通过与受害者连接足够多的邻居来宣布受害网络时间,从而操纵受害人网络时间的价值。 受害网络时间的值减小-已验证块的时间戳的允许值范围的上限减小。 但是,如果邻居的时间偏差超过70分钟 ,则在计算网络时间时将不会考虑他的时间。 因此,可以减少受害者的网络时间的最大值为70分钟。


因此,我们的“中毒”块是其时间戳应落入除受害方之外的所有网络节点的时间窗口中的块。 只有这样,整个网络才能成功接受它,并且修改了网络时间的受害者也将同样成功地丢弃它。 在下图中-受害人的时间窗口与其余节点的时间窗口。


请注意,由于NTP协议,我们可以假设对于大多数节点来说,系统时间是大致相同的,即每个节点的网络时间的值都接近于它们的系统时间。

结果,受害者与主网络隔离,并认为块的主链不正确,这将由“中毒”块中的其余节点构建。 同时,受害者会放心地接受攻击者为替代链产生的其他障碍。


第二幕:双花


在此阶段,攻击者会生成一条替代链,其中他添加了一个将令牌转移到受害者钱包的交易。 备用链块将发送给受害者。 在下图中-“中毒”块的时间戳值的范围。


受害者将接受此链,因为时间戳的值是由入侵者从他自己的时间窗口中选择的,其余节点将正确地忽略它-毕竟,它们已经从“中毒”块构建了链,该链比替代方法更长。 结果,受害者认为他收到了代币并寄出了货物。 并且主网络确保令牌不会离开攻击者的钱包,并且攻击者收到货物的原因是“谢谢”-毕竟,大多数人都不会弄错。 决赛,黑暗面的英雄凯旋!

但不是那么简单


陷阱1

今天,巨大的计算能力参与了比特币的挖掘。 可以通过以下公式估算成功生成“中毒”块的可能性:


今天,比特币网络的总哈希率大约等于H = 34∙10 18 hash / s。 在这种情况下,使用此列表中生产效率最高的设备,其声明的哈希为h = 18 18 10 12 hash / s,则在1年内生成“中毒”区块的可能性约为3%(t = 365∙24∙60)。 而且,如果我们从这些统计数据中获得一个相对较小的挖矿池(占总哈希率的0.3%),则3天内成功生成区块的可能性为73%。

陷阱2

随着受害者网络时间的流逝,“中毒”区块的时间戳最终将落入受害者的时间窗口。 然后,受害者将把备用链更改为主链,因为整个网络都在主链上工作,并且其高度会更大。 “中毒”栏将在不超过70分钟的时间内落入受害者的时间窗口-这是完成第二阶段所需的最长时间。

为了使受害者能够接受双花交易,必须用另外6个区块(对于标准客户)确认与该实体的交易。 违规者将必须独立生成确认块,同时有必要满足上述70分钟的要求。 Boverman 认为攻击者拥有整个网络10%的权力。 在这种情况下,大约需要5.5个小时才能生成6个区块,成功率为10%。 在3.3小时内,成功的概率在140分钟内降至1%-0.147%。 根据这些估计,在70分钟内成功生成6个块是一个幻想。

陷阱三

当节点计算网络时间时,它仅考虑前200个邻居的系统时间-则不会重新计算中间偏差。 这意味着必须实施攻击,直到已经连接到受害者的邻居数量不超过99-否则攻击者宣布的时间将不会是中间的。 此数目的邻居将在大约24小时内运行,然后需要重新启动受害者-例如,使用DoS。

结束


总而言之,我们可以说“ Timejacking”攻击非常好,但是在严酷的现实中,比特币变得不再适用。 那其他使用区块链的系统呢? 让我们将这个问题留给您进一步研究!

Source: https://habr.com/ru/post/zh-CN413721/


All Articles