Experiment: Hacking Ethereum Wallets - Bruteforce

Vor einiger Zeit bin ich durch Zufall auf ein Youtube-Video gestoßen mit dem Titel: "Eth Wallet Bruteforce Hack". Ein Programmierer zeigte da ein einfaches Python Script welches einen zufälligen Private-Key (64 Zeichen / 32 Byte / 256 Bit) generieren konnte. Daraus wurde Public-Key und Adresse errechnet und an einen Blockchain-Explorer-Webseite wie Etherscan.io übergeben ob diese Wallet existiert bzw. bereits eine Transaktion getätigt wurde. Der Autor suggerierte so das keine Wallet mehr sicher sei.

Soweit nun wirklich kein Hexenwerk, aber in jedem Fall witzig wie sehr die Leute so etwas feiern. Hier nun ein paar Hintergrundinformationen, warum dieser Youtube-Ansatz Schrott ist, und was man machen könnte, wenn man denn wollte und dazu noch zuviel Geld und Jahre Zeit hat. :D

Inhaltsverzeichnis:

Sind nun alle Ethereum-Wallets in Gefahr, wie auch Bitcoin und Co.? Elliptic Curve Digital Signature Algorithm (ECDSA), Sha256, secp256k1 und keccak256 gebrochen? Sicher nicht!

Zunächst einmal ein paar Fakten: Die Methode von diesem "Hacker" funktioniert theoretisch zumindest technisch! Problem hierbei ist unter anderem die mehr als langsame Performance der Umsetzung und der riesige (ich meine wirklich riesige!) Raum von Möglichkeiten in dem sich das Ganze abspielt.

Der Private-Key (Privater Schlüssel) jeder Wallet besteht aus 32 Byte sprich 256 Bit. Daher ergibt sich eine maximale Anzahl an Wallets und damit Möglichkeiten eine Wallet durch Zufall zu erraten von 2^256 (2 hoch 256). Die Zahl ausgeschrieben dazu sieht dann so aus:

115792089237316195423570985008687907853269984665640564039457584007913129639936

Diese enorme Masse an Möglichkeiten durchzuprobieren würde ewig dauern, zumal die vorgestellte Methode dieses Youtubers ca. 1 Versuch pro Sekunde zulässt, da jede Adresse einzelnt an eine Internetseite gegeben und auf Antwort gewartet werden muss. Selbst wenn man das über 10, 50 oder 100 Threads zeitgleich macht ist das noch immer sehr sehr sehr langsam und man braucht (keine Ahnung :D ) zehn-tausende Jahre? In jedem Fall sehr lange....

Bruteforcing Ethereum Wallets - Schritt 1: Vorbereitung

Da ich den Ansatz jedoch irgendwie lustig fand, habe ich mir überlegt wie man das Ganze in ein etwas realistischeres Licht rücken könnte. Vorbereitung ist alles!

  1. Eigenen Ethereum-Full-Node (z.B. GETH) aufsetzen.
  2. High-End Rechner (AMD Threadripper AMD Threadripper) kaufen mit 64 GB RAM oder mehr.
  3. Programmieren lernen (C, Python, whatever), Script-Kiddies kommen da ohnehin nicht weit.

Hat man die benötigten Komponenten am Start, und ist der eigene ETH-Node lauffähig,  programmiert man als erstes ein kleines Programm um alle Blöcke der Ethereum-Blockchain nach und nach einzulesen und die jeweils vorhandenen Transaktionen zu laden. Hier exportiert und speichert man nun alle ETH-Adressen (Wallets). Jeweils Sender, Empfänger und Miner. Das lässt man dann ein paar Tage oder Wochen laufen bis man alle Blöcke von 0 (ja Genesis-Block auch einlesen) bis aktuell über Block 9,41 Millionen (Stand Februar 2020) erfasst hat... So ergibt sich eine Datenbank mit über 66 Millionen ETH-Adressen bzw. Wallets.

