Der 300 Millionen Dollar Programmierfehler.
Es ist wieder etwas los auf der Ethereum-Blockchain: ein unbedarfter Benutzer brachte es fertig, geschätzte 300 Millionen US-Dollar vor allen Augen einzufrieren. Ausgelöst wurde dies dank einer Schwäche in einem Blockchain-Programm.
Die Ethereum-Blockchain bietet die Möglichkeit, einen Programmcode auf der Blockchain auszuführen. Dieser Programmcode teilt einige der positiven Eigenschaften der Blockchain, unter anderem:
- Nachvollziehbarkeit: es ist für jeden ersichtlich, wie der Programmcode ausgeführt wurde.
- Unumkehrbarkeit: das Resultat der Ausführung eines Programmes auf der Blockchain gilt. Unumstösslich. Ausser man dreht das Rad der Zeit zurück, dazu später mehr.
Die Idee selber ist brillant und hat das Potenzial, ganze Industrien zu revolutionieren, insbesondere auch die rechtliche Branche, darüber wurde unter anderem auch in diesem Blog genug berichtet.
Das Problem ist, dass sich Fehler in Programmen als sehr fatal erweisen können. Während "normale" Bugs unter normalen Umständen zu Datenverlusten oder Dienstunterbrüchen führen, sind in einer Blockchain immer Cryptotoken involviert. Ethereum besteht aus "Accounts", welche entweder von Menschen oder von Programmen geführt werden.
Falls ein Programm einen Fehler hat, von dem man ab einer gewissen Komplexität an ausgehen kann, können diese Programme zweckentfremdet werden, respektive nicht im Sinne des Entwicklers und Benutzers, aber gemäss der kühlen Logik des Programmcodes verwendet werden.
Tagesschauwürdig wurde der "DAO Hack", in dem im Juni 2016 eine Schwachstelle in einer "Distributed Autonomous Organisation" ausgenutzt wurde, um vorher gesammelte Cryptotoken aus dem Account des DAOs zu … stehlen? Entwenden? Oder, eben: zu benutzen, ganz im Sinne des Codes?
Das Resultat war ein Stück weit ein Sündenfall der Blockchain-Philosophie: vereinfacht gesagt wurde für den DAO das Rad der Zeit in einem Hardfork zurückgedreht, der das Geschehene ungeschehen machte. Eine Minderheit der Community war mit diesem Vorgehen nicht einverstanden, und blieb auf der klassischen Blockchain (Ethereum classic).
Ganz ähnlich war der "Parity Hack" vom Juli 2017. Ein grosser Unterschied ist, dass es diesmal keinen Hard fork gab. Der Hersteller des Programms gelobte Besserung und lieferte eine scheinbar sichere Version des Programms ab. In der Zwischenzeit versucht der Hacker bis heute sein Konto in "normale" Währung auszutauschen.
Nun, scheinbar hat es nicht viel genutzt: https://paritytech.io/blog/security-alert.html
Wohlgemerkt: es handelt sich wieder um das gleiche Programm, welches im Juli gefixt wurde.
https://github.com/paritytech/parity/issues/6995, eine Fehlermeldung für schlaflose Nächte…
Interessant ist dieses Mal die Tatsache, dass ein Fehler höchstwahrscheinlich nicht bösartig ausgenutzt wurde.
Ein Benutzer machte sich fälschlicherweise zum einzigen Inhaber eines Programms, welches von anderen Programmen als Library verwendet wird. Diese Library wurde von einigen anderen Programmen verwendet, welche die geschätzten 300 Millionen Dollar an Wert verwalten. Der Benutzer geriet in Panik, und löste den Selbstzerstörungsmechanismus der ehemaligen Library aus. Das Resultat: alle abhängigen Programme sind nun definitiv “Dumb contracts”, und können nichts mehr machen, die Cryptotoken sind blockiert.
Was sind die Fehler? Was sind die Folgen? Und wie kann man sich besser vor solchen Fehlern schützen? Das folgt in einem nächsten Blogbeitrag.
Kontakt: christian.sprecher@weblaw.ch