Blockchain-Banditen räumen schwach geschützte Ethereum-Adressen aus

Adressen sind immer sicher? Nur, wenn der private Schlüssel dahinter gut ist. Ein Sicherheitsforscher zeigt, wie ein Hacker mehrere Zehntausend Ether stehlen konnte, weil der private Schlüssel zu schwach war.
Ein Artikel in der Wired berichtet von Adrian Bednarek, einem Sicherheitsberater, der sich mit Ethereum beschäftigt hat. Bednarak hat versucht, herauszufinden, welche Schwächen Ethereum haben könnte. Eher zum Spaß hat er mit einer ganz trivialen Methode begonnen: Er hat geschaut, was passiert, wenn man einen privaten Schlüssel benutzt, der den Wert “1” hat.
Man sollte dazu wissen, dass private Schlüssel bei Ethereum eine 78-stellige Reihe von Zahlen ist. Eine Wallet wählt diese gewöhnlich zufällig aus und errechnet aus ihr die Adresse. Wenn der private Schlüssel wirklich zufällig ist, ist es unmöglich, eine solche Adresse zu knacken. Bednarek vergleich die Chance, einen privaten Schlüssel zu finden, damit, ein Sandkorn an einem Strand auszuwählen, und später einen Freund zu bitten, dasselbe Sandkorn zufällig aufzuheben. Es ist quasi unmöglich, so, als würde man ein Dutzend Mal nacheinander den Jackpot im Lotto gewinnen.
Aber das trifft nur zu, wenn der private Schlüssel zufällig ist. Wenn er dagegen, wie von Bednarek getestet, den Wert “1” hat, sind die darauf gespeicherten Ether so gut wie gar nicht geschützt. Zu seiner Überraschung stellte er fest, dass die Adresse, die sich aus dem privaten Schlüssel “1” ableitet, einmal Ether gespeichert hatte. Die Coins wurden aber schon lange weiter überwiesen; der Berater nimmt an, dass es ein Dieb war, der dieselbe Idee wie er hatte.
Der Zufallstreffer weckte seine Neugierde. Er probierte die privaten Schlüssel 2, 3, 4 und so weiter – und fand dasselbe Ergebnis: Eine Adresse, auf der einmal Ether gespeichert waren, aber die bereits geleert worden war. Also begann er, die Methode zu automatisieren und einige Milliarden Schlüssel auszuproibieren. Die Ergebnisse werfen ein schockierendes Licht auf die Sicherheitspraxis bei Ethereum: Er entdeckte einige hundert einfach zu erratende private Schlüssel – und einen “Blockchain-Banditen”, der all diese Adressen geleert hatte. Rund 45.000 Ether – derzeit knapp 7 Millionen Euro – wurden auf diese Weise gestohlen.
Um dem Banditen auf die Spur zu kommen, hat Bednarek Ether im Wert von einem Dollar auf eine Adresse mit einem schwachen Schlüssel überwiesen, die bereits geleert worden war. Die Ether wurden in wenigen Sekunden weiter überwiesen. Dann überwies er einen Dollar auf eine neue, schwache Adresse. Auch diese wurde innerhalb von Sekunden ausgeräumt, diesmal von einem anderen Banditen. Kurz darauf sah Bendarek aber, dass der erste Bandit versuchte, die Coins ebenfalls zu überweisen. Doch ein anderer war ihm um Millisekunden zuvor gekommen. Das weist darauf hin, dass es mehrere Banditen gibt, die eine Menge Rechenleistung investieren, um die Ethereum-Blockchain nach schwachen Adressen zu scannen.
Wer der Bandit ist, kann er aber nicht sagen. Die Wired zitiert ihn damit, dass er “nicht überrascht wäre, wenn ein staatlicher Akteur dahintersteht, etwa Nordkorea, aber das ist Spekulation.” Ebenso kann er nur darüber spekulieren, wie es dazu kam, dass Ether mit einem nicht unbeträchtlichen Wert auf solchen schlecht geschützten Adressen lagen. Eventuell haben die Wallets einen Bug in der Schlüsselgenerierung; eventuell wurde die Software auch gezielt manipuliert, um schwache Schlüssel zu erzeugen. Vielleicht haben die User den privaten Schlüssel selbst ausgewählt, vielleicht haben sie auf unvorsichtige Weise eine Brainwallet gebildet.
Eine Brainwallet meint, dass man den privaten Schlüssel – oder die Seedphrase, aus der er sich ableitet – weder abspeichert noch aufschreibt, sondern sich lediglich merkt. Dies verleitet dazu, einfache Schlüssel zu verwenden. Ein Autor auf unserem Blog hat schon 2014 vor den Gefahren von Brainwallets bei Bitcoin gewarnt:
Jedes Jahr veröffentlichen Tech-Magazine eine Liste der beliebtesten Passwörter. Einige davon sind erschütternd phantasielos: 123456, password1, iloveyou, und so weiter. Das ist in Ordnung, wenn man eine Wegwerf-Emailadresse anmeldet oder sich bei einem Forum registriert, um einen einzigen Kommentar abzugeben. Aber es ist absolut nicht in Ordnung, wenn man ein Brainwallet anlegt. Ebenso gut könnten Sie Ihre Bitcoins an 1BitcoinEaterAdressDontSendf59kuE senden.
Bei der Recherche zu diesem Artikel habe ich brainwallet.org genutzt, um einige private Schlüssel zu erraten. Ich habe einfach einige Phrasen eingegeben, von denen ich dachte, sie hätte vielleicht jemand benutzt. Innerhalb weniger Minuten hatte ich eine Liste von privaten Schlüsseln zu Adressen, die tatsächlich einmal Bitcoins hatten. Die Passphrasen waren etwa:
bitcoin
password
password1
1234Diese Adressen sind nun leer. Warum? Ich hoffe, weil die Besitzer die Bitcoins an einen sichereren Ort überwiesen haben. Aber es ist wahrscheinlicher, dass sie gestohlen worden sind. Es gibt Bots, die ausgeklügelte Wörterbuch-Attacken durchführen. Sobald solche Adressen Bitcoins erhalten, werden diese auf andere Adressen überwiesen. Wenn Sie es testen wollen, überweisen Sie doch einfach einen winzigen Bitcoin-Betrag auf eine solche Adresse … Sie werden nicht lange warten müssen, um Bots in Aktion zu beobachten.
Das Phänomen ist also nicht unbedingt neu. Es erinnert aber daran, was im Hintergrund passiert: Maschinen laufen rund um die Uhr, um blitzschnell zu reagieren, wenn ein User einen Fehler macht. Es ist also angebracht, Vorsicht walten zu lassen.
Aber nicht nur Brain Wallets sind in Gefahr. Auch Wallets, die einen Fehler im Algorithmus haben, mit dem sie den privaten Schlüssel generieren, können ein Risiko darstellen. So hat etwa der “Large Bitcoin Collider” versucht, wahllos Adressen auf der Bitcoin-Blockchain zu knacken. Der Betreiber erklärt im Interview, dass die theoretische Sicherheit, die eine Bitcoin-Adresse bieten sollte, in der Praxis nicht ganz zu finden ist, ohne jedoch einen Grund dafür nennen zu können – und er spekuliert darüber, dass es in Zukunft Asic-Miner geben wird, die nicht versuchen, einen neuen Bitcoin-Block zu generieren, sondern Adressen zu knacken.
Blockchain-Banditen, das hört sich fast nett an.
Also wenn ich früher auf diese Idee gekommen wäre….:-)
Wieder ein cooler Artikel, merci.
Also wenn der private Schlüssel den Wert “1” hat, besteht der Schlüssel wirklich nur aus einer diesen Zahl “1” ohne weitere Zahlen?
Gute Frage. Ich denke, er besteht aus 77 Nullen und einer 1, weiß es aber nicht genau.
Der private Schlüssel ist eine Zahl. Punkt.
Wenn jemand die Zahl 1 als privaten Schlüssel nutzt, dann nutzt dieser die binäre Kodierung der Zahl 1 durch 256 Bits. Also eher 255 Nullen und eine Eins. Genauso gut kann man aber auch den String/Ziffer “1” nehmen. Das wäre dann das entsprechende Byte. Aber im Endeffekt auch wieder eine Zahl zwischen 0 und 255.
Das sowas bei Ethereum (immer noch) funktioniert ist erschreckend da die Methode ein alter Hut ist. Bei Bitcoin wurden die Werte in der Regel wenigstens noch gehasht um einen private Key zu generieren. Auch wenn das natürlich keinen Unterschied macht, wenn man weiss, wie oft gehasht wurde.
OK, erschreckend…
… aber was ist zu tun?
Eine Adresse brauch ich nun mal, damit auch den privaten Schlüssel… ob online oder paper-Wallet.
Wie erkenne ich “schwache” private Schlüssel? Erst wenn meine Coins weg sind?
Hilft multi-signature?
Multisignature verteilt das Risiko, ja.
An sich – eine gute Wallet-Software nehmen, die sich weithin bewährt hat, plus ein sauberes System. Unter Umständen und wenn möglich auch den privaten Schlüssel anschauen, ob er zufällig genug “aussieht”.
Es empfiehlt sich IMMER Gedanken über den Pseudozufallszahlengenerator zu machen, welcher im genutzten System “verbaut” ist.
Nicht umsonst ist “Zufall” ein zentrales Konzept in der Kryptographie. Ist der Pseudozufallsgenerator nicht zufällig, dann lassen sich Passwörter erraten. Lassen sich Passwörter erraten, dann ist die entsprechende Kryptographie schwach.
Private Keys sind immer (nur) Pseudozufallszahlen, bei Bitcoin z.B. immer eine Zahl im Intervall [0,(2^256)-1]. Ist der Pseudozufallszahlengenerator schlecht, dann landet man vielleicht immer nur zwischen 0 und 2^10 und schon ist die entsprechende Wallet geleert.
Auch werden Pseudozufallszahlengeneratoren immer mit einer Seed gestartet. Ist diese schwach und der Algorithmus des Pseudozufallszahlengenerators bekannt, dann lässt sich die Sequenz der generierten Pseudozufallszahlen vollständig vorhersagen. Ein Rechner ist ja in gewisserweise ein isoliertes System und echter Zufall MUSS von aussen eingeführt werden. Deshalb muss man bei manchen Programmen die Maus möglichst zufällig hin und her bewegen (veracrypt).
Für Linux gibt es Programme bzw. Dienste (z.B. haveged), welche aus Nutzereingaben und Hardware zusätzliche “Entropie” erzeugen, damit die Seed des Zufallsgenerators maximal zufällig ist und praktisch unvorhersagbar wird. Auch wird dieser zusätzliche Zufall in die Zufallszahlengenerierung untergemischt.
Also, macht euch schlau wo der Zufall auf eurem System herkommt!
Wieso denn einer fremden Software das Erstellen des privaten Schlüssels überlassen?
Musste herzlich lachen über das “staatliche Akteure wie zum Beispiel Nord-Korea”.
Also staatliche Akteure von denen wir WISSEN dass sie schlimme Dinge tun sindt ja eher die NSA. Und das FBI hat auch noch einig Bitcoin von mir (auch wenn die damals als SR1 dicht gemacht wurde nicht viel wert waren)… Also bitte. 🙂