
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 PID_MAX ( 32768 ) n'est pas atteint par le portage, il y avait donc 32767 flux de nombres aléatoires possibles pour chaque architecture.
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 :
| Date de sortie | Version |
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
Tout sera stocké dans le stockage de fichiers Google Drive
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
«Ubuntu 18.04.5LTS»
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