
استغلال إثبات مفهوم لثغرة تجاوز مصادقة TLS في Android adbd Wireless Debugging، باستخدام عدم تطابق نوع مفتاح EC/RSA للحصول على صدفة عن بُعد دون مصادقة.
إخلاء المسؤولية: هذا الدليل العملي (PoC) مُقدَّم حصراً لأغراض تعليمية وأبحاث أمنية مُصرَّح بها. الوصول غير المُصرَّح به إلى أنظمة الحاسوب غير قانوني. تأكد دائماً من حصولك على إذن صريح قبل الاختبار ضد أي جهاز أو شبكة.
تمتلك أجهزة أندرويد ميزة تُسمى التصحيح اللاسلكي (Wireless Debugging)، والتي تتيح للمطورين الاتصال بالجهاز عبر Wi-Fi دون الحاجة إلى كابل USB. للحفاظ على أمان هذا الاتصال، يستخدم الجهاز تشفير TLS ويتطلب من الحاسوب المتصل إثبات هويته باستخدام مفتاح تشفيري.
أين تكمن الثغرة؟
عندما يتصل حاسوب ما، يتحقق البرنامج الخفي في أندرويد (adbd) مما إذا كان مفتاح الحاسوب يطابق أي من المفاتيح المُصرَّح بها سابقاً. ويقوم بذلك باستخدام دالة رياضية مدمجة (EVP_PKEY_cmp) تُرجع أحد ثلاثة أرقام:
1 تعني: "المفتاحان متطابقان تماماً."0 تعني: "المفتاحان غير متطابقين."-1 تعني: "خطأ: المفتاحان من نوعين مختلفين تماماً (مثلاً، مقارنة مفتاح RSA بمفتاح EC)."الخلل:
كتب المبرمج فحصاً بسيطاً: if (result) { grant_access(); }.
في البرمجة، يُعتبر كل من 1 و -1 "صحيحاً" (True). لذلك، إذا أرسل المهاجم عمداً نوعاً مختلفاً تماماً من المفاتيح (مثل مفتاح منحنى إهليلجي Elliptic Curve بدلاً من مفتاح RSA المتوقع)، فإن الدالة تُرجع -1 (خطأ). يرى الكود المعطوب -1، ويفترض أنه يعني "صحيح"، ويمنح الوصول الكامل على أي حال.
النتيجة: يمكن للمهاجم الموجود على نفس شبكة Wi-Fi تجاوز المصادقة بالكامل والحصول على صدفة (shell) عن بُعد على الجهاز دون الحاجة إلى مفاتيح الاقتران الأصلية، ودون أن يرى المستخدم أي مطالبة بالموافقة.
لكي ينجح هذا الاستغلال، يجب أن يستوفي جهاز أندرويد المستهدف شرطين:
يتطلب هذا السكربت Python 3 ومكتبة cryptography لإنشاء الشهادات المؤقتة أثناء التشغيل.
يمكنك تثبيت المكتبة المطلوبة باستخدام apt (على Debian/Ubuntu/Kali) أو pip:
باستخدام apt (موصى به على Linux):
sudo apt update
sudo apt install python3-cryptography
استخدام pip (عبر المنصات):
pip3 install cryptography
على عكس تصحيح أخطاء USB، يقوم Android بتعيين منفذ عشوائي ذي رقم مرتفع لتصحيح الأخطاء اللاسلكي في كل مرة تُعاد فيها تشغيل الجهاز أو تتغير فيها شبكة Wi-Fi.
إذا كنت لا تعرف المنفذ الحالي، يمكنك بسهولة فحصه باستخدام nmap. تقع منافذ تصحيح الأخطاء اللاسلكي عادةً بين 30000 و50000.
نفّذ الأمر التالي، مع استبدال <hostname> بعنوان IP لجهازك الهدف:
nmap -Pn -p T:30000-50000 <hostname>
كيفية قراءة المخرجات:
ابحث عن منفذ يظهر بحالة open. على سبيل المثال:
PORT STATE SERVICE
41234/tcp open unknown
في هذا المثال، 41234 هو المنفذ الذي ستستخدمه في الخطوة التالية.
بمجرد أن يكون لديك اسم المضيف/عنوان IP الهدف والمنفذ الصحيح، يمكنك تشغيل الاستغلال.
لفتح صدفة عن بُعد تفاعلية كاملة (مشابهة لـ SSH):
python3 adb_bypass.py <hostname> <port>
مثال:
python3 adb_bypass.py 192.168.1.50 41234
بمجرد الاتصال، ستُوجَّه إلى موجه مستخدم shell. اضغط Ctrl+C للخروج.
إذا كنت تريد فقط تشغيل أمر محدد ورؤية المخرجات دون الدخول إلى صدفة تفاعلية، فاستخدم العلامة --cmd:
python3 adb_bypass.py <hostname> <port> --cmd "id"
لمشاهدة حركة مرور الشبكة الأساسية وتفاصيل المصافحة لأغراض التصحيح أو البحث، أضف العلامة -v:
python3 adb_bypass.py <hostname> <port> -v
CNXN وSTLS الأوليتين للاتفاق على ترقية TLS.cryptography، يولّد السكربت مفتاحًا خاصًا EC P-256 مؤقتًا وشهادة X.509 موقّعة ذاتيًا في الذاكرة.EVP_PKEY_cmp القيمة -1، ويُقيَّم فحص if (cmp) على أنه صحيح، ويضع الجهاز علامة على الاتصال بأنه مُصرَّح به.shell: باستخدام نافذة delayed_ack كبيرة، مما ينتج عنه صدفة (shell) عن بُعد دون مصادقة.