Website-Icon BitcoinBlog.de – das Blog für Bitcoin und andere virtuelle Währungen

Die Abwicklung der DAO

Zwischen Hype und Ruin liegen nur wenige Wochen: Noch bevor sie das erste Projekt finanziert hat, ist die DAO vernichtet. Einem Hacker gelang es, mehr als 3 Millionen Ether abzuziehen, weil der Smart Contract einen Bug hat. Die Community sucht rastlos nach Lösungen, wie man dem Angriff begegnet und die DAO geordnet abwickelt. Für Ethereum wird die DAO mehr und mehr zur Zerreissprobe – und zu einer Richtungsentscheidung.

Am 17. Juni erlebten die Besitzer von DAO-Token das größte anzunehmende Unglück, den gau: Die DAO wurde gehackt. Einem Angreifer gelang es, sich Pakete von jeweils 258,0565 Ether an eine Unter-DAO auszuzahlen. Die DAO-Investoren mussten ohnmächtig zusehen, wie die DAO „durch den eisernen, unerschütterlichen Willen von unaufhaltsamem Code“ (so ein DAO-Werbeslogan) ausgesaugt wurden. Gut 14.000 Transaktionen später hatte der Hacker mehr als 3,6 Millionen Ether – rund 50 Millionen Dollar – in seiner Sub-DAO. Zurück lässt er ein gescheitertes Experiment.

Stephen Tual von slock.it hat die DAO wie kaum ein anderer beworben. Auf dem blog von slock.it schreibt er einen Tag später:

Gestern morgen geschah das Undenkbare: Die DAO, ein Projekt, das von der Community auf Basis des DAO Framwork 1.0 ins Leben gerufen wurde, wurde kompromitiert.

Die Monate, in denen die harte Arbeit und die außergewöhnliche Gunst tausender von Individuen die erste große Dezentrale Autonome Organisation erschaffen haben, wurden mit einem Schlag zunichte gemacht […] Für unser Team, das sieben Monate lang unbezahlt Tag und Nacht gearbeitet hat, um die DAO zu erzeugen, war dies ein Schlag ins Gesicht. Unabhängig davon, dass unsere Firma als Ganzes am Freitag einen signifikanten finanziellen Verlust hinnehmen musste. Der Angreifer, was auch immer seine Motive sind, hat offenbar gewonnen.

Der Hack allerdings war nicht „undenkbar“, sondern kam mit Ansage. Es gibt vermutlich niemanden, der dies besser wissen hätte können als Stephen Tual.

Bug bekannt, Risiko verkannt

Bereits am 9. Juni hatte Peter Vessens auf einen Bug in einigen Smart Contracts hingewiesen, der es einem Angreifer möglicherweise erlaubt, den Vertrag zu leeren, wenn dieser in irgendeiner Weise User Balances beobachtet und nicht sehr, sehr sorgfältig geschrieben wurde. Die MakerDAO, ein anderes Projekt im Ethereum-Bereich, war von diesem Bug betroffen; deren Entwickler konnten die Guthaben jedoch schnell genug abziehen, indem sie den Bug selbst ausnutzen.

Für Die DAO selbst sei dieser Bug, so Stephen Tual am 12. Juni, kein Problem. Es seien keine Guthaben in Gefahr. Christian Reitwießner, der „Vater“ von Solidity, der beliebtesten Ethereum-Programmiersprache, hatte diese Bug bereits im DAO-Framework während der Entwicklung entdeckt und ausgeschaltet. Erst kurz zuvor habe jemand im DAO-Forum davor gewarnt, dass die DAO-Entwickler diesen Bug zwar in dem die Proposals abdeckenden Code-Abschnitt entdeckt, aber im Reward-Abschnitt übersehen hatten. Er war also noch im Code.

Slock.it hat, so Stephen Tual, umgehend einen Fix für das Upgrade des DAO-Frameworks geschrieben. Da derzeit noch keine Ether im Reward-Account der DAO liegen – also dem Account, von dem aus Erträge an die DAO-Mitglieder ausgezahlt werden sollen – bestünde derzeit allerdings keine Gefahr, so Tual: „Dies ist KEINE Sache, die DAO Guthaben heute irgendeinem Risiko aussetzt.“

