Experiment: Hacking Ethereum Wallets - Bruteforce

Amazon

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! :-)

Zuletzt bearbeitet: 4. Februar, 2020
Tags: , , , , , , , , ,

Dies könnte dich auch interessieren

Trainingsgerät: Makiwara 2.0

Ein Makiwara ist ein aus Japan stammendes Sportgerät, welches man im Karate vor allem als Schlagpfosten aus Holz kennt. Früher (und zum Teil heute noch) fertigt man einen Makiwara aus einem biegsamen und nicht-splitternden Holzbrett. Das eine Ende des Brettes wird senkrecht in den Boden getrieben, und das andere Ende im oberen Bereich (ca. 10-20cm) [...] Weiterlesen »


Nützliche Apps für deinen Instagram-Account

Like4Like Pro - Erhalte mehr likes, views und follower bei Instagram. Like4Like PRO - get more likes, video views and followers for Instagram. A dedicated Like4Like user can get over 5000 Likes and 1000 Followers on Instagram per day! Try it out, now! There is no trick, you are going to get real Likes and [...] Weiterlesen »


Color-Calculator / Farbrechner

Der Color-Calculator errechnet aus Hex-Farbwerten die entsprechenden Dezimal- und Float-Werte. So kann man Beispielsweise schnell und einfach Farbewerte aus dem Web für seine iOS-App übernehmen, ohne manuell umrechnen zu müssen. Für alle Tippfaulen unter euch (zu denen ich mich im übrigen auch zähle ;-) ) wird der passende Objective-C Programmcode generiert. Die Eingabe von ganzen [...] Weiterlesen »


Passwort-Generator

Wer kennt es nicht, man benötigt ein neues Passwort, und es fällt einem nichts ein. Zumindest nichts, was man nicht schon in der Vergangenheit in irgend einer Form bereits benutzt hätte. Heutzutage ist es auch nicht mehr einfach mit einem Passwort ala "liebe123" oder "lassmichrein" getan. Gerade Server-Administratoren aber auch Privat-Personen sollten mehr Wert auf [...] Weiterlesen »


App-Suchmaschine für iOS und Android

In den letzten Wochen habe ich mich viel mit dem Lesen, Auswerten und Visualisieren von Daten aus den verschiedenen Appstores auseinander gesetzt. Dabei entstanden einige nette kleine Tools die zum Teil hier veröffentlicht wurden, wie z.B. der Apfel-Appstore-Reader und der ITC-Umsatz-Rechner. Irgendwann bin ich dann über diverse App-Suchmaschinen wie AppTicker oder AppGefahren gestolpert. Schön finde [...] Weiterlesen »