Time Checking: Timejacking vs Bitcoin



Dans le concours du mot le plus populaire de l'année, le mot «blockchain» deviendrait probablement le vainqueur de la sphère informatique. Malgré le fait qu'il existe une tendance malsaine à l'introduire activement n'importe où - dans la médecine, l'économie, l'Internet des objets, l'élevage de lapins et la fabrication de tartes, les crypto-monnaies restent le principal champ d'application de la blockchain. Et tout le monde le sait: des portefeuilles virtuels pour les pirates - comme un chat avec de la crème sure.

Dans cet article, nous considérerons l'attaque «Timejacking», basée sur la vulnérabilité dans le traitement des horodatages des blocs dans le système de crypto-monnaie Bitcoin, et essayer d'expliquer pourquoi l'attaque est, et sa mise en œuvre réussie ne l'est pas.

PS Il y aura de nombreux dérivés du mot "temps". Beaucoup.

En bref


Pour la première fois, Alex Boverman a écrit sur l'attaque du Timejacking. Vous pouvez vous familiariser avec sa publication ici . Quelle est l'essence: l'attaque exploite les vulnérabilités du mécanisme de vérification des horodatages des blocs et du compteur de temps en Bitcoin. L'attaquant manipule l'un des compteurs de temps du nœud victime et crée un bloc «empoisonné». La victime lâchera ce bloc, et le reste du réseau acceptera avec succès, et s'il vous plaît - nous avons provoqué une fourchette! L'ensemble du réseau utilise une chaîne de blocs construite après celle «empoisonnée», et la victime considère comme valide une chaîne alternative avec des dépenses répétées en jetons (alias double-dépenses), dans laquelle le bloc «empoisonné» n'apparaît pas.

L'attaque se déroule en deux temps. Pour le rendre plus clair, parlons de chacun d'eux séparément.

Acte 1. Créer une fourchette et isoler la victime


Un attaquant doit générer une «POMME de contention» - le bloc très «empoisonné» que la victime ignorera. De la même manière, la victime déposera d'autres blocs qui seront ajoutés séquentiellement après celui «empoisonné».

Comment tromper une victime et l'obliger à lâcher le bon bloc?

L'en-tête de chaque bloc a un horodatage que le nœud vérifie lors de la vérification. Cette valeur doit tomber dans une certaine plage, nous l'appellerons une fenêtre temporaire. La plage de fenêtre temporelle est illustrée dans la figure ci-dessous:


La fenêtre temporelle a deux limites:

  • inférieur - t min , il est égal à la médiane des horodatages de 11 blocs précédant le bloc vérifié
  • supérieur - égal à la valeur du temps réseau t 0 + 2 heures

La valeur de l'horodatage du bloc est vérifiée non pas par rapport à l'heure système du nœud, mais par rapport à l'heure médiane de ses voisins - l'heure du réseau (aka heure ajustée au réseau).

Comment est pris en compte le temps réseau:

  • Lorsqu'une nouvelle connexion est établie, les nœuds échangent l'heure de leur système
  • Chaque nœud calcule l'écart de son propre temps système par rapport au temps système de chacun de ses voisins
  • Pour les écarts calculés, la valeur médiane est sélectionnée.
  • Temps système natif + écart médian = temps réseau

Voici un exemple de calcul du temps réseau:


Ainsi, un attaquant peut manipuler la valeur du temps réseau de la victime en lui connectant un nombre suffisant de voisins annonçant l'heure système en retard. La valeur de l'heure du réseau victime diminue - la limite supérieure de la plage de valeurs admissibles de l'horodatage du bloc vérifié diminue. Mais si l'écart du temps du voisin dépasse 70 minutes , son temps ne sera pas pris en compte lors du calcul de l'heure du réseau. Par conséquent, la valeur maximale permettant de réduire la durée de réseau de la victime est de 70 minutes.


En conséquence, notre bloc «empoisonné» est un bloc dont l'horodatage doit tomber dans la fenêtre temporelle de tous les nœuds du réseau à l'exception de la victime. Ce n'est qu'alors que l'ensemble du réseau l'acceptera avec succès, et la victime dont l'heure du réseau est modifiée ne la déposera pas moins avec succès. Dans la figure ci-dessous - la fenêtre temporelle de la victime par rapport à la fenêtre temporelle des nœuds restants.


