
إطار عمل وسيط (Man-in-the-Middle) لتقنية BLE يعترض حركة GATT بين أجهزة Bluetooth Smart وتطبيقات الهاتف المحمول ويعيد تشغيلها ويعدّلها عبر وكيل اعتراض قائم على الويب.
BtleJuice هو إطار عمل متكامل لتنفيذ هجمات الرجل في المنتصف (Man-in-the-Middle) على أجهزة Bluetooth الذكية (المعروفة أيضًا باسم Bluetooth Low Energy). يتكون من:
تثبيت BtleJuice سهل جدًا. أولاً، تأكد من أن نظامك يستخدم إصدارًا حديثًا من Node.js (>=4.3.2) وnpm. ثم تأكد من تثبيت جميع التبعيات المطلوبة:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
sudo yum install bluez bluez-libs bluez-libs-devel npm
أخيرًا، ثبّت BtleJuice باستخدام npm:
sudo npm install -g btlejuice
إذا سار كل شيء على ما يرام، فإن BtleJuice جاهز للاستخدام !
يتكون BtleJuice من مكوّنين رئيسيين: وكيل اعتراض (interception proxy) ونواة (core). يجب تشغيل هذين المكوّنين على جهازين مستقلين لتشغيل محولي Bluetooth 4.0+ في الوقت نفسه. لا يعمل BtleJuice Proxy داخل حاوية Docker.
قد يساعد استخدام آلة افتراضية على جعل هذا الإطار يعمل على جهاز واحد.
من جهازك الافتراضي، ثبّت btlejuice وتأكد من أن محوّل USB BT4 متاح من الجهاز الافتراضي:
$ sudo hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 10:02:B5:18:07:AD ACL MTU: 1021:5 SCO MTU: 96:6
DOWN
RX bytes:1433 acl:0 sco:0 events:171 errors:0
TX bytes:30206 acl:0 sco:0 commands:170 errors:0
$ sudo hciconfig hci0 up
بعد ذلك، تأكد من أن جهازك الافتراضي لديه عنوان IP يمكن الوصول إليه من المضيف.
شغّل الوكيل في جهازك الافتراضي:
$ sudo btlejuice-proxy
على جهازك المضيف، لا تنسَ إيقاف خدمة bluetooth والتأكد من بقاء جهاز HCI مفتوحًا/مهيأً:
$ sudo service bluetooth stop
$ sudo hciconfig hci0 up
أخيرًا، نفّذ الأمر التالي على جهازك المضيف:
$ sudo btlejuice -u <Proxy IP address> -w
يخبر الخيار -w BtleJuice بتشغيل الواجهة الويب، بينما يحدد الخيار -u عنوان IP الخاص بالوكيل.
واجهة المستخدم الويب متاحة الآن على http://localhost:8080. لاحظ أنه يمكن تغيير منفذ خادم الويب عبر سطر الأوامر.
توفر واجهة الويب الخاصة بـ BtleJuice في الزاوية العلوية اليمنى مجموعة من الروابط للتحكم في نواة الاعتراض، كما هو موضح أدناه.

أولاً، انقر فوق الزر Select target وستظهر نافذة حوار تعرض جميع أجهزة Bluetooth Low Energy المتاحة التي اكتشفتها نواة الاعتراض:

انقر نقرًا مزدوجًا على الهدف المطلوب، وانتظر حتى تصبح الواجهة جاهزة (سيتغير مظهر زر bluetooth). بمجرد أن يصبح الجهاز الوهمي جاهزًا، استخدم التطبيق المحمول المرتبط أو جهازًا آخر (اعتمادًا على المتوقع) للاتصال بالجهاز الوهمي. إذا نجح الاتصال، فسيظهر حدث Connected على الواجهة الرئيسية.

