Blogue
Comment nous avons sauvé un million de dollars volés

Comment nous avons sauvé un million de dollars volés

Daniel Yavorovych
July 16, 2018

Cette histoire raconte l'histoire d'une grande entreprise de technologie financière qui se fait pirater. Nous l'appellerons TwinPeaks pour préserver l'anonymat, ou TP pour faire court.
Plus nous sommes calmes, plus nous entendons.
C'était un vendredi soir d'hiver froid. Tout à coup, un appel téléphonique en provenance des États-Unis, on pouvait le deviner grâce à l'indicatif régional.

  • Bonjour !
  • Daniel, s'il te plaît, va en ligne, nous avons été piratés...
  • ...

C'était le directeur technique de TP. La malchance semblait leur être arrivée ce jour-là : ils ont été piratés. En bref, le portefeuille chaud de leur projet a été vidé dans des portefeuilles Bitcoin externes.

twin-peaks

Qu'est-ce qu'il y a à faire ? Un rapide coup d'œil aux transactions m'a fait haleter d'horreur : le montant de la transaction était légèrement inférieur à 1 000 000 DOLLARS AMÉRICAINS.

Ma première pensée a été : pouvez-vous vraiment m'aider dans ce domaine ? Je suppose que tu ne peux que présenter tes condoléances.

La seule chose que Colomb a découverte, c'est qu'il était perdu !

Un point important, cependant, est que les transactions n'ont eu aucune confirmation. Pourquoi ? Parce que le réseau Bitcoin était surchargé à ce moment-là. Et cette situation a donné l'occasion de prendre des mesures urgentes.

Le fait est que tant qu'une transaction n'a pas de confirmation dans Blockchain, elle est isolée dans ce que l'on appelle un Mempool, un stockage temporaire. Lorsqu'une transaction est effectuée sur Mempool, il est toujours possible d'influencer son sort : augmenter les frais, par exemple, ou même changer l'adresse du destinataire.

Je pense qu'il sera utile de parler des détails d'une transaction Bitcoin.

Les détails d'une transaction en bitcoins

Beaucoup pensent à tort qu'il s'agit d'une sorte de message indiquant le montant que doit recevoir un destinataire et, lorsqu'une transaction est en cours, le solde de l'expéditeur diminue et celui du destinataire augmente. Mais ce n'est pas tout à fait comme ça.

En réalité, il s'agit d'une liste de transactions entrantes et sortantes qui, une fois réunies, constituent la somme envoyée. Et le solde d'un utilisateur est le résultat de calculs mathématiques des transactions entrantes et sortantes.

Permettez-moi de vous montrer le graphique des transactions :

Diagram_FINAL

L'équilibre de Dale était 10,5 Bitcoins envoyé par son ami, le chef du FBI.

Il a décidé d'envoyer Diane 0,5 btc et a effectué une transaction. À ce moment-là, une transaction a été conclue qui indiquait que 0,5 btc devrait aller voir Diane, et 9,5 BTC devrait revenir à une autre adresse appartenant à Dale. La totalité de son solde est actuellement bloquée, mais il n'est pas encore dépensé, car la transaction n'est pas encore confirmée.

Ensuite, le dur labeur des mineurs commence. Un mineur des forêts vertes américaines trouve cette transaction et la confirme. Ensuite, cinq autres mineurs font la même chose et, enfin, blockchain.info montre que la transaction comporte six confirmations, ce qui signifie qu'elle peut être considérée comme valide.

Diane avait 24,5 btc, qu'elle a reçu de son ami, le chef du Service fédéral de sécurité Albert, et du dérangé Dr Lawrence. Dès que l'opération a été confirmée, son solde a atteint un montant demi-tour suffisant de 25 BTC, et Dale a déjà été bloqué 9,5 BTC retour.

Meanwhile

C'est un peu confus, non ? Oui, ça l'est.

Mais imaginons que Dale ait commis une erreur (j'ai moi-même du mal à l'imaginer, mais essayons quand même) et ait envoyé ce demi-bitcoin à Bob, pas à Diane.

Que s'est-il passé ?

Tous ses 10 BTC ont été bloqués et la transaction a été envoyée à Mempool où des milliers de mineurs sont sur le point de la découvrir.
Si cela devait se produire, Dave ne resterait pas immobile, car tant qu'il n'y a pas de confirmation, il est toujours propriétaire de ses 10 Bitcoins. En théorie, il peut envoyer beaucoup plus de transactions, des centaines d'entre elles.

« Comment ça se fait ? ! » vous vous demandez peut-être. « Dave ne peut-il pas envoyer 0,5 BTC à Diane cent fois et l'enrichir de 50 BTC ? ! »

Malheureusement, non.

