
Поиск монет BTC на ранних версиях Bitcoin Core с критической уязвимостью OpenSSL 0.9.8 CVE-2008-0166
В этой статье мы создадим инструмент, который будет генерировать Bitcoin-адреса (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 заполнялась только идентификатором процесса. Из-за различий между порядком байт (endianness) и sizeof(long) вывод зависит от архитектуры: 32-битный big endian (например, i386), 64-битный big endian (например, amd64, ia64), 32-битный big endian (например, powerpc, sparc). PID 0 — это ядро, а PID_MAX (32768) не достигается при переносе, поэтому для каждой архитектуры существовало 32767 возможных потоков случайных чисел.
Клиентское ПО Bitcoin Core использует OpenSSL. В частности, оно использует функцию «EC_KEY_generate_key()» для генерации Bitcoin-адресов (как ключей) для получения платежей. Старые версии Bitcoin Core генерируют и хранят 100 ключей в wallet.dat.
Новый ключ генерируется только при получении платежа в Bitcoin. Таким образом, клиентское ПО Bitcoin Core поддерживает пул из 100 неиспользуемых Bitcoin-ключей (адресов). Состояние внутреннего генератора случайных чисел зависит от того, какие другие вызовы были сделаны к библиотеке OpenSSL до вызова 'EC_KEY_generate_key()'. Задачи, влияющие на внутреннее состояние ГСЧ: «RAND_add(8)», «RAND_bytes(8)» и «RAND_bytes(32)».
Таким образом, исследование заключалось в просмотре множества старых исходных кодов Bitcoin для выяснения того, какие вызовы, влияющие на внутреннее состояние ГСЧ, производились перед вызовом «EC_KEY_generate_key()». Цепочка вызовов меняется между версиями клиентского ПО Bitcoin Core.
Исследование было сосредоточено на следующих версиях:
| Дата релиза | Версия |
Наша цель — сгенерировать приватные ключи для каждой версии клиентского ПО Bitcoin Core, для каждой архитектуры (le32/le64), для каждого идентификатора процесса и для Bitcoin-адресов (P2PKH), используя случайное число из критической уязвимости OpenSSL 0.9.8.
В конечном итоге мы создадим генератор Bitcoin-адресов (P2PKH), и всё будет сохранено в файл result.txt.
Всё будет храниться в файловом хранилище Google Drive
Для этого мы будем использовать дистрибутив «Ubuntu 18.04.5 LTS» из Google Colab
Ранее мы записали видеоинструкцию: «TERMINAL в Google Colab создаёт все удобства для работы в GITHUB»
Откройте Google Colab в Terminal [TerminalGoogleColab]
Выполним команду:
cat /etc/lsb-release
«Ubuntu 18.04.5 LTS»
Перейдём в репозиторий «CryptoDeepTools» и посмотрим детали.
git clone https://github.com/demining/CryptoDeepTools.gitcd CryptoDeepTools/05VulnerableOpenSSL/
ls -lh
Обновим и установим g++ libgmp3-dev libmpfr-dev
apt-get update