يتم بعد ذلك عرض جميع عمليات GATT المعترضَة مع UUID الخاص بالخدمات والخصائص المقابلة، وبالطبع البيانات المرتبطة بها. تظهر البيانات افتراضيًا بتنسيق HexII (وهو أحد أشكال التنسيق الذي صممه Ange Albertini)، ولكن قد ترغب في التبديل من HexII إلى Hex (والعكس) بالنقر على البيانات نفسها. يدعم BtleJuice كلاً من تنسيقي Hex وHexII.
من الممكن إعادة تشغيل أي عملية GATT بالنقر بزر الماوس الأيمن عليها ثم تحديد خيار Replay، كما هو موضح أدناه:


انقر فوق الزر Write (أو Read) لإعادة تشغيل عملية GATT المقابلة. سيتم تسجيل هذه العملية في الواجهة الرئيسية.
أخيرًا وليس آخرًا، يمكن للواجهة اعتراض أي عملية GATT محليًا أو عالميًا والسماح بتعديل البيانات أثناء التشغيل. يمكنك إما استخدام الاعتراض العام بالنقر فوق الزر Intercept في الزاوية العلوية اليمنى أو استخدام القائمة السياقية لتفعيل أو تعطيل خطاف (hook) على خدمة وخاصية معينتين. في أي وقت يتم فيه اعتراض عملية GATT، سيظهر مربع الحوار التالي:

منذ الإصدار 1.0.6، توفر الواجهة ميزة تصدير البيانات التي تتيح تصديرًا قابلًا للقراءة وتصدير JSON. يتم إنشاء هذه الصادرات بناءً على عمليات GATT المعترضَة، ولكنها تتضمن أيضًا معلومات حول الجهاز الهدف. عند النقر على زر Export، سيظهر مربع الحوار التالي:

انقر فوق الزر Export أسفل مربع الحوار لتنزيل نسخة JSON (أو نصية) من البيانات المعترضَة.
يوفر مربع حوار الإعدادات حاليًا خيارًا واحدًا يسمح بإعادة الاتصال تلقائيًا بالوكيل عندما ينقطع الجهاز الهدف. قد يكون هذا مفيدًا عند التعامل مع الأجهزة التي تظل نشطة لفترة قصيرة من الوقت.

النقر على زر Select Target في الجزء العلوي الأيمن عندما يكون الوكيل نشطًا سيوقفه ويسمح بتحديد الهدف مرة أخرى.
يمكن أيضًا تثبيت روابط Node.js الخاصة بـ BtleJuice عبر npm:
$ sudo npm install -g btlejuice-bindings
مزيد من المعلومات حول كيفية استخدام روابط Node.js في توثيق الحزمة.
شكر خاص إلى Slawomir Jasek الذي أشار إلى العديد من الحيل المتعلقة بـ noble/bleno لتجنب المشكلات مع تطبيقات الأجهزة المحمولة، وشارك استراتيجيات BLE MITM خلال DEF CON 24 =). وهو أيضًا مؤلف Gattacker.
حقوق الطبع والنشر (c) 2016 Econocom Digital Security
يُمنح الإذن بموجب هذا، مجانًا، لأي شخص يحصل على نسخة من هذا البرنامج وملفات التوثيق المرتبطة به ("البرنامج")، للتعامل مع البرنامج دون أي قيود، بما في ذلك دون حصر حقوق الاستخدام والنسخ والتعديل والدمج والنشر والتوزيع والترخيص من الباطن و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين يُقدم إليهم البرنامج بالقيام بذلك، وفقًا للشروط التالية:
يجب تضمين إشعار الحقوق المذكور أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الجوهرية من البرنامج.
البرنامج مُقدم "كما هو"، دون أي ضمان من أي نوع، صريح كان أو ضمني، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق والملاءمة لغرض معين وعدم الانتهاك. في أي حال من الأحوال لا يكون المؤلفون أو أصحاب حقوق الطبع والنشر مسؤولين عن أي مطالبة أو أضرار أو مسؤولية أخرى، سواء في إطار عقد أو ضرر أو غير ذلك، تنشأ عن أو بسبب أو فيما يتعلق بالبرنامج أو الاستخدام أو التعاملات الأخرى مع البرنامج.