
Suche nach BTC-Coins auf früheren Versionen von Bitcoin Core mit kritischer Schwachstelle OpenSSL 0.9.8 CVE-2008-0166
In diesem Artikel werden wir ein Tool erstellen, das Bitcoin-Adressen (P2PKH) mithilfe der CVE-2008-0166-Schwachstelle generiert. Dies ist ein Forschungsprojekt, um BTC-Coins auf früheren Versionen des Bitcoin-Core-Softwareclients zu finden.
Zufallszahlengenerator der vorhersehbare Zahlen erzeugt CVE-2008-0166
VAIM-OpenSSL 0.9.8/1.0.0 erkannt
Die kritische Schwachstellenversion OpenSSL 0.9.8 CVE-2008-0166 wurde nur mit der Prozess-ID befüllt. Aufgrund von Unterschieden zwischen Endianness und sizeof(long) ist die Ausgabe architekturabhängig: 32 -Bit-Big-Endian (z. B. i386), 64 -Bit-Big-Endian (z. B. amd64, ia64), 32 -Bit-Big-Endian (z. B. powerpc , sparc). PID 0 ist der Kern, und PID_MAX ( 32768 ) wird durch Portierung nicht erreicht, daher gab es 32767 mögliche Zufallszahlenströme für jede Architektur.
Der Bitcoin-Core-Softwareclient verwendet OpenSSL. Genauer gesagt verwendet er die Funktion «EC_KEY_generate_key()» zur Generierung von Bitcoin-Adressen (wie ein Schlüssel) zum Empfangen von Zahlungen. Alte Versionen von Bitcoin Core generieren und speichern 100 Schlüssel in wallet.dat
Ein neuer Schlüssel wird nur generiert, wenn eine Bitcoin-Zahlung empfangen wird. Somit hält der Bitcoin-Core-Softwareclient einen Pool von 100 ungenutzten Bitcoin-Schlüsseln (Adressen) . Der Zustand des internen Zufallszahlengenerators hängt davon ab, welche anderen Aufrufe an die Bibliothek OpenSSL vor dem Aufruf 'EC_KEY_generate_key()' getätigt wurden. Herausforderungen, die den internen Zustand des RNG beeinflussen: «RAND_add(8)», «RAND_bytes(8)» и «RAND_bytes(32)».
Die Forschung bestand also darin, viele alte Bitcoin-Quellen zu durchsuchen, um herauszufinden, welche Aufrufe den internen Zustand des RNG vor dem Aufruf «EC_KEY_generate_key()». beeinflusst haben. Der Aufrufpfad ändert sich zwischen den Versionen des Bitcoin-Core-Softwareclients
Die Studie konzentrierte sich auf die folgenden Versionen:
| Veröffentlichungsdatum | Version |
Unser Ziel ist es, für jede Version des Bitcoin-Core-Softwareclients, für jede Architektur (le32/le64), für jede Prozess-ID und für Bitcoin-Adressen (P2PKH) private Schlüssel zu generieren, unter Verwendung einer Zufallszahl aus einer kritischen Schwachstelle. OpenSSL 0.9.8.
Letztendlich werden wir einen Bitcoin-Adressgenerator (P2PKH) erstellen und alles wird in einer Datei result.txt gespeichert.
Alles wird im Google-Drive-Dateispeicher gespeichert
Dazu verwenden wir das Distributionspaket «Ubuntu 18.04.5 LTS» von Google Colab
Früher haben wir eine Videoanleitung aufgezeichnet: «TERMINAL in Google Colab schafft alle Annehmlichkeiten für die Arbeit in GITHUB»
Öffnen Sie Google Colab in Terminal [TerminalGoogleColab]
Führen wir den Befehl aus:
cat /etc/lsb-release
«Ubuntu 18.04.5LTS»
Gehen wir zum «CryptoDeepTools» Repository und werfen wir einen Blick auf die Details
git clone https://github.com/demining/CryptoDeepTools.gitcd CryptoDeepTools/05VulnerableOpenSSL/
ls -lh
Aktualisieren und installieren g++ libgmp3-dev libmpfr-dev
apt-get update