Forscher haben mehrere Schwachstellen in der Bibliothek BitcoinJS entdeckt, durch die Bitcoin-Wallets, die vor einem Jahrzehnt online erstellt wurden, anfällig für Hackerangriffe sein können. Das Grundproblem: Die privaten Schlüssel für diese Krypto-Wallets wurden mit viel größerer Vorhersehbarkeit generiert, als die Entwickler der Bibliothek damals erwartet hatten.
Randstorm-Schwachstellen und deren Folgen
Aber schön der Reihe nach. Forscher von Unciphered, einem Unternehmen, das auf die Wiederherstellung des Zugriffs auf Krypto-Wallets spezialisiert ist, haben eine Reihe von Schwachstellen in der JavaScript-Bibliothek BitcoinJS entdeckt und beschrieben, die von vielen Online-Krypto-Plattformen verwendet wurde. Zu diesen Diensten gehören einige sehr beliebte Dienste, allen voran Blockchain.info, inzwischen bekannt als Blockchain.com. Die Forscher tauften diese Schwachstellen Randstorm.
Obwohl die Schwachstellen in der BitcoinJS-Bibliothek bereits 2014 behoben wurden, bleibt das Problem für die Ergebnisse der Verwendung dieser Bibliothek bestehen: Krypto-Wallets, die Anfang der 2010er Jahre mit BitcoinJS erstellt wurden, sind möglicherweise unsicher – es ist viel einfacher, die privaten Schlüssel herauszufinden, als die zugrunde liegende Bitcoin-Kryptografie vermuten lässt.
Die Forscher schätzen, dass mehrere Millionen Wallets im Gesamtwert von rund 1,4 Millionen BTC durch Randstorm potenziell gefährdet sind. Von den potenziell verwundbaren Wallets sind den Forschern zufolge drei bis fünf Prozent tatsächlich anfällig für echte Angriffe. Basierend auf dem geschätzten Bitcoin-Wechselkurs von etwa 36.500 US-Dollar zum Zeitpunkt der Veröffentlichung würde dies eine Gesamtbeute von 1,5 bis 2,5 Milliarden US-Dollar bedeuten, falls Angreifer Randstorm erfolgreich ausnutzen könnten.
Die Forscher bekräftigen, dass die Randstorm-Schwachstellen tatsächlich für Angriffe auf Krypto-Wallets genutzt werden können. Darüber hinaus nutzten sie selbst diese Schwachstellen erfolgreich aus, um den Zugriff auf mehrere Krypto-Wallets wiederherzustellen, die vor März 2012 auf Blockchain.info erstellt worden wurden. Aus ethischen Gründen veröffentlichten sie keinen Proof-of-Concept des Angriffs, sonst wären Zehntausende Krypto-Wallets einem direkten Diebstahlrisiko ausgesetzt gewesen.
Die Forscher haben bereits die Online-Dienste für Kryptowährungen benachrichtigt, von denen bekannt ist, dass sie damals verwundbare Versionen der BitcoinJS-Bibliothek eingesetzt haben. Diese Dienste wiederum informierten Kunden, die von Randstorm betroffen sein könnten.
Die Funktionsweise der Randstorm-Schwachstellen
Sehen wir uns nun genauer an, wie diese Schwachstellen praktisch funktionieren. Das Herzstück der Sicherheit von Bitcoin-Wallets ist der private Schlüssel. Wie jedes moderne kryptografische System ist Bitcoin darauf angewiesen, dass dieser Schlüssel geheim und nicht zu knacken ist. Auch hier werden, wie in jedem modernen kryptografischen System, sehr lange Zufallszahlen verwendet.
Und wenn Daten durch einen privaten Schlüssel geschützt werden, muss dieser aus Sicherheitsgründen möglichst zufällig sein. Je vorhersehbarer die als Schlüssel verwendete Zahl ist, desto einfacher und schneller kommt ein Angreifer, der über Informationen zum Verfahren der Schlüsselgenerierung verfügt, mit Brute-Force-Angriffen zum Ziel.
Denken Sie daran, dass das Generieren einer echten Zufallszahl kein Kinderspiel ist. Und Computer sind für diese Aufgabe von Natur aus äußerst ungeeignet. Sie verhalten sich nun einmal höchst vorhersehbar. Daher geht es hier normalerweise um Pseudozufallszahlen. Und um die Entropie (so nennt man in der Kryptografie das Maß der Unvorhersehbarkeit) bei der Generierung zu erhöhen, werden spezielle Funktionen eingesetzt.
Doch nun zurück zur Bibliothek BitcoinJS. Um „qualitativ hochwertige“ Pseudozufallszahlen zu erhalten, verwendet diese Bibliothek eine andere JavaScript-Bibliothek namens JSBN (JavaScript Big Number) und ganz speziell deren Funktion SecureRandom. Wie der Name schon sagt, wurde diese Funktion entwickelt, um Pseudozufallszahlen zu generieren, die sich für die Verwendung in der Kryptografie eignen. Um die Entropie dieser Zahlen zu erhöhen, verwendet SecureRandom die Browserfunktion window.crypto.random.
Und eben hier liegt das Problem: Obwohl die Funktion window.crypto.random in der Browserfamilie Netscape Navigator 4.x vorhanden war, waren diese Browser bereits veraltet, als Webservices mit der aktiven Verwendung der BitcoinJS-Bibliothek begannen. Und in den damals gängigen Browsern Internet Explorer, Google Chrome, Mozilla Firefox und Apple Safari war die Funktion window.crypto.random überhaupt nicht implementiert.
Leider hatten die Entwickler der JSBN-Bibliothek vergessen, eine Überprüfung oder entsprechende Fehlermeldung vorzusehen. Darum übersprang die SecureRandom-Funktion den Schritt zur Erhöhung der Entropie einfach und überließ die Aufgabe, private Schlüssel zu erstellen, dem standardmäßigen Pseudozufallszahlen-Generator Math.random.
Dies ist schon an sich schlecht, da Math.random nicht für kryptografische Zwecke geeignet ist. Es kommt aber noch schlimmer: Die Math.random-Implementierung in den gängigen Browsern der Jahre 2011 bis 2015, insbesondere in Google Chrome, enthielt Fehler. Dadurch wurden noch weniger Zufallszahlen verwendet als eigentlich vorgesehen.
Die Bibliothek BitcoinJS wiederum übernahm alle oben genannten Probleme von JSBN. Als Folge erhielten Plattformen, die auf diese Weise private Schlüssel für Krypto-Wallets generierten, viel weniger Zufallszahlen von der SecureRandom-Funktion, als die Entwickler der Bibliothek erwartet hatten. Und da diese Schlüssel mit hoher Vorhersehbarkeit generiert wurden, sind sie viel einfacher durch Brute-Force-Angriffe zu knacken und anfällige Krypto-Wallets können gekapert werden.
Wie bereits erwähnt, sind das nicht nur theoretische Überlegungen, sondern eine ganz praktische Gefahr – dem Unciphered-Team gelang es, diese Schwachstellen auszunutzen, um den Zugriff auf mehrere alte Krypto-Wallets, die auf Blockchain.info erstellt worden waren, wiederherzustellen (d. h. legal zu hacken).
Wer ist von Randstorm bedroht?
BitcoinJS nutzte die anfällige JSBN-Bibliothek seit ihrer Einführung im Jahr 2011 bis 2014. Einige Kryptowährungsprojekte verwendeten jedoch möglicherweise auch noch später eine veraltete Version der Bibliothek. Die Fehler, die Math.random in gängigen Browsern betrafen, wurden bis 2016 durch geänderte Algorithmen zur Erzeugung von Pseudozufallszahlen behoben. Insgesamt ergibt sich also ein ungefährer Zeitraum von 2011 bis 2015, in dem potenziell verwundbare Krypto-Wallets erstellt wurden.
Die Forscher betonen, dass BitcoinJS Anfang der 2010er Jahre sehr beliebt war, sodass es schwierig ist, eine vollständige Liste der Dienste zu erstellen, die möglicherweise eine anfällige Version einsetzten. Der Bericht enthält eine Liste der Plattformen, die als gefährdet eingestuft wurden:
- BitAddress — noch in Betrieb.
- BitCore (BitPay) — noch in Betrieb.
- Bitgo — noch in Betrieb.
- info — weiterhin als Blockchain.com in Betrieb.
- Blocktrail — wird zu [code] https://btc.com [/code] oder [code] https://blockchair.com [/code]
- BrainWallet — stillgelegt.
- CoinKite — verkauft jetzt Hardware-Wallets.
- CoinPunk — stillgelegt.
- Dark Wallet — wird zu [code] https://crypto-engine.org [/code]
- DecentralBank — stillgelegt.
- info (Block.io) — noch in Betrieb.
- EI8HT — stillgelegt.
- GreenAddress — wird zu [code] https://blockstream.com/green/ [/code]
- QuickCon — stillgelegt.
- Robocoin — stillgelegt.
- Skyhook ATM — wird zu [code] https://yuan-pay-group.net [/code]
Neben Bitcoin-Wallets können auch Litecoin-, Zcash- und Dogecoin-Wallets gefährdet sein, da es auch für diese Kryptowährungen BitcoinJS-basierte Bibliotheken gibt. Es ist anzunehmen, dass diese Bibliotheken verwendet wurden, um private Schlüssel für die entsprechenden Krypto-Wallets zu generieren.
Der Unciphered-Bericht enthält noch eine Vielzahl weiterer Feinheiten, die mit Randstorm zusammenhängen. Das Fazit ist, dass zwischen 2011 und 2015 mithilfe der anfälligen Bibliothek erstellte Wallets in unterschiedlichem Maße anfällig sein können.
So schützen Sie sich vor Randstorm
Wie die Forscher selbst feststellen, lässt sich dieses Problem nicht durch das Beheben der Schwachstelle lösen: Es ist nicht möglich, die privaten Schlüssel der Wallet-Besitzer „zu patchen“ und durch sichere Schlüssel zu ersetzen. Zwar wurden die Fehler schon längst behoben, trotzdem betreffen sie aber weiterhin die Krypto-Wallets, die erstellt wurden, als die beschriebenen Fehler in der BitcoinJS-Bibliothek vorlagen. Darum müssen die Besitzer gefährdeter Wallets selbst Schutzmaßnahmen ergreifen.
Da es schwierig ist, eine vollständige Liste der Kryptowährungsplattformen zu erstellen, die diese anfällige Bibliothek verwendet haben, sollten Sie besser auf Nummer sicher gehen: Betrachten Sie alle zwischen 2011 und 2015 online erstellten Krypto-Wallets als potenziell unsicher (es sei denn, Sie wissen definitiv, dass dies nicht der Fall ist). Und je dicker das Wallet ist, desto verlockender ist es für Kriminelle.
Die offensichtliche (und einzige) Lösung des Problems besteht darin, neue Krypto-Wallets zu erstellen und das gesamte Guthaben aus potenziell anfälligen Wallets dorthin zu übertragen.
Und da dies auf jeden Fall notwendig ist, sollten Sie dabei mit äußerster Vorsicht vorgehen. Der Schutz von Kryptowährungen ist äußerst komplex. Aus diesem Grund haben wir für Sie eine umfassende Checkliste mit vielen Zusatzinfos zusammengestellt. Unsere Tipps finden Sie ganz einfach über die folgenden Links:
- Informieren Sie sich ausführlich über die wichtigsten Krypto-Bedrohungen und die entsprechenden Schutzmethoden.
- Machen Sie sich mit den Unterschieden zwischen Hot Wallets und Cold Wallets vertraut und werfen Sie einen Blick auf die gängigsten Angriffsmethoden.
- Verwenden Sie ein Hardware-Wallet (Cold Wallet) für die langfristige Speicherung der wichtigsten Krypto-Assets und ein Hot Wallet mit minimalen Guthaben für tägliche Transaktionen.
- Rüsten Sie alle Ihre Geräte mit einem zuverlässigen Schutz aus, bevor Sie das Guthaben von Ihrem alten Wallet auf das neue übertragen. Er schützt Ihr Smartphone oder Ihren Computer vor Trojanern, die nach Passwörtern und privaten Schlüsseln suchen, sowie vor Clippern, die die Krypto-Wallet-Adressen in der Zwischenablage ersetzen. Außerdem ist Ihr Computer dann vor bösartigen Krypto-Minern und unbefugtem Remote-Zugriff sicher.
- Speichern Sie niemals ein Foto oder einen Screenshot der Seed-Phrase auf Ihrem Smartphone, veröffentlichen Sie Ihre Seed-Phrase niemals in öffentlichen Clouds, senden Sie sie niemals über Messenger oder E-Mail und geben Sie die Phrase nirgendwo ein, außer wenn Sie einen verlorenen privaten Schlüssel wiederherstellen wollen.
- Bewahren Sie Ihren privaten Schlüssel und die Seed-Phrase für seine Wiederherstellung auf sichere Weise auf. Dafür eignet sich das Identitätsschutz-Wallet in Kaspersky Premium, das alle gespeicherten Daten mit AES-256 verschlüsselt. Das Passwort des Datenspeichers wird nirgendwo gespeichert, außer in Ihrem Kopf (es sei denn, Sie schreiben es auf einen Klebezettel an Ihrem Monitor), und es kann nicht wiederhergestellt werden. Daher haben nur Sie alleine Zugriff auf Ihre persönlichen Dokumente.
- Eine andere Möglichkeit ist die Verwendung eines Cold Wallet, dass keine Seed-Phrase für das Backup des privaten Schlüssels erfordert. So funktioniert beispielsweise das Hardware-Wallet Tangem.