Zum schnelleren Vergleichen und um die Datenmenge zu reduzieren würde ich die Adressen alle in Klein-Buchstaben speichern und das vorangestellte 0x (auch beim späteren vergleichen!) von jeder Adresse entfernen. Spart 2 Byte pro Datensatz, und somit stand heute (66 Mio. Adressen) etwa 120 MB RAM.

Bruteforcing Ethereum Wallets - Schritt 2: Ausprobieren

kraken.jpgZunächst sollte man die erfassten ETH-Adressen direkt als Datenbank in den Arbeitsspeicher (RAM) laden. So kann man am Besten von minimalen Zugriffszeiten und dem wirklich enormen Geschwindigkeitsvorteil gegenüber laden von HDD oder selbst SSD profitieren.

Key-Value-Datenbanken wie das Datenbank-System Redis.io bieten sich hier an. Hat man Redis laufen, und alle Daten importiert, freut man sich schonmal über einen echten Vorteil gegenüber dem Youtube-Hacker, denn die knapp 3 Gigabyte im Arbeitsspeicher, welche die gesamten Ethereum-Adressen gerade einmal einnehmen kann man relativ flott abfragen und auswerten. Nun ist man im Stande auf einem relativ herkömmlichen Rechner schon 250.000 bis zu 500.000 ETH-Adressen (async.) pro Sekunde auf Existenz zu prüfen, und nicht mehr bloss 1-10 pro Sekunde wie in dem Video gezeigt. Zumindest theoretisch sofern man entsprechende Private-Key und Adress-Paare bereits vorliegen hat, und nicht erst noch generieren muss.

Soweit sogut, jetzt muss man sich nurnoch ein Programm schreiben, welches Private-Keys generiert, den Public-Key errechnet, daraus die ETH-Wallet-Adresse ableitet und und mit der Datenbank abgleicht ob diese vorhanden ist. Wenn ja, haben wir einen Treffer. (Was nach wie vor sehr sehr sehr unwahrscheinlich ist -> siehe 2^256). ;-)

Ein entsprechendes Software-Tool könnte in etwa so aussehen:

Ethereum Wallet - Bruteforce-Tool

Wenn man schonmal dabei ist, kann man auch gleich eine kleine UI (Benutzeroberfläche) aufsetzen. Ein paar nützliche Optionen sind schnell integriert, wie das Auswählen der Thread-Anzahl, welche Gleichzeitig laufen und Keys generieren sollen. Eine nette Übung für alle die sich mal etwas anders mit Parallelisierung und Multithreading beschäftigen möchten.

Bei einem Treffer gibt man einfach eine Meldung wie "JACKPOT! -> 0x9980bCA3bdb37b265901f348De293933c5057B97;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1" aus. Wobei der erste Teil der Ausgabe die Adresse ist die gefunden wurde, und mit Semikolon-Getrennt der passende Private-Key dahinter. Aus den Anfängen von Ethereum, genau wie Bitcoin und vieler anderen Kryptowährungen gibt es unzählige Wallets welche nur durch ein sehr sehr unsicheren Private-Key geschützt sind. 64mal f und solche Sachen.

Auf einer relativ herkömmlichen CPU kann man so schnell mal 10.000 bis 20.000 Datensätze bestehend aus Private-Key und Wallet-Adresse generieren und auf eine Festplatte schreiben oder gleich mit der Redis-Datenbank abgleichen. Noch um einiges schneller geht es wenn man die Kerne der Grafikkarte bemüht.

amz l music.jpg

Abschließend bleibt zu sagen das dieses Experiment lediglich ein Experiment war. Nicht mehr und nicht weniger. Es war von vorn herein klar, das Sha256 nicht gebrochen wurde, und dieser Youtube-Kasperle mit seinem Python-Script nicht haufenweise Bitcoin und ETH-Wallets leer räumt. Theoretisch ist Bruteforcing machbar, praktisch aber quasi sinnlos, da man nicht nur ohne Ende Zeit benötigt sondern auch jede Menge Strom und Rechenleistung. Und wer weiß ob sich überhaupt etwas auf der Wallet befindet die man vielleicht in Jahren errechnet hat. :D

