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

amz music.pngZunä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.

kraken l.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

Unity 2D Platformer - Level Generator

Seit einiger Zeit experimentiere ich hier und da mit der 2D- und 3D Engine Unity. Insbesondere die Programmierung eines 2D-Platformers hat es mir aktuell angetan. Allerdings ist das programmieren eines 2D-Games (sofern man Programmierer ist) nicht das größte Problem, sondern meiner Meinung nach die Optik, da ich kein Grafiker bin. :D So kommt man nicht [...] Weiterlesen »


App des Tages: Die Brille - Kinderbuch-App

Die Kinderbuch-App "Die Brille" entführt in das interaktive Abenteuer des kleinen Max, der an einem schönen Sommertag eine magische Brille findet. In neun abwechslungsreichen Szenen können Kinder die Brille selbst aufsetzen und in eine bunte und herrlich verrückte Abenteuerwelt mit liebevoll animierten Figuren eintauchen. Eine Sprecherin, Musik und Soundeffekte machen aus dem digitalen Kinderbuch ein [...] Weiterlesen »


HTAccess-Generator

Erstelle dir hier schnell und einfach einen HTAccess-Verzeichnisschutz für deine Web-/Internetseite. So kannst du den Hypertext-Zugriff auf Verzeichnisse deiner Webseite vor unberechtigten Zugriffen schützen. Der jeweilige Benutzer muss so zunächst die Benutzerkennung und das entsprechende Passwort eingeben bevor er den Inhalt zu Gesicht bekommt. Zum Beispiel lässt sich so auch ein CMS (Content-Management-Systeme wie z.B. [...] 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 [...] 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 »