„Es gibt 100 bis 200 Leute auf der Welt, die dazu in der Lage sind.“

Tual und die anderen DAO-Entwickler haben sich offenbar geirrt. Etwa zur selben Zeit, als Tual versicherte, dass kein Risiko bestehe, schleuste der Angreifer ein Propsal ein, das dazu führen sollte, dass die DAO fünf Tage später kaputt geht. Vitalik Buterin, der Gründer von Ethereum, schrieb am 17. Juni auf dem Blog von Ethereum:

Ein Angriff auf die DAO wurde gefunden und ausgenutzt, und der Angreifer ist derzeit dabei, die Ether aus der DAO in eine Sub-DAO zu entleeren. Der Angriff wird ‚recursive calling vulnerability‘ genannt. Ein Angreifer ruft die split-Funktion auf, und ruft dann die Split-Funktion erneut rekursiv in dem Split auf, wodurch er viele Ether in einer einzigen Transaktion sammelt.

Phil Daian, Doktorant an der Cornell University, erklärt auf Hacking, Distributed genauer, was bei dem Hack geschah. Die Grundlage ist die folgende: Die DAO erlaubt es den Investoren, einen Split vorzuschlagen und sich damit von der Rest-DAO zu trennen und eine eigene Sub-DAO zu gründen. Diese Option erlaubt es den Teilnehmern, entweder einen neue DAO zu gründen oder auszusteigen, wenn sie mit dem Kurs der DAO unzufrieden sind. Das Whitepaper der DAO widmet sich dieser Möglichkeit ausführlich; sie war mit ein Grund, weshalb ein Investment in die DAO so sicher erschien.

Diese Split Option kann jedoch, so Daian, durch einen „recursive send pattern“ angegriffen werden. Das läuft dann so ab: Man zahlt die DAO-Token an eine Sub-DAO aus und ordnet die Auszahlung der zugehörigen Ether an. Noch bevor aber der Contract das Guthaben prüft, wird die Split-Funktion erneut aufgerufen und die Auszahlung von Ether angeordnet. Auf diese Weise bekommt man eine unendliche Rekursion, also eine endlose Schleife, mit der der Hacker den Anteil von Ether, der zu seinen DAO-Token gehört, unendlich oft auszahlen kann.

Es geschah also das Folgende: Der Hacker hat ein Proposal für einen Split eingereicht. Der Titel war „lonely, so lonely„. „Es ist ja nur ein Split Proposal, wie so viele andere,“ kommentiert Daian etwas sarkastisch,  „keiner wird es genau anschauen, oder?“ Tatsächlich – das Proposal wurde nach Ablauf des vorbestimmten Zeitraums von 7 Tagen freigeschalten.

Anschließend hat der Hacker einige kleine Ether-Beträge an den Reward-Account der DAO gesendet. Ohne Reward (Auszahlung der Erträge) funktioniert der Angriff nicht, wie Stephen Tual korrekterweise festgesellt hatte, doch mit der Überweisung einiger Wei (kleinste Einheit von Ether) an den Reward Account konnte der Hacker den Start eines Prozesses beginnen, den ich nicht verstehe, der aber offenbar dazu geführt hatte, dass fortlaufend ein Reward von 0 ausgezahlt wurde, was den rekursiven Aufruf der Ether-Auszahlung ermöglichte.

Insgesamt handelt es sich um einen ziemlich komplexen Angriff. „Man braucht 7 Tage, um eine solche Attacke zu initiieren,“ schreibt Stephen Tual, „was bedeutet, dass der Angreifer das Proposal innerhalb von 24 Stunden eingereicht hatte, nachdem der Angriff publiziert wurde. Ich schätze, es gibt etwa 100-200 Leute auf der Welt, die den notwendigen Einblick in Ethereum und die Meisterschaft in Solidity haben, um einen solchen Angriff in so kurzer Zeit zu starten.“

Softfork, Hardfork