Notez que, grâce au protocole NTP, nous pouvons supposer que pour la plupart des nœuds, l'heure système est approximativement la même, c'est-à-dire que l'heure réseau de chaque nœud est proche de la valeur de l'heure système.

En conséquence, la victime est isolée du réseau principal et considère la chaîne principale de blocs incorrecte, qui sera construite par le reste des nœuds du bloc "empoisonné". Dans le même temps, la victime acceptera en toute confiance les autres blocs, généreusement générés par l'attaquant pour la chaîne alternative.


Acte 2. Double dépense


À ce stade, l'attaquant génère une chaîne alternative, dans laquelle il ajoute une transaction qui transfère des jetons au portefeuille de la victime. Des blocs de chaîne alternatifs sont envoyés à la victime. Dans la figure ci-dessous - la plage de valeurs de l'horodatage du bloc "empoisonné".


La victime acceptera cette chaîne, car la valeur des horodatages est sélectionnée par l'intrus dans sa propre fenêtre temporelle, et les nœuds restants l'ignoreront à juste titre - après tout, ils construisent déjà leur chaîne à partir du bloc «empoisonné», qui est plus long que l'alternative. En conséquence, la victime pense avoir reçu des jetons et envoyer les marchandises. Et le réseau principal est sûr que les jetons n'ont pas quitté le portefeuille de l'attaquant, et il reçoit les marchandises pour "merci" - après tout, la plupart ne peuvent pas se tromper. Final, le héros du côté obscur triomphe!

Mais pas si simple


Écueil n ° 1

Une énorme puissance de calcul est impliquée dans l'exploitation de Bitcoin aujourd'hui. La probabilité de génération réussie d'un bloc "empoisonné" peut être estimée par la formule suivante:


Aujourd'hui, le hashrate total du réseau Bitcoin est approximativement égal à H = 34 ∙ 10 18 hash / s. Dans ce cas, en utilisant l'appareil le plus productif de cette liste , dont le taux de hachage déclaré est h = 18 ∙ 10 12 hachage / s, la probabilité de générer un bloc «empoisonné» en 1 an (t = 365 ∙ 24 ∙ 60) est d'environ 3%. Et si nous prenons de ces statistiques un pool minier relativement petit qui a 0,3% du hashrate total, alors la probabilité de génération de blocs réussie dans les 3 jours est de 73%.

Écueil n ° 2

Avec le passage du temps du réseau de la victime, l’horodatage du bloc «empoisonné» tombera finalement dans la fenêtre temporelle de la victime. Ensuite, la victime changera la chaîne alternative en chaîne principale, car tout le réseau y travaille et sa hauteur sera plus grande. Le bloc «empoisonné» tombera dans la fenêtre de temps de la victime en moins de 70 minutes - c'est le temps maximum pour lequel il est nécessaire de terminer la deuxième étape.

Pour que la victime accepte la transaction avec double dépense, le bloc avec elle doit être confirmé par 6 autres blocs (pour un client standard). Le contrevenant devra générer des blocs de confirmation de manière indépendante, et en même temps, il est nécessaire de respecter les 70 minutes susmentionnées. Boverman considère une situation où un attaquant détient 10% de la puissance de l'ensemble du réseau. Dans une telle situation, il faudra environ 5,5 heures pour générer 6 blocs avec un taux de réussite de 10%. Pendant 3,3 heures, la probabilité de réussite tombe à 1%, pour 140 minutes - 0,147%. Selon ces estimations, générer avec succès 6 blocs en 70 minutes est un fantasme.

Écueil n ° 3

Lorsque le nœud calcule l'heure du réseau, il prend en compte l'heure système des 200 premiers voisins uniquement - alors l'écart médian ne sera pas recalculé. Cela signifie que l'attaque doit être mise en œuvre jusqu'à ce que le nombre de voisins déjà connectés à la victime ne dépasse pas 99 - sinon le temps annoncé par l'attaquant ne sera pas médian. Ce nombre de voisins s'exécutera dans environ 24 heures, et après cela, la victime devra être redémarrée - par exemple, en utilisant DoS.

La fin


En conclusion, nous pouvons dire que l'attaque "Timejacking" est très bonne, mais dans les dures réalités Bitcoin devient inapplicable. Qu'en est-il des autres systèmes utilisant la blockchain? Laissez-nous cette question pour vos recherches futures!

Source: https://habr.com/ru/post/fr413721/


All Articles