
ابحث عن عملات BTC على الإصدارات الأقدم من Bitcoin Core التي تحتوي على الثغرة الحرجة OpenSSL 0.9.8 CVE-2008-0166
في هذه المقالة، سنقوم بإنشاء أداة لتوليد عناوين البيتكوين (P2PKH) باستخدام ثغرة CVE-2008-0166. هذا مشروع بحثي للعثور على عملات BTC في الإصدارات الأقدم من العميل البرمجي Bitcoin Core.
مولّد الأرقام العشوائية الذي يولّد أرقامًا قابلة للتنبؤ CVE-2008-0166
تم اكتشاف VAIM-OpenSSL 0.9.8/1.0.0
كان إصدار الثغرة الحرجة 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 ) عبر النقل (porting)، لذلك كان هناك 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)، ولكل معرّف عملية، ولعناوين البيتكوين (P2PKH)، باستخدام رقم عشوائي من الثغرة الحرجة. OpenSSL 0.9.8.
في النهاية، سنقوم بإنشاء مولّد عناوين بيتكوين (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.5LTS»
لننتقل إلى المستودع «CryptoDeepTools» ونلقي نظرة على التفاصيل
git clone https://github.com/demining/CryptoDeepTools.gitcd CryptoDeepTools/05VulnerableOpenSSL/
ls -lh
قم بالتحديث والتثبيت g++ libgmp3-dev libmpfr-dev
apt-get update