Blog
Wie wir eine gestohlene Million gerettet haben

Wie wir eine gestohlene Million gerettet haben

Daniel Yavorovych
July 16, 2018

In dieser Geschichte geht es um ein großes Fintech-Unternehmen, das gehackt wird. Wir nennen es TwinPeaks, um die Anonymität zu wahren, oder kurz TP.
Je leiser wir werden, desto mehr hören wir.
Es war ein kalter Winterfreitagabend. Plötzlich kam ein Anruf aus den Staaten, das konnte man an der Vorwahl erkennen.

  • Hallo!
  • Daniel, bitte geh online, wir wurden gehackt...
  • ...

Es war der CTO von TP. An diesem Tag schienen sie Pech gehabt zu haben: Sie wurden gehackt. Kurz gesagt, ihr Hot-Wallet für das Projekt wurde in externe Bitcoin-Wallets geleert.

twin-peaks

Was gibt es zu tun? Ein kurzer Blick auf die Transaktionen ließ mich entsetzt nach Luft schnappen - die Transaktionssumme entsprach etwas weniger als 1 000 000 USD.

Mein erster Gedanke war: Kannst du da wirklich helfen? Ich schätze, du kannst nur dein Beileid aussprechen.

Das einzige, was Columbus entdeckte, war, dass er sich verirrt hatte!

Ein wichtiger Punkt ist jedoch, dass die Transaktionen keine Bestätigungen hatten. Warum? Weil das Bitcoin-Netzwerk in diesem Moment überlastet war. Und diese Situation bot die Möglichkeit, dringend Maßnahmen zu ergreifen.

Die Sache ist, solange eine Transaktion keine Bestätigung in der Blockchain hat, wird sie in einem sogenannten Mempool — einem Zwischenspeicher — isoliert. Solange sich eine Transaktion in Mempool befindet, besteht immer noch die Möglichkeit, ihr Schicksal zu beeinflussen: zum Beispiel die Gebühr zu erhöhen oder sogar die Adresse des Empfängers zu ändern.

Ich denke, es wird nützlich sein, über die Einzelheiten einer Bitcoin-Transaktion zu berichten.

Das A und O einer Bitcoin-Transaktion

Viele sind in dem Irrglauben gefangen, dass es sich um eine Art Nachricht handelt, die besagt, wie viel ein Adressat erhalten sollte, und wenn eine Transaktion im Gange ist, sinkt das Guthaben des Absenders und das des Empfängers steigt. Aber ganz so ist es nicht.

In Wirklichkeit handelt es sich um eine Liste eingehender und ausgehender Transaktionen, die zusammengenommen die Summe ausmachen, die gesendet wurde. Und der Saldo eines Benutzers ist das Ergebnis mathematischer Berechnungen eingehender und ausgehender Transaktionen.

Lassen Sie mich Ihnen das Transaktionsdiagramm zeigen:

Diagram_FINAL

Dales Gleichgewicht war 10.5 Bitcoinow ihm von seinem Freund, dem FBI-Chef, geschickt.

Er beschloss, Diane zu schicken. 0,5 btc und führte eine Transaktion durch. In diesem Moment wurde eine Transaktion abgeschlossen, die besagte, dass 0,5 btc sollte zu Diane gehen, und 9,5 btc sollte zu einer anderen Adresse zurückkehren, die Dale gehört. Sein gesamtes Guthaben ist jetzt gesperrt, aber es ist noch nicht aufgebraucht, da die Transaktion noch nicht bestätigt wurde.

Danach beginnt die harte Arbeit der Bergleute. Ein Minenarbeiter in amerikanischen grünen Wäldern findet diese Transaktion und bestätigt sie. Dann machen fünf weitere Miner dasselbe und schließlich zeigt blockchain.info, dass die Transaktion sechs Bestätigungen hat, was bedeutet, dass sie als gültig angesehen werden kann.

Diane hatte 24,5 btc, das sie von ihrem Freund, dem Chef des Federal Security Service, Albert, und von dem geistesgestörten Dr. Lawrence erhielt. Sobald die Operation bestätigt wurde, hat ihr Saldo eine reichliche halbrunde Menge erreicht 25 btc, und Dale hat seinen zuvor geblockt 9,5 btc zurück.

Meanwhile

Ein bisschen verwirrend, nicht wahr? Ja, das ist es.

Aber stellen wir uns vor, Dale hat einen Fehler gemacht (ich selbst habe Probleme, mir das vorzustellen, aber versuchen wir es trotzdem) und diesen halben Bitcoin an Bob geschickt, nicht an Diane.

Was ist passiert?

Alle seine 10 BTC wurden blockiert und die Transaktion ging nach Mempool, wo Tausende von Minern sie bald entdecken werden.
Sollte das passieren, würde Dave nicht still sitzen, denn solange es keine Bestätigungen gibt, ist er immer noch der Besitzer seiner 10 Bitcoins. Hypothetisch kann er noch viele weitere Transaktionen senden, Hunderte davon.

„Wie kommt das?!“ du fragst dich vielleicht. „Kann Dave Diane nicht einhundert Mal 0,5 BTC schicken und sie 50 BTC reicher machen?!“

Leider nein.

Sobald eine dieser Transaktionen bestätigt ist, haben die anderen keine Chance mehr. Ja, Miner werden sie auch erreichen, aber sie werden einfach die restlichen Transaktionen stornieren, sobald sie sehen, dass diese Bitcoins bereits ausgegeben wurden.

Also, wie kann Dale seine 0,5 BTC retten und wie könnte ich an diesem Abend eine Million USD aus den Pfoten von Schlägern zurückholen?

HOW WE SAVED A STOLEN MILLION

Die Antwort ist sehr einfach: Ich musste eine weitere Transaktion senden, die von einem Miner vor der ersten entdeckt wurde. Wie kann das gemacht werden? Lass mich dir ein bisschen erzählen über...

So arbeiten Miner

Die Aufgabe eines Bergmanns besteht darin, dafür zu sorgen, dass Elektrizität das größtmögliche Einkommen bringt. Eine seiner Aufgaben besteht darin, eine Transaktion online zu bestätigen. Wenn sie eine Transaktion bestätigen, erhalten sie eine Belohnung. Wie groß ist die Belohnung? Hängt von den Transaktionsgebühren ab. Je höher die Höhe der von einem Benutzer festgesetzten Gebühr ist, desto mehr erhält ein Miner als Belohnung. Aus diesem Grund ist es für einen Miner lukrativer, mit Transaktionen zu arbeiten, die eine höhere Belohnung haben. Natürlich wird die Arbeit mit solchen Transaktionen ihre Priorität sein. Je höher die Gebühr ist, desto schneller wird eine Transaktion bearbeitet.
Die Aufgabe beschränkte sich also darauf, eine Transaktion an Mempool zu senden, die mit der zuvor gesendeten identisch war (mit demselben 'In', was bedeutet, dass sie auf denselben eingehenden Transaktionen basieren sollte), aber mit einer anderen Empfängeradresse und einer höheren Gebühr.
Um das gestohlene Geld zu retten, habe ich eine Transaktion mit einer enormen Gebühr erstellt (mehr als 100$ statt ursprünglich 7$) und die Adresse des Empfängers geändert, nachdem ich die Adresse eingegeben hatte, die zu TwinPeaks gehört. Ich habe diese Transaktion mit einem privaten Schlüssel signiert und die Übertragung von mehreren verschiedenen Stellen gleichzeitig ausgeführt — große Ressourcen (wie blockchain.info und einige andere ähnliche Ressourcen).

Und ich fing an zu warten.

HOW WE SAVED A STOLEN MILLION

Es kam mir vor, als hätte ich ewig darauf gewartet.

Ich ging nervös durch die Küche hin und her, rauchte und warf einen Blick auf den Monitor.

Ich habe auch mit dem CTO von TP per Text gechattet, obwohl ich zugeben muss, seine Antworten ziemlich knapp waren.

Eines Tages wird die Traurigkeit enden.

30 Minuten waren vergangen und... ich sah die erste Bestätigung meiner Transaktion. Nach einiger Zeit hatte ich alle sechs Bestätigungen meiner Transaktion, und die Transaktion des Übeltäters wurde bald storniert, da das Geld bereits ausgegeben war.

Ich denke, es ist nicht nötig zu beschreiben, wie ich mich in diesem Moment gefühlt habe - viele von Ihnen haben sich irgendwann so gefühlt. Leistung ist ihre eigene Belohnung, Stolz verdunkelt sie.

Es sah aus, als wäre es Zeit, ins Bett zu gehen, aber ich beschloss, den gesamten Algorithmus in einem einfachen Python-Skript zu beschreiben, damit jeder diese Lösung verwenden kann, wenn, Gott bewahre, auf ein ähnliches Problem stößt. Oder, was ein häufigerer Fall zu sein scheint, jemand hat es einfach satt zu warten, bis seine Transaktion bestätigt wird, und beschließt, für die Bearbeitung etwas mehr zu bezahlen, nachdem er die Gebühr erhöht hat. Deshalb habe ich das Script upmyfee aufgerufen und es auf Github hochgeladen: https://github.com/dysnix/upmyfee

Das Skript ist sehr einfach zu bedienen und enthält eine README-Datei mit Anwendungsfällen.

Erst nachdem ich den letzten Git-Push gemacht hatte, schlief ich ein und dachte, dass aufgrund der Entwicklung des Kryptowährungsmarktes und der Popularisierung von Krypto-Assets der Sicherheitspreis exponentiell steigt. Versuchen Sie deshalb niemals, bei der Sicherheit Ihres Produkts Abstriche zu machen, und wenn es passiert, dass Sie in Schwierigkeiten geraten, gibt es immer einen Ausweg.

Die Eulen sind nicht das, was sie zu sein scheinen.

Daniel Yavorovych
CTO and Co-founder at Dysnix
Brainpower and problem-solver, meditating and mountain hiking.
Table of content
In die Zwischenablage kopiert
Fügen Sie es ein, wo immer Sie möchten