TheDAO-Hack-FAQ: Wie kam es zum Angriff am 17. Juni 2016?

Kann jemand erklären, wie der DAO-Angriff passiert ist? Vitalik Buterin erklärte hier , dass dies durchgeführt wurde, indem ein DAO vom Haupt-DAO getrennt, aber die splitFunktion rekursiv aufgerufen wurde.

Wir wissen, dass die rekursive Funktion eine Art Funktion ist, die sich selbst aufruft, aber ich bin mir nicht sicher, ob dies der gleiche Fall ist wie bei einem DAO-Angriff.

Kann jemand erklären, was es bedeutet, eine Funktion rekursiv aufzurufen, und wie genau es bei dem jüngsten Angriff auf das DAO passiert ist?

Es ist etwas schwierig, dies vollständig zu verstehen, ohne Kenntnis der Solidität, der zugrunde liegenden Vertragssprache auf hoher Ebene und der Behandlung von reentranten Aufrufen durch die zugrunde liegende EVM (Methode A ruft B und dann B ruft A auf).

Antworten (3)

Jeder, der diesen Artikel über den Angriffsvektor und diesen Forenbeitrag gelesen hat, könnte entdeckt haben, dass Ursium zu Unrecht zuversichtlich ist, weil die Split-Funktion die Belohnungsfunktion aufruft. Dann wäre es einfach, den Angriff für einen mittelmäßigen web3.jsEntwickler auszuführen.

Ich weiß nicht, warum dies die akzeptierte Antwort ist. Es erklärt nichts, es sind nur zwei Links, die auch nicht erklären, was passiert ist.
Es ist ein Community-Wiki, gehen Sie voran und bearbeiten Sie es
Forumlink ist tot @Roland Kofler

Was ist passiert? 3.641.694 ETH wurden von der DAO abgespalten. Der Angreifer fand eine Lücke in der regulären SplitDAO-Funktion, sodass er dieselben DAO-Token immer wieder verwenden konnte.

Wie funktionierte der Angriff genau?Dem Angreifer gelang es, 2 Exploits zu kombinieren. Der erste Exploit bestand darin, die Split-DAO-Funktion rekursiv aufzurufen. Das heißt, der erste reguläre Aufruf würde einen zweiten (unregelmäßigen) Aufruf der Funktion auslösen und der zweite Aufruf würde einen weiteren Aufruf auslösen und so weiter. Die folgenden Aufrufe werden in einem Zustand durchgeführt, bevor der Kontostand des Angreifers auf 0 zurückgesetzt wird. Dadurch konnte der Angreifer 20 Mal pro Transaktion splitten (muss die genaue Zahl nachschlagen). Mehr konnte er nicht tun – sonst wären die Transaktionen zu groß geworden und hätten irgendwann das Blocklimit erreicht. Dieser Angriff wäre schon schmerzhaft gewesen. Was es jedoch wirklich schmerzhaft machte, war, dass es den Angegriffenen gelang, diesen Angriff von denselben zwei Adressen mit denselben Token immer und immer wieder zu replizieren (ungefähr 250 Mal von jeweils 2 Adressen). Also fand der Angreifer einen zweiten Exploit, der es erlaubte, zu splitten, ohne die Tokens im Haupt-DAO zu zerstören. Sie haben es geschafft, die Token wegzutransferieren, bevor sie an die Adresse 0x0 gesendet werden und erst danach werden sie zurückgeschickt.) Die Kombination beider Angriffe multipliziert den Effekt. Angriff eins auf sich selbst wäre sehr kapitalintensiv gewesen (Sie müssen 1/20 des gestohlenen Betrags im Voraus aufbringen) – Angriff zwei hätte lange gedauert.