Dès que l'une de ces transactions sera confirmée, les autres n'auront aucune chance. Oui, les mineurs y accèderont également, mais ils annuleront simplement le reste des transactions une fois qu'ils constateront que ces Bitcoins ont déjà été dépensés.

Alors, comment Dale peut-il économiser ses 0,5 BTC et comment ai-je pu arracher un million de dollars à des voyous ce soir-là ?

HOW WE SAVED A STOLEN MILLION

La réponse est très simple : j'ai dû envoyer une autre transaction qui serait découverte par un mineur avant la transaction initiale. Comment est-ce possible ? Permettez-moi de vous parler un peu de...

Comment travaillent les mineurs

La tâche d'un mineur est de faire en sorte que l'électricité génère le plus de revenus possible. L'une de ses tâches consiste à confirmer une transaction en ligne. Lorsqu'ils confirment une transaction, ils reçoivent une récompense. Quel est le montant de la récompense ? Cela dépend du coût des frais de transaction. Plus le montant des frais fixés par un utilisateur est élevé, plus le mineur obtiendra en récompense. C'est pourquoi il est plus lucratif pour un mineur de travailler sur des transactions plus rémunératrices. Naturellement, travailler avec de telles transactions sera leur priorité. Plus les frais sont élevés, plus la transaction sera traitée rapidement.
La tâche s'est donc limitée à envoyer à Mempool une transaction identique à celle qui avait été envoyée précédemment (avec le même « in », c'est-à-dire qu'elle devrait être basée sur les mêmes transactions entrantes), mais avec une adresse de destinataire différente et des frais plus élevés.
En essayant d'économiser l'argent volé, j'ai créé une transaction avec des frais énormes (plus de 100$ au lieu des 7$ initiaux) et j'ai changé l'adresse du destinataire, après avoir saisi l'adresse appartenant à TwinPeaks. J'ai signé cette transaction avec une clé privée et j'ai effectué sa diffusion simultanément à partir de plusieurs endroits différents, de grandes ressources (comme blockchain.info et d'autres ressources similaires).

Et j'ai commencé à attendre.

HOW WE SAVED A STOLEN MILLION

J'ai l'impression d'attendre depuis des lustres.

Je traversais la cuisine avec nervosité, en fumant et en jetant un coup d'œil à l'écran.

J'étais également en train de discuter par texto avec le directeur technique de TP, même si, je dois avouer, ses réponses étaient plutôt succinctes.

Un jour, la tristesse prendra fin.

30 minutes se sont écoulées et... j'ai vu la première confirmation de ma transaction. Quelque temps plus tard, j'ai reçu les six confirmations de ma transaction, et la transaction du malfaiteur a rapidement été annulée, car l'argent avait déjà été dépensé.

Je pense qu'il n'est pas nécessaire de décrire ce que j'ai ressenti à ce moment-là. Beaucoup d'entre vous ont déjà ressenti cela à un moment ou à un autre. La réussite est sa propre récompense, l'orgueil l'obscurcit.

Il semblait qu'il était temps d'aller au lit, mais j'ai décidé de décrire l'intégralité de l'algorithme dans un simple script python, afin que tout le monde puisse utiliser cette solution si, à Dieu ne plaise, un problème similaire se présentait. Ou, ce qui semble être un cas plus fréquent, quelqu'un en aura simplement assez d'attendre que sa transaction soit confirmée et décidera de payer un peu plus cher pour son traitement après avoir augmenté les frais. C'est pourquoi j'ai appelé le script upmyfee et je l'ai téléchargé sur Github : https://github.com/dysnix/upmyfee

Le script est très simple à utiliser et possède un README avec des cas d'utilisation.

Ce n'est qu'après avoir effectué le dernier git push que je me suis endormi en pensant qu'en raison du développement du marché des cryptomonnaies et de la vulgarisation des actifs cryptographiques, le prix de la sécurité augmentait de façon exponentielle. C'est pourquoi n'essayez jamais de réduire la sécurité de votre produit, et si cela vous cause des problèmes, il y a toujours une solution.

Les hiboux ne sont pas ce qu'ils semblent être.

Daniel Yavorovych
CTO and Co-founder at Dysnix
Brainpower and problem-solver, meditating and mountain hiking.
Table des matières
Articles connexes
Abonnez-vous au blog
La meilleure source d'informations pour le service client, les conseils de vente, les guides et les meilleures pratiques du secteur. Joignez-vous à nous.
Merci de votre inscription au blog Dysnix
Vous serez désormais le premier à savoir quand nous publierons un nouvel article
J'ai compris
Oups ! Une erreur s'est produite lors de l'envoi du formulaire.
Copié dans le presse-papiers
Collez-le où vous voulez