Und nun? Wie geht es weiter? Der Hacker ist mit etwa einem Drittel der DAO-Funds im Besitz von etwa 4 Prozent aller verfügbaren Ether, die weiteren zwei Drittel stehen auf der Kippe. Da die DAO rund 12 Prozent aller Ether umfasst, ist sie das, was man in der echten Welt „too big too fail“ nennt und was im Falle eines Unglücks die Rettung durch das Kollektiv – also den Steuerzahler – nach sich ziehen würde.

Ähnlich soll es bei Ethereum ablaufen. Allerdings sollen die Steuerzahler (User) nicht direkt für den DAO-Verlust aufkommen, sondern höchstens dadurch, dass sie möglicherweise die Glaubwürdigkeit von Ethereum und damit ihrem Investment aufs Spiel setzen. Aber beginnen wir von vorne:

Der Hacker ist derzeit nicht in der Lage, die Ether unmittelbar auszuzahlen, da der Code der DAO bestimmt, dass dies erst 27 Tage nach Gründung der Child DAO möglich ist. Also am 14. oder 15. Juli. Dies ist demnach keine Rettung, sondern nur eine Verzögerung des bis dahin Unvermeidbaren. Daher brachte Vitalik Buterin auf dem Blog von Ethereum noch am 17. Juni eine weitere Lösung ins Spiel:

Eine Softfork wurde vorgeschlagen, die (ohne ein Rollback; keine Transaktion und kein Block wird zurückgenommen) jede Transaktion ungültig macht, die einen Aufruf macht, um die Balance eines Accounts zu reduzieren, in dem der Code Hash  0x7278d050619a624f84f51987149ddb439cdaadfba5966f7cfaea7ad44340a4ba zur Transaktion führt … Dies wird verhindern, dass die Ether vom Angreifer nach Ablauf der 27 Tage abgezogen werden können. Damit erkaufen wir uns genügend Zeit, um weitere potenzielle Schritte zu diskutieren, etwa wie man den Token-Besitzern die Möglichkeit gibt, ihre Ether zu bergen.

Das bedeutet: Eine Softfork soll das Guthaben des Hackers einfrieren, bis eine Hardfork die Transaktion rückgängig macht. Eine Softfork ist eine abwärtskompatible Änderung des Codes, die für alle Miner verpflichtend, aber für die Knoten freiwillig ist. Sprich: wenn die Miner forken, können Sie Ihren alten Client weiterhin benutzen. Eine Hardfork hingegen ist ein Update, das vom ganzen Netzwerk verlangt, mitzugehen, und gilt darum als besonders kontrovers und riskant, da sie, anders als eine Softfork, droht, zwei nicht kompatible Netzwerke zurückzulassen.

Christoph Jentzsch von slock.it unterstützt die Pläne von Vitalik Buterin vollständig. Er kommentiert am 18. Juni: „Die Funds sind glücklicherweise nicht unter seiner [des Hackers] Kontrolle. Sie sind in der childDAO eingeschlossen. Wir von slock.it sind absolut für die von Vitalik skizzierte Lösung.“ Die Softfork friert die Ether des Hackers ein. Auf diese folgt eine Hardfork, die alle „Guthaben des Vertrags mit dem Code Hash 7278d050619a624f84f51987149ddb439cdaadfba5966f7cfaea7ad44340a4ba zu einem neuen Vertrag ‚RefundDAO transferiert‘, der die Ether auszahlt.“ Auf diese Weise soll die DAO rückwirkend abgewickelt werden. So, als hätte es sie niemals gegeben.

Bereits am selben Tag wurde für mehrere Ethereum-Clienten ein Pull Request für die anvisierte Softfork veröffentlicht.

Dürfen die das denn?

Mit dem Vorschlag der Soft- und Hardfork decken die Ethereum-Entwickler so gut wie alles ab, wogegen die Bitcoin-Community steht: Guthaben einfrieren, Transaktionen rückgängig machen, eine eilig durchgeführte Fork unter Zeitdruck, ein „Bail-out“ von Leuten, die unvorsichtig investiert haben … waren das nicht genau die Gründe, weshalb man Kryptowährungen gebracht hat? Dass man solche Fehler, Unzuverlässigkeiten und Points-of-Failure des Fiat-Geldes hinter sich lässt?

Das große Versprechen der Blockchain ist es, dass eine Transaktion irreversibel und die Datenbank unveränderlich ist. Wenn in der Blockchain ein Versprechen auf ein Guthaben steht, soll dies, komme, was da wolle, gültig bleiben. Eine Hardfork würde damit berechen.

Unmittelbar nach dem Hack setzte demnach in den sozialen Bitcoin-Medien ein Lobgesang auf die Core-Entwickler ein, die Bitcoin seit mehr als 7 Jahren durch Vorsicht und Umsicht sicher halten. Eine Reihe von Usern der Bitcoin-Foren, die stramm einer wirtschaftsliberalen Interpretation der Bitcoin-Ideologie stehen, schwärmten in die Ethereum-Foren aus, um gegen eine Fork zu trommeln: Wenn Ethereum den Weg der Fork geht, setzt es einen Präzedenzfall, der das Vertrauen Ethereum für immer ruiniert. Der DAO-Hack schadet nur den DAO-Investoren, die gewusst haben sollten, dass sie sich auf ein Experiment einlassen. Eine Intervention durch eine Hardfork hingegen droht, Ethereum als ganzes zu beschädigen. So wie ein Bailout durch einen Staat zwar einzelne Banken retten kann, aber das Problem auf die allgemeine Volkswirtschaft verlagert. Die Erfahrungen aus der Lehmann-Euro-Krise lassen grüßen.

Auf der anderen Seite steht das Argument, ob eine solche Intervention nicht notwendig ist, um größere Schäden zu verhindern. Kann Ethereum es sich leisten, dass ein Hacker 4-5 Prozent aller Ether besitzt? Diese Frage ist heikel, vor allem, da Ethereum plant, in Zukunft auf Proof-of-Stake umzusteigen, was bedeutet, dass die Miner nicht durch Computerpower hashen, sondern durch die Ether-Einheiten in ihrer Wallet. Dies würde dem Hacker eine erhebliche Machtposition im Ethereum-Ökosystem geben. Und, wie Stephen Tual im oben erwähnten Blogpost feststellt, sieht es nicht aus, als sei der Hacker Ethereum freundlich gesonnen:

Das ist ein exklusiver Club, und den Angreifern muss klar sein, dass eine Hardfork zwar kontrovers sein kann, aber eine Softfork ein No Brainer ist und sie daher niemals die Früchte ihrer Attacke genießen können. Die Angreifer haben es auch nicht des ‚Ruhmes‘ wegen getan, da keine Gruppe die Verantwortung übernommen hat.

Daher bleiben zwei Optionen: a) Die Angreifer haben den Markt ausgetrickst, und waren der Meinung, es sei die Ausführung einer High-Risk-Attacke sowie den Crash einer 225 Millionen Dollar Organisation wert, um ein paar Hunderttausend Dollar auf Poloniex, Bitfinex oder Kraken zu gewinnen. Oder sie taten es b), weil sie radikal gegen das Konzept der DAO und dessen Potenzial sind.

Der Hacker ließ sich nicht lumpen, Tual kurz darauf zu bestätigen. In einem Bekennerbrief, der zuerst auf pastebin.com veröffentlicht wurde und den später Mircea Popescu, ein militanter Bitcoin-Hardliner auf trilema.com sich selbst zuschrieb, erklärt der Hacker, warum er rechtmäßiger Besitzer der Ether sei:

Ich habe sorgfältig den Code der DAO untersucht und mich entschieden, an ihr teilzunehmen, nachdem ich ein Feature gefunden habe, das einen Split mit zusätzlichen Ether belohnt. Ich habe dieses Feature genutzt und rechtmäßig den Anspruch auf 3.641.694 Ether erhoben, und ich danke der DAO für diese Belohnung […]

Ich bin enttäuscht von jenen, die das Benutzen dieses Features einen ‚Diebstahl‘ nennen. Ich habe nur ein explizit im Code stehendes Feature genutzt, das Teil des Vertrags ist, und meine Anwälte haben mir bestätigt, dass diese Aktion vollständig in Einklang mit dem Recht der Vereinigten Staaten steht.

Eine Soft- oder Hardfork entspräche einer Beschlagnahmung rechtmäßig erworbener Ether. Sie würde, so der Hacker, „dauerhaft und unwiderruflich das Vertrauen in nicht nur Ethereum, sondern das ganze Feld der Smart Contracts und Blockchain-Technologie runieren.“ Er selbst behalte sich alle Rechte vor, rechtliche Schritte einzuleiten, um gegen die vorzugehen, die ihn durch Forks bestehlen wollen.

Jemand, der sich als Repräsentant des Teams der Hacker ausgibt, gab Cryptocoinsnews ein Interview. In diesem wiederholt er seinen Anspruch, rechtmäßiger Besitzer der erbeuteten Ether zu sein und verspricht, eine Million Ether an die Miner zu geben, die sich einer Soft Fork widersetzen. Besonders interessant ist folgende Passage:

CCN: Ich meine, gelesen zu haben, dass du sagst, Ethereum sei ein Shitcoin. Ist es eure Absicht, Ethereum in den Dreck zu ziehen, oder macht ihr es wegen dem Geld? Ist der Angriff also politisch motiviert oder nur finanziell?

Hacker: Die Leute hinter Ethereum sind Blender. So weiß zum Beispiel jeder, der ein wenig Ahnung hat (Adam Back, Gregory Maxwell), dass es 0 Prozent Chancen gibt, dass der „CASPER“ Proof of Stake jemals funktionieren wird. Aber sie werben dennoch damit.

Ich mag Ethereum nicht, ich mag slock.it nicht, aber das ist nicht der wichtigste Grund. Es geht ums Geld. Selbst wenn ich Ethereum lieben würde, hätte ich es getan.

Will man wirklich, dass so jemand 4 Prozent aller Ether hat? Eher nicht. Die Ethereum-Community scheint sich daher größtenteils einig zu sein, dass es in Ordnung ist, den Hacker aus dem Netzwerk zu forken. Ethereum ist noch ein Experiment, und ein einzelner Fehlschlag soll nicht die Kryptowährung an sich ruinieren können. Die DAO soll keine finanziellen Folgen haben, aber eine bleibende Erfahrung werden, wie einfach etwas schiefgehen kann, wenn man Turing-vollständige Smart Contracts schreibt.

Nicht zu handeln, so der Konsens, der sich in der Ethereum-Community bildete, kann Ethereum als ganzes vernichten, und es gibt keinen Grund, außer der Bitcoin-Ideologie, darauf zu verzichten, das Werkzeug der Fork einzusetzen. Ohnehin – wenn die Unveränderlichkeit von Blockchains nur darauf beruht, dass niemand einen Präzedenzfall schafft, ist sie nicht viel wert. Möglich ist, was der Code ermöglicht, und wenn die Community einstimmig einer Hardfork zustimmt, kann kein Code der Welt diese verhindern.

Mit der Entscheidung, eine Fork zu wagen, um einen Hack zu widerrufen, grenzt sich Ethereum noch weiter von Bitcoin ab. Dies kann zu einem wichtigen Ereignis in der Geschichte der Kryptowährungen werden.

Das Drama um den DAO-Hack ist damit allerdings noch nicht zu Ende …

Hack den Hacker!

Die Softfork, die die Guthaben des Hackers einfriert, war relativ schnell programmiert. Dennoch haben die Ethereum-Entwickler versucht, mit einem White-Hat-Angriff die verbleibenden Guthaben der DAO in Sicherheit zu bringen.

Leftis Karapetsas von slock.it schreibt dazu am 22. Juni:

Die vergangene Nacht war ereignisreich, um es vorsichtig auszudrücken. Der White Hat Hack auf die DAO wurde mit 2 child DAOs als Empfänger durchgeführt. Die erste child DAO enthält nun 7,277 Millionen Ethere, und die zweite 353.000 Ether. Insgesamt sind 7.630.479 Ether unter unserer Kontrolle.

Was geschah, war, dass die Ethereum-Entwickler einfach den Angriff wiederholt haben, um die verbleibenden Ether in Sicherheit zu bringen. Eigentlich sollte es nun möglich sein, die Ether an ihre rechtmäßigen Besitzer zurückzugeben. Allerdings haben die unter dem Codenamen „Robin“ vereinigten Entwickler die Rechnung ohne den Hacker gemacht: „Unglücklicherweise sind wir mittlerweile sicher, dass mindestens ein maliziöser Akteur in der White Hat Child DAO ist.“

Damit hat der Hacker also die Entwickler gehackt, als diese den Hacker selbst hacken wollten. Wie Leftis Karapetsas schreibt, bedeutet dies, dass einige oder alle Funds in der White Hat und Black Hat DAO für immer eingeschlossen sein werden, wenn sie nicht durch eine Fork befreit werden. Der White Hat Gegenangriff ist damit gescheitert.

Ein Bug in der Softfork

Die Rettung versprechende Softfork unter dem Arbeitstitel „The DAO wars“ war schnell veröffentlicht und die meisten Miner waren bereit, sie zu aktivieren. Sie sollte am 30. Juni in Kraft treten und sämtliche Transaktionen ungültig machen, die in Zusammenhang mit der „Dark DAO“ stehen. Jeder Block, der eine solche Transaktion beinhaltet, würde von den anderen Minern ignoriert werden.

Zwei Tage vor dem Inkrafttreten der Softfork ließ Hacking, Distributed jedoch die nächste Bombe platzen – und bewahrte Ethereum möglicherweise vor schwerwiegenden neuen Schäden: „Wir behaupten, dass die Softfork selbst einen neuen Attack-Vector einführt, der eine Denial of Service (DoS) Attacke auf Ethereum ermöglicht.“

Die Softfork macht es, so die Autoren, möglich, dass man mit sehr geringem Aufwand das Netzwerk daran hindern kann, valide Transaktionen zu prozessieren.

Ein Angreifer kann das Netzwerk mit Transaktionen fluten, die schwierig zu berechnen sind, und darin enden, eine Operation im DAO Vertrag auszuführen. Miner, die die Softfork aktiviert haben, würden diese Transaktionen ausführen müssen, um sie am Ende zurückzuweisen, ohne dafür Gebühren zu erhalten.

In der Regel reguliert das „Gas“ bei Ethereum die Arbeit der Miner. Man kann in eine Transaktion prinzipiell jede Aufgabe hineinschreiben, die ausgeführt werden muss, doch mit dem „Gas“ muss man die Miner dafür mit Ethereum bezahlen.

Doch mit der Softfork kommen Miner in eine neue Position, in der sie darin enden könnten, substanzielle Arbeit ausführen zu müssen, ohne dafür eine Kompensation zu erhalten. Die Softfork erzeugt eine neue und fundamental andere Klasse von Transaktionen […] deren Ausführung scheitert, ohne dass Gas bezahlt wird.

Schlimmer noch: da Miner ihre Transaktionen gewöhnlich nach dem bezahlten bzw. versprochenen Gas priorisieren, kann ein Angreifer seine bösartigen Transaktionen nach vorne bringen, indem er sie mit viel Gas ausschreibt, das er am Ende jedoch nicht bezahlen muss. „Das kann dazu führen, dass die Blöcke keinerlei gültige Transaktion mehr enthalten.“

Die Forscher schlagen einige mögliche Lösungen für das Problem vor, von denen sie keine überzeugend finden, und raten daher von der Softfork ab. Auch die Ethereum-Foundation spricht sich noch am selben Tag gegen die Softfork aus.

Was nun? Hardfork?

Es bleiben nun genau zwei Möglichkeiten: 1. nichts tun und damit dem Hacker 3,6 Millionen Ether überlassen und die weiteren 7,7 Millionen Ether der DAO vermutlich vernichten, oder 2. mit einer Hardfork die DAO und damit den Hack widerrufen. Viel Zeit bleibt der Ethereum-Community nicht, um diese Entscheidung zu treffen und umzusetzen.

Die mobile Version verlassen