Zeitcheck: Timejacking gegen Bitcoin



Im Wettbewerb um das beliebteste Wort des Jahres würde das Wort „Blockchain“ wahrscheinlich der Gewinner der IT-Sphäre werden. Trotz der Tatsache, dass es eine ungesunde Tendenz gibt, es überall aktiv einzuführen - in der Medizin, der Wirtschaft, dem Internet der Dinge, der Aufzucht von Kaninchen und der Herstellung von Kuchen bleiben Kryptowährungen der Hauptbereich der Blockchain. Und jeder weiß: virtuelle Geldbörsen für Hacker - wie eine Katze mit saurer Sahne.

In diesem Artikel werden wir den "Timejacking" -Angriff betrachten, der auf der Sicherheitsanfälligkeit bei der Verarbeitung von Zeitstempeln von Blöcken im Bitcoin-Kryptowährungssystem basiert, und versuchen zu erklären, warum der Angriff erfolgt und seine erfolgreiche Implementierung nicht.

PS Es wird viele Ableitungen des Wortes "Zeit" geben. Sehr viel.

Kurzgesagt


Zum ersten Mal schrieb Alex Boverman über den Timejacking-Angriff. Hier können Sie sich mit der Veröffentlichung vertraut machen. Was ist das Wesentliche: Der Angriff nutzt Schwachstellen des Mechanismus aus, um die Zeitstempel von Blöcken und den Zeitzähler in Bitcoin zu überprüfen. Der Angreifer manipuliert einen der Zeitzähler des Opferknotens und erstellt einen „vergifteten“ Block. Das Opfer wird diesen Block fallen lassen und der Rest des Netzwerks wird erfolgreich akzeptieren, und bitte - wir haben eine Gabelung provoziert! Das gesamte Netzwerk verwendet eine Kette von Blöcken, die nach dem „vergifteten“ Block erstellt wurden, und das Opfer betrachtet eine alternative Kette mit wiederholten Token-Ausgaben (auch als Doppelausgaben bezeichnet), in der der „vergiftete“ Block nicht angezeigt wird, als gültig.

Der Angriff erfolgt in zwei Schritten. Um es klarer zu machen, lassen Sie uns über jeden von ihnen einzeln sprechen.

Akt 1. Eine Gabel erstellen und das Opfer isolieren


Ein Angreifer muss einen „APPLE of Contention“ generieren - den sehr „vergifteten“ Block, den das Opfer ignoriert. Auf die gleiche Weise lässt das Opfer andere Blöcke fallen, die nacheinander nach dem „vergifteten“ hinzugefügt werden.

Wie kann man ein Opfer austricksen und es zwingen, den richtigen Block fallen zu lassen?

Der Header jedes Blocks hat einen Zeitstempel, den der Knoten während der Überprüfung überprüft. Dieser Wert sollte in einen bestimmten Bereich fallen, wir nennen ihn ein temporäres Fenster. Der Zeitfensterbereich ist in der folgenden Abbildung dargestellt:


Das Zeitfenster hat zwei Grenzen:

  • niedriger - t min , entspricht dem Median der Zeitstempel von 11 Blöcken vor dem verifizierten Block
  • obere - entspricht dem Wert der Netzwerkzeit t 0 + 2 Stunden

Der Wert des Zeitstempels des Blocks wird nicht in Bezug auf die Systemzeit des Knotens überprüft, sondern in Bezug auf die Medianzeit seiner Nachbarn - Netzwerkzeit (auch als netzwerkangepasste Zeit bezeichnet).

Wie wird die Netzwerkzeit berücksichtigt:

  • Wenn eine neue Verbindung hergestellt wird, tauschen Knoten ihre Systemzeit aus
  • Jeder Knoten berechnet die Abweichung seiner eigenen Systemzeit von der Systemzeit jedes seiner Nachbarn
  • Für berechnete Abweichungen wird der Medianwert ausgewählt.
  • Native Systemzeit + Medianabweichung = Netzwerkzeit

Hier ist ein Beispiel für die Berechnung der Netzwerkzeit:


Auf diese Weise kann ein Angreifer den Wert der Netzwerkzeit des Opfers manipulieren, indem er eine ausreichende Anzahl von Nachbarn mit ihm verbindet, die die verzögerte Systemzeit ankündigen. Der Wert der Netzwerkzeit des Opfers nimmt ab - die Obergrenze des Bereichs zulässiger Werte des Zeitstempels des verifizierten Blocks nimmt ab. Wenn die Abweichung der Zeit des Nachbarn 70 Minuten überschreitet, wird seine Zeit bei der Berechnung der Netzwerkzeit nicht berücksichtigt. Daher beträgt der maximale Wert, um den die Netzwerkzeit des Opfers reduziert werden kann, 70 Minuten.


Dementsprechend ist unser "vergifteter" Block ein Block, dessen Zeitstempel in das Zeitfenster aller Netzwerkknoten mit Ausnahme des Opfers fallen sollte. Nur dann wird das gesamte Netzwerk es erfolgreich akzeptieren, und das Opfer, dessen Netzwerkzeit geändert wird, wird es nicht weniger erfolgreich löschen. In der folgenden Abbildung das Zeitfenster des Opfers im Vergleich zum Zeitfenster der verbleibenden Knoten.


Beachten Sie, dass wir dank des NTP-Protokolls davon ausgehen können, dass für die meisten Knoten die Systemzeit ungefähr gleich ist, d. H. Die Netzwerkzeit jedes Knotens liegt nahe an ihrer Systemzeit.

Infolgedessen ist das Opfer vom Hauptnetzwerk isoliert und betrachtet die Hauptblockkette als falsch, die von den übrigen Knoten aus dem "vergifteten" Block erstellt wird. Gleichzeitig akzeptiert das Opfer sicher die anderen Blöcke, die vom Angreifer für die alternative Kette hilfreich generiert wurden.


Akt 2. Doppelte Ausgaben


Zu diesem Zeitpunkt generiert der Angreifer eine alternative Kette, in der er eine Transaktion hinzufügt, die Token in die Brieftasche des Opfers überträgt. Alternative Kettenblöcke werden an das Opfer gesendet. In der folgenden Abbildung - der Wertebereich des Zeitstempels des "vergifteten" Blocks.


Das Opfer wird diese Kette akzeptieren, da der Eindringling den Wert der Zeitstempel aus seinem eigenen Zeitfenster ausgewählt hat und die verbleibenden Knoten ihn zu Recht ignorieren - schließlich bauen sie ihre Kette bereits aus dem „vergifteten“ Block, der länger als die Alternative ist. Infolgedessen glaubt das Opfer, Token erhalten und die Waren gesendet zu haben. Und das Hauptnetzwerk ist sich sicher, dass die Token die Brieftasche des Angreifers nicht verlassen haben und er die Ware für "Danke" erhält - schließlich können sich die meisten nicht irren. Finale, der Held der dunklen Seite triumphiert!

Aber nicht so einfach


Fallstricke Nr. 1

Beim Bitcoin-Mining ist heute eine enorme Rechenleistung erforderlich. Die Wahrscheinlichkeit einer erfolgreichen Erzeugung eines "vergifteten" Blocks kann durch die folgende Formel geschätzt werden:


Heute beträgt die Gesamt- Hash- Rate des Bitcoin-Netzwerks ungefähr H = 34 ∙ 10 18 Hash / s. In diesem Fall beträgt bei Verwendung des produktivsten Geräts aus dieser Liste , dessen deklarierte Hash-Rate h = 18 ∙ 10 12 Hash / s beträgt, die Wahrscheinlichkeit, in 1 Jahr einen „vergifteten“ Block zu erzeugen (t = 365 ∙ 24 ∙ 60), ungefähr 3%. Wenn wir diesen Statistiken einen relativ kleinen Mining-Pool entnehmen, der 0,3% der gesamten Hash-Rate ausmacht, beträgt die Wahrscheinlichkeit einer erfolgreichen Blockgenerierung innerhalb von 3 Tagen 73%.

Fallstricke Nr. 2

Im Laufe der Zeit des Netzwerks des Opfers fällt der Zeitstempel des "vergifteten" Blocks schließlich in das Zeitfenster des Opfers. Dann ändert das Opfer die alternative Kette in die Hauptkette, da das gesamte Netzwerk daran arbeitet und die Höhe größer ist. Der "vergiftete" Block fällt in nicht mehr als 70 Minuten in das Zeitfenster des Opfers - dies ist die maximale Zeit, für die die zweite Stufe abgeschlossen werden muss.

Damit das Opfer die Transaktion mit doppelten Ausgaben akzeptieren kann, muss der Block mit weiteren 6 Blöcken (für einen Standardkunden) bestätigt werden. Der Übertreter muss selbstständig Bestätigungsblöcke generieren, und gleichzeitig müssen die oben genannten 70 Minuten eingehalten werden. Boverman betrachtet eine Situation, in der ein Angreifer 10% der Leistung des gesamten Netzwerks besitzt. In einer solchen Situation dauert es ~ 5,5 Stunden, um 6 Blöcke mit einer Erfolgsrate von 10% zu generieren. Für 3,3 Stunden sinkt die Erfolgswahrscheinlichkeit für 140 Minuten auf 1% - 0,147%. Nach diesen Schätzungen ist es eine Fantasie, 6 Blöcke in 70 Minuten erfolgreich zu generieren.

Fallstricke Nr. 3

Wenn der Knoten die Netzwerkzeit berechnet, berücksichtigt er nur die Systemzeit der ersten 200 Nachbarn - dann wird die mittlere Abweichung nicht neu berechnet. Dies bedeutet, dass der Angriff ausgeführt werden muss, bis die Anzahl der Nachbarn, die bereits mit dem Opfer verbunden sind, 99 nicht überschreitet. Andernfalls ist die vom Angreifer angekündigte Zeit kein Median. Diese Anzahl von Nachbarn wird in ungefähr 24 Stunden ausgeführt, und danach muss das Opfer neu gestartet werden - beispielsweise mithilfe von DoS.

Das Ende


Zusammenfassend können wir sagen, dass der "Timejacking" -Angriff sehr gut ist, aber in den harten Realitäten wird Bitcoin nicht mehr anwendbar. Was ist mit anderen Systemen, die Blockchain verwenden? Lassen Sie uns diese Frage für Ihre weitere Forschung verlassen!

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


All Articles