Hacking Verge : comment c'était (partie 1)

Déformations temporelles, vulnérabilités minières, attaques DOS, etc.

Les passionnés de crypto adorent parler aux gens ordinaires de la fiabilité et de la sécurité des protocoles de blockchain qui exécutent leurs pièces préférées. En effet, les plus grandes crypto-monnaies telles que Bitcoin ou Ethereum offrent un niveau de sécurité décent, et le font peut-être mieux que tout autre actif numérique ou système de paiement de l'histoire. C'est une assez grande réussite, étant donné que ces crypto-monnaies ne sont soutenues par rien et ne sont contrôlées par personne.

Cependant, beaucoup osent affirmer que les crypto-monnaies mentionnées ne peuvent en principe pas être piratées. Il s'agit au moins d'une erreur de calcul tactique, car dans certains cas, de telles déclarations peuvent mettre une personne dans une position inconfortable. Par exemple, si la devise est toujours piratée.

Dans de tels cas, s'il ne reste rien d'autre, vous devrez peut-être au moins vous expliquer.

Le mois dernier, un pirate informatique non encore identifié a piraté Verge, une crypto-monnaie relativement petite axée sur l'anonymat des utilisateurs. Entre le 4 et le 6 avril, un pirate informatique inconnu a réussi à prendre le contrôle du réseau Verge à trois reprises pendant plusieurs heures, durant lesquelles les autres utilisateurs n'ont pas pu effectuer de paiements. Pour aggraver les choses, pendant ces intervalles, le pirate émettait de fausses pièces Verge à un taux de 1 560 pièces (environ 80 $) par seconde. En conséquence, le pirate a frappé plus d'un million de dollars de crypto-monnaies.

Cette situation peut être qualifiée de catastrophique sans exagération. Verge a été piraté de manière importante.

Mais qui est à blâmer? Était-ce une erreur des développeurs de Verge, une vulnérabilité fondamentale du protocole cryptographique ou autre chose ? Cela pourrait-il se produire avec des crypto-monnaies plus grandes, et si oui, comment l'éviter ?

Avec ce genre de hack, de nombreux détails sont toujours flous. Cependant, dans ce cas, les principales vulnérabilités peuvent être identifiées :

L'usurpation d'horodatage : erreurs involontaires ou mensonges dangereux ?

À première vue, cette vulnérabilité peut sembler être un bogue, mais en fait, il s'agit d'une fonction spéciale permettant de créer des horodatages « inexacts ». Dans les protocoles blockchain, les transactions individuelles (généralement des transferts entre les participants du réseau) sont regroupées en un seul bloc, qui est ensuite vérifié. Chaque bloc a un horodatage à la date de sa formation. Même si le protocole blockchain fonctionne correctement, la séquence de ces tampons peut être perturbée - par exemple, le bloc 100 peut avoir un horodatage qui va après bloc 101. Cela est dû au fait que dans les réseaux décentralisés qui refusent d'accorder des droits à des tiers, il n'est pas du tout facile d'établir une synchronisation horaire correcte.

Compte tenu du temps imprévisible qu'il faut pour que les données se propagent via un réseau peer-to-peer, les blocs peuvent très bien apparaître « dans le désordre », même si toutes les parties effectuent des transactions de bonne foi. En d'autres termes, au moins un peu de flexibilité doit être autorisée à cet égard ; dans le cas de Verge (au moins avant le hack), le protocole permettait aux nœuds de « ne pas être d'accord » sur l'heure actuelle indiquée dans le bloc, et la désynchronisation pouvait prendre jusqu'à deux heures.

Le pirate a commencé son attaque en falsifiant des horodatages. Il a envoyé des blocs comme du passé, mais sans dépasser les 2 heures autorisées, ce qui signifie que ces blocs sont restés acceptables pour le reste des nœuds du réseau.

La raison pour laquelle cela pourrait finalement affecter la sécurité du réseau réside dans la nature de l'exploitation minière pour les réseaux de preuve de travail.

Difficulté de minage : les murs ne protègent que s'ils sont hauts

Pour décentraliser le réseau Verge, vous devez vous assurer que les petits appareils (tels que les MacBooks) peuvent exécuter le logiciel réseau. Ceci, à son tour, conduit à limiter le volume de paiements dans le réseau, c'est-à-dire à fixer un temps cible pour un bloc (et, par conséquent, à limiter le nombre de transactions par seconde). Le réseau Verge fonctionnait à 1 bloc toutes les 30 secondes. Étant donné que le réseau est décentralisé, une question raisonnable peut être posée : qu'est-ce qui empêche les participants d'envoyer des blocs à une vitesse beaucoup plus élevée ? C'est un problème non trivial : si chaque bloc confirmé apporte une récompense à celui qui l'a formé, alors il est avantageux pour le mineur de confirmer autant de blocs que possible.

En bref, la solution à ce problème est la solution du protocole de preuve de travail. Pour que le réseau valide un bloc, il doit contenir une solution à un problème de calcul cryptographiquement complexe qui provient directement des données du bloc lui-même. La nature de ce problème est telle que sa complexité peut être facilement modifiée. Verge visait à former 1 bloc en 30 secondes, et la difficulté de minage était constamment ajustée en fonction du taux de confirmation de bloc actuel ; si les utilisateurs décidaient d'allouer plus de puissance à l'extraction et à la génération de blocs Verge, et que ces blocs étaient générés plus rapidement, le protocole augmentait la difficulté de l'extraction et la confirmation des blocs ralentissait. Inversement, lorsque la puissance diminue et que le temps de génération d'un bloc augmente, exploitation minière est devenu plus facile. Ainsi, lorsqu'il fonctionne correctement, lorsque des facteurs externes changent même dans le monde réel - fluctuations économiques, prix du marché des crypto-monnaies, marchés de l'énergie, montée et chute des empires, etc. - le réseau Verge réagissait constamment aux changements et cherchait à amener la formation de blocs en unité de temps à la cible.

L'algorithme utilisé par Verge pour calculer la difficulté actuelle d'un problème s'appelle Dark Gravity Wave ; il calcule une moyenne pondérée du taux de confirmation de bloc sur une période de 2 heures. Il s'agit d'un algorithme complexe, et les détails n'ont pas vraiment d'importance ici. L'important est que la complexité de l'exploitation minière dépend de la vitesse de formation des derniers blocs, et le calcul de cette vitesse, bien sûr, est associé à des horodatages.

C'est là que réside le problème : si vous créez suffisamment d'horodatages erronés, l'équilibre est rompu. C'est exactement ce que le pirate a fait - les données de la blockchain montrent que pendant toute la durée du (des) hack (s), chaque deuxième bloc a été envoyé avec un horodatage environ une heure avant l'heure actuelle, ce qui a grandement confondu l'algorithme de définition du difficulté de minage. Si le protocole avait de l'intelligence et pouvait parler, il dirait quelque chose comme « Oh non ! Pas assez de blocs ont été formés ces derniers temps ! Probablement, la complexité de l'exploitation minière est trop élevée - nous devons la réduire ! "

Alors que les horodatages étaient continuellement falsifiés, le protocole a continué à réduire la difficulté des tâches jusqu'à ce que l'exploitation minière devienne ridiculement simple. Pour une compréhension générale : la difficulté moyenne des tâches en heures était de 1393093,39131 heures, et pendant l'attaque, elle est tombée à 0,00024414, c'est-à-dire que la difficulté de minage a diminué de 99.999999%. Moins la tâche est complexe, plus de blocs peuvent être formés et envoyés à la blockchain ; à la suite de l'attaque, un bloc a été envoyé en seulement 1 seconde.

L'originalité de l'attaque réside dans le fait que le hacker a contourné la limite de difficulté de minage, plutôt que de la franchir. Imaginez que le système de sécurité est un mur qui entoure le filet, ce mur est trop haut et trop fort, il ne peut pas être cassé ou escaladé. Le pirate a trouvé un moyen de le réduire - et l'a simplement enjambé.

Que cette vulnérabilité n'était pas évidente est alarmant. Une telle attaque ouverte sur le protocole entraînera une détérioration de la réputation du réseau. De plus, le taux accru de création de blocs a permis la création de beaucoup plus de pièces Verge que prévu par le protocole. Si vous êtes un économiste qui prône une monnaie fiable avec un ratio stocks/flux prévisible, cette situation devrait vous inquiéter.

Cependant, réduire la complexité n'est que la moitié du problème ; en soi, cela ne donnerait en fait aucun avantage à l'attaquant. Avec la complexité réduite, la formation de blocs est vraiment devenue beaucoup plus facile pour le pirate informatique, mais elle est également devenue plus facile pour tout le monde - les mineurs continuent de se faire concurrence, comme toujours. Dans cette situation, nous supposons que bien que les blocs soient générés plus rapidement, les mineurs qui réussissent doivent rester distribués et démocratiques comme avant. En d'autres termes, quelle que soit la complexité du minage, pour s'emparer du réseau, un attaquant devra toujours contrôler au moins 51% de la puissance du système.

Cependant, ce pirate a vraiment pris le contrôle de l'ensemble du réseau et a réussi à le faire avec beaucoup moins de ressources que 51% du hashrate total. Il y est parvenu en exploitant le deuxième composant de la vulnérabilité, qui implique les multiples algorithmes d'exploration de données de Verge.

A suivre ...

Évaluez cet article
Médias blockchain
Ajouter un commentaire