Ist der restliche Ether im DAO sicher? Nein - es ist sehr wahrscheinlich, dass dieser Exploit verwendet werden könnte, um den gesamten Ether aus dem DAO abzuziehen. Der Angreifer hörte auf, die ETH zu entleeren, als Vitalik seine erste Blog-Antwort schrieb, in der der Plan für Soft- und Hard-Forks erwähnt wurde. Wir können davon ausgehen, dass der Hacker aus strategischen Gründen aufgehört hat, um eine Community-Entscheidung für einen Fork unwahrscheinlicher zu machen. Allerdings - die Angegriffenen haben auch in anderen Fork-Vorschlägen gestimmt - für weitere Details siehe hier

Da sich der Ether des Angreifers in einer Kopie eines theDAO-Vertrags befindet – kann der ETH auf die gleiche Weise gestohlen werden? Das wäre möglich gewesen, wenn wenigstens ein ehrlicher Akteur für diese Trennung gestimmt hätte. Da der Angreifer höchstwahrscheinlich der einzige Anteilseigner und der Kurator dieser DAO ist, kann derselbe Angriff nicht durchgeführt werden.

Wie würde die vorgeschlagene Soft Fork funktionieren? Der Soft Fork wäre eine sofortige Aktion, um hauptsächlich Zeit zu gewinnen. Bergleute könnten den Ethereum-Client so modifizieren, dass er alle Transaktionen ignoriert, bei denen als Ergebnis der Transaktion ETH von einer Adresse abgezogen wird, die den Code des DAO hat. Bergleute würden auch Blöcke anderer Bergleute ignorieren, die eine solche Transaktion beinhalten würden. Wenn sich die Mehrheit der Miner dafür entscheidet, wäre es für jeden unmöglich, ETH von jeder „theDAO“-Version zu verschieben. Es würde also das Haupt-"theDAO" und alle Splits betreffen - einschließlich des regulären und des böswilligen.

Gibt es bereits eine Softwareversion der ETH mit dieser Modifikation? Ja - Parity und GETH haben die richtigen Versionen veröffentlicht.

Was muss passieren, um die Soft Fork zu aktivieren? Es würde eine koordinierte Anstrengung der Mehrheit der Bergleute erfordern. Koordination ist wichtig, sonst würde ein Miner wahrscheinlich seine ETH verlieren. Wenn Sie beispielsweise solo minen, sollten Sie NICHT zur gepatchten Version wechseln, es sei denn, Sie sind davon überzeugt, dass die Mehrheit der Miner dies getan hat, da Ihre Software sonst die längste Kette ignoriert, da sie sie als ungültig ansehen würde.

Miner müssen sich untereinander verständigen und zukünftig einen Block definieren, mit dem auf die neue Version umgestellt werden soll. Sobald die Mehrheit eine neue Version akzeptiert, ist es für einen Miner gefährlich, die neue Version nicht zu verwenden.

Wenn die Soft Fork erfolgreich ist – was ist ein Weg nach vorne? Der Softfork wird höchstwahrscheinlich nur eine vorübergehende Lösung sein. Wenn es die endgültige Lösung wäre, würde es bedeuten, dass im Grunde alle ETH auf allen DAO-Verträgen für immer eingefroren sind. Es gibt zwei wahrscheinlichere Wege nach vorne. Zuerst ein Hard Fork – mit einem Hard Fork ist buchstäblich alles möglich – wir werden später auf mögliche Wege eingehen. Der zweite Weg von der Freez-Softfork besteht darin, nur bestimmte Arten von Transaktionen zuzulassen. Unter der Annahme, dass keine ETH mehr aus dem DAO abgezogen wird, könnte ein spezifischerer Softfork 2 es jedem DTH ermöglichen, seinen Anteil an der verbleibenden ETH zu erhalten.

Wenn der Soft Fork nicht gelingt – was passiert?Ein sehr großes Durcheinander von Angriffen und Gegenangriffen. White and Black Heat Hacker werden diesen Fehler ausnutzen. Da jedoch jeder Split öffentlich ist, kann jeder jedem Split beitreten. Die richtige Strategie wäre, Ihre Token aufzuteilen, um in jedem Split eine sehr kleine Anzahl von Token zu haben. Wenn also jemand den Angriff durchführt, haben andere auch Anteile an dem geteilten DAO - das wird es ihnen später ermöglichen, diesen Angriff erneut in dem neuen DAO durchzuführen, nachdem der Erstellungszeitraum abgelaufen ist. Dies könnte zu einer endlosen Aufspaltung führen. Es würde Anreize schaffen, das Netzwerk zu spammen oder Miner zu bestechen, um Transaktionen zu zensieren. Darüber hinaus ist es sehr wahrscheinlich, dass andere Fehler gefunden und ausgenutzt werden. Wenn wir in dieser Phase landen würden, wäre es sehr wahrscheinlich, dass alle nicht-technischen DTH alles verlieren würden.

Was sind die Argumente für und gegen die Soft Fork? Das größte Argument für die Soft Fork ist die Verhinderung des großen Durcheinanders, das ohne sie auftreten würde. Es gibt philosophische Argumente dagegen – im Grunde wäre die Softfork eine Form der Zensur. Allerdings - die meisten von dieser Zensur Betroffenen würden es sehr begrüßen (alle DAO-Token-Inhaber) erwarten den Angreifer. Allerdings - es gibt eine kleine Gruppe von Menschen, die auch davon betroffen sind, die es vielleicht nicht wollen - alle, die regelmäßig gespuckt haben und sich sicher sind, dass niemand der anderen Gesellschafter dieser gespaltenen DAO sie angreifen wird (z. B. weil sie die einzigen sind eines).

Wann und wie ist eine Hard Fork möglich?Eine Hard Fork würde längere Diskussionen und Konsensfindungen erfordern. Um einen Hard Fork auszuführen, sind Miner weniger wichtig. Wichtiger sind Börsen und Schlüsselakteure im Ökosystem. (Ethereum-Stiftung, Core-Entwickler, führende Unternehmen im Ökosystem). Wenn all diese Spieler einem Hard Fork zustimmen, würde sogar eine kleine Minderheit von Bergleuten ausreichen, aber was noch wichtiger ist – Bergleute würden unter diesen Bedingungen mit ziemlicher Sicherheit beitreten. Bei einem Hard Fork sind prinzipiell ALLE Regeländerungen möglich. Neuer Ether kann geschaffen werden, legitime ETH kann zerstört werden und so weiter. Allerdings - die Chancen stehen 0, dass die Community einem solchen Fork zustimmen würde. So können wir den erwarteten Bereich eingrenzen. Am oberen Ende (auf einer Skala von ETH-Wert pro DAO-Token) wäre eine vollständige Umkehrung aller illegitimen Splits. Das würde bedeuten, dass DAO-Token wieder zu je 0,01 ETH einlösbar wären. Das untere Ende wäre das Verhältnis von ETH, das im DAO-Kontrakt verbleibt – derzeit 0,006857 ETH (ohne zusätzliches Guthaben). Allerdings - für eine solche Lösung wäre kein Hard Fork erforderlich, es könnte mit einem Soft Fork geschehen. Eine Konsenslösung könnte also auch sein, dass nur Teile restauriert werden. Andere könnten entweder zerstört oder für irgendeine Form von Gemeinwohl verwendet werden (z. B. Ethereum-Stiftung, dezentraler Fonds, der zukünftige Sicherheitsüberprüfungen subventioniert, )

Zusätzliche Information:

Was ist der Unterschied zwischen einer harten und einer weichen Gabel?Ein Soft Fork bedeutet, dass ein Zustand/Block, der früher gültig war, in der neuen Version nicht mehr gültig ist. In diesem Fall würde ein Zustand, der dazu führen würde, ETH aus einem Vertrag mit dem Code des DAO auszugeben, als ungültig angesehen. Ein Hard Fork macht einen Zustand gültig, der vorher nicht gültig war. Der große Vorteil einer Soft Fork ist, dass nur Miner ihre Software aktualisieren müssen. Obwohl es letztendlich jeder tun sollte - wenn alle auf genügend Bestätigungen warten, werden sie nur Zustände akzeptieren, die nach den neuen Regeln gültig sind. Bei einem Hard Fork müssen jedoch alle (Verbraucher, Börsen, ...) ihre Software aktualisieren. Andernfalls laufen sie Gefahr, ihre ETH und andere Vermögenswerte auf Ethereum zu verlieren. Aus diesem Grund sollte der Zeitraum zwischen Vereinbarung über den Fork und Ausführung des Forks viel größer sein, als es bei einem Soft Fork sein kann.

Können wir die Identität des Angreifers ausfindig machen? Dies ist eine offene Frage. Es besteht eine beträchtliche Wahrscheinlichkeit, dass der Angriff nicht lange im Voraus geplant wurde, sodass der Hacker Fehler gemacht haben könnte, indem er Adressen verwendet hat, die mit seiner Identität verknüpft werden können. Hier ist eine hervorragende Übersicht über die beteiligten Konten. Der Hacker war vorsichtig und verwendete nur ETH aus einer Transaktion von Shapeshift.

Wann hat der Hacker begonnen, diesen Angriff zu planen? Die beiden Schlüsselverträge, die die Token enthielten und die Logik darin hatten, dass die rekursive Aufteilung ermöglicht wurde, wurden 2 Tage vor dem Angriff erstellt. Also mindestens zwei Tage. Allerdings wurde 7 Tage vor dem Angriff eine Spaltung eingeleitet. Es ist jedoch noch nicht 100% klar, ob der Angreifer und der Initiator dieser Spaltung identisch sind. Es ist wahrscheinlich, aber nicht notwendig. Der Angreifer hätte jeden geteilten Vorschlag verwenden können. Aber selbst wenn der Angreifer der Initiator der Spaltung war, bedeutet das nicht, dass er den Angriff schon damals vorbereitet hat. Unter der Annahme, dass das DAO fehlerfrei war, gab es eine Arbitrage-Möglichkeit, DAO-Token für weniger als 0,01 ETH zu kaufen und sie mit einem Split in 0,01 ETH umzuwandeln.

Wenn der Soft Fork implementiert ist – kann ich trotzdem DAO-Token übertragen? Ja – jede Transaktion, die das ETH-Guthaben eines Kontrakts mit dem Code von theDAO nicht berührt, ist weiterhin möglich. Weitere Details zu verschiedenen Gabellösungen finden Sie hier

Dieses Wiki wurde von https://www.reddit.com/r/ethereum/comments/4os7l5/the_big_thedao_heist_faq von koeppelmann gestartet. Weitere Updates werden von der Community vorgenommen.

@Roland Kofler Ich verstehe diese Wiedereintrittssache, aber kann ich mehr Details darüber erhalten, wie der Angreifer mehr als 1 Transaktion ausgeben konnte, weil eine Transaktion erfolgreich das Gleichgewicht des Angreifers 0 im Haupt-DAO hergestellt hätte, aber wie die nächsten Transaktionen erfolgreich waren.

Eine sehr hohe, sehr vereinfachte Antwort.

Wenn Sie eine Split-Anfrage an das DAO senden, überprüft es Ihr Token-Konto, erstellt eine neue Kopie des DAO mit Ihren Ethern darin und reduziert dann Ihr Konto um die Anzahl der Token, die Sie aufgeteilt haben.

Reagiert die Adresse, von der Sie den Split-Request senden, auf die Antwort jedoch mit einem neuen Split-Request, ist Ihr Token-Konto noch nicht aktualisiert und Sie können mehr Token abrufen, als sich auf Ihrem Konto befinden.

Dadurch kann Ihr Token-Konto unter Null fallen, sodass Sie mehr Ether abrufen können, als Sie eingezahlt haben.

Woher kommen die zusätzlichen Ether?