Ich würde mir wünschen das sich noch viel mehr Leute detailierter mit der Blockchain-Technologie beschäftigen und sich so noch viel mehr Anwendungsgebiete auftun. Ich denke es wird noch etwas dauern, aber Crypto-Währungen, Smart-Contracts, DeFi (decentralized finance) wird irgendwann nicht mehr wegzudenken sein - und sicher ist es auch! :-)

Author: Sascha von Saschas-Bastelstube.de

Autor: sascha

Ein paar Worte über mich selbst. Mein Name ist Sascha, wie der Titel dieses Blogs erahnen lässt. :-) Ich bin von Beruf selbstständiger Programmierer und Trader. Neben Programmierung, Trading und Kampfsport sind einige meiner Interessen und Hobbys das Kochen, Fitness und das Hören lauter Heavy-Metal Musik. :D

This might also be interesting for you

3 Gründe warum es App-Entwickler nicht einfach haben

Aus gegebenem Anlass heute mal ein kleiner Beitrag aus der Sektion "Nicht ganz so ernst gemeinte Beiträge". Hier nun einige Überlegungen warum es App-Entwickler heute schwieriger haben, als noch vor einigen Jahren. Eines vorweg: Wer in diesem Beitrag einen Hauch von Ironie und Sarkasmus findet, darf ihn behalten! ;-) Inhaltsverzeichnis:Problem 1: Die Masse an Apps … „3 Gründe warum es App-Entwickler nicht einfach haben“ weiterlesen


Apfel-Appstore-Reader - Update 2.0

Wie im Artikel - Apfel-Appstore-Reader - beschrieben, hält sich Apple bezüglich der App-Rankings (Positionierung im Appstore) sehr gedeckt. Auch im Report-Tool (ITC / iTunes-Connect -> Sales & Trends) keinerlei Informationen auftauchen, an welcher Position man sich mit der jeweiligen App in z.B. einer Kategorie wie “Produktivität” befindet, habe ich vor längerer Zeit ein kleines Java-Tool … „Apfel-Appstore-Reader - Update 2.0“ weiterlesen


Screen Recorder / Capture Software selber programmieren

Auf der Suche nach einem einfach zu bedienenen Screen-Recorder-Tool bin ich über allerhand kostenloser sowie kostenpflichtiger Softwarelösungen gestolpert. Aus meiner Sicht waren ziemlich alle entweder völlig überladen oder auch schlecht bzw. kompliziert zu bedienen. Andere waren auch einfach nur teuer im Verhältnis zum Funktionsumfang. Mein Fazit: Selber programmieren! Inhaltsverzeichnis:Screen-Recorder-Tool selber programmierenSchritt 1 - FFMPEG.NET Library … „Screen Recorder / Capture Software selber programmieren“ weiterlesen


Bitcoins - Die digitale Währung

Aufgrund der teils massiven Kurseinbrüche der digitalen Währungen wie Bitcoin, Ether und vielen vielen anderen Coins habe ich diesen schon etwas älteren Beitrag ausgegraben. Gegen Ende des letzten Jahres (2017) wurde der Kurs massiv in die Höhe getrieben und Stand kurzzeitig je nach Börse um die 20.000 US Dollar (rund 15.000 EUR pro Bitcoin). Wer … „Bitcoins - Die digitale Währung“ weiterlesen


Trading-Journal: Krypto Trading Bot für Kraken

Jeder halbwegs professionelle Trader sollte natürlich ein Trading-Journal führen um seine Trades zu erfassen und später auswerten zu können. Manche gute Trading-Software bietet natürlich bereits integrierte Lösungen an, was mich natürlich trotzdem nicht davon abgehalten hat für unser Projekt Smart-Trading-Systems.de eine eigene Software zu programmieren und diese an unser Trading-System anzubinden. Neben der Erfassung und … „Trading-Journal: Krypto Trading Bot für Kraken“ weiterlesen