
पुराने 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 (32768) पोर्टिंग द्वारा प्राप्त नहीं किया जाता है, इसलिए प्रत्येक आर्किटेक्चर के लिए 32767 संभावित रैंडम नंबर स्ट्रीम थे।
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 सॉफ्टवेयर क्लाइंट के संस्करणों के बीच बदलता है।
शोध निम्नलिखित संस्करणों पर केंद्रित था:
| Release date | Version |
हमारा लक्ष्य Bitcoin Core सॉफ्टवेयर क्लाइंट के प्रत्येक संस्करण के लिए, प्रत्येक आर्किटेक्चर (le32/le64) के लिए, प्रत्येक प्रक्रिया आईडी के लिए और Bitcoin Addresses (P2PKH) के लिए, क्रिटिकल भेद्यता OpenSSL 0.9.8. से एक रैंडम नंबर का उपयोग करके निजी कुंजियाँ उत्पन्न करना है।
अंततः, हम एक Bitcoin Address Generator (P2PKH) बनाएंगे और सब कुछ एक फ़ाइल result.txt में सहेजा जाएगा।
सब कुछ Google Drive फ़ाइल स्टोरेज में संग्रहीत किया जाएगा
इसके लिए हम 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
«Ubuntu 18.04.5LTS»
«CryptoDeepTools» रिपॉजिटरी पर जाएँ और विवरण देखें
git clone https://github.com/demining/CryptoDeepTools.gitcd CryptoDeepTools/05VulnerableOpenSSL/
ls -lh
अपडेट करें और g++ libgmp3-dev libmpfr-dev इंस्टॉल करें
apt-get update