
Взлом и расшифровка шифрования BLE

crackle взламывает BLE-шифрование (также известное как Bluetooth Smart).
crackle использует уязвимость в процессе спаривания BLE, которая позволяет атакующему угадать или очень быстро подобрать TK (Временный ключ) перебором. Имея TK и другие данные, собранные в процессе спаривания, можно получить STK (Краткосрочный ключ), а затем и LTK (Долгосрочный ключ).
Имея STK и LTK, можно расшифровать все коммуникации между ведущим и ведомым устройствами.
Перед попыткой использования crackle ознакомьтесь с Часто задаваемыми вопросами, чтобы определить, подходит ли этот инструмент для вашей ситуации.
crackle был написан Майком Райаном [email protected] Дополнительная информация на веб-сайте: http://lacklustre.net/projects/crackle/
crackle имеет два основных режима работы: Взлом TK и Расшифровка с LTK.
Это режим по умолчанию, используемый при передаче crackle входного файла
с помощью -i.
В режиме взлома TK crackle перебирает TK, использованный во время события спаривания BLE. crackle использует тот факт, что TK в режиме "Just Works(tm)" и 6-значном PIN-коде является значением в диапазоне [0,999999], дополненным до 128 бит.
crackle применяет несколько методов для выполнения этого перебора: очень быстрый метод, если все пакеты спаривания присутствуют во входном файле, и медленный метод, если присутствует минимальный набор пакетов.
Чтобы использовать этот режим, запустите crackle с входным PCAP- или PcapNG-файлом, содержащим одно или несколько соединений с диалогом спаривания BLE. crackle проанализирует все соединения, определит, возможно ли взломать данное соединение, и автоматически выберет наилучшую стратегию для взлома каждого из них.
Если TK успешно взломан, crackle выведет оставшиеся ключи, используемые для шифрования остальной части соединения, и расшифрует все зашифрованные пакеты, которые следуют далее. Если происходит обмен LTK (обычно это делается первым после установки шифрования), crackle выведет это значение в stdout. LTK можно использовать для расшифровки любых будущих коммуникаций между двумя конечными точками.
Укажите crackle выходной файл с помощью -o, чтобы создать новый PCAP
файл, содержащий расшифрованные данные (в дополнение к уже
незашифрованным данным).
Пример использования:
$ crackle -i input.pcap -o decrypted.pcap
В режиме расшифровки с LTK, crackle использует предоставленный пользователем LTK для расшифровки коммуникаций между ведущим и ведомым. Этот режим идентичен части расшифровки режима взлома TK.
Пример использования:
$ crackle -i encrypted.pcap -o decrypted.pcap -l 81b06facd90fe7a6e9bbd9cee59736a7
В режиме взлома TK, crackle требует PCAP-файл, который содержит событие спаривания BLE. Лучший способ создать такой файл — использовать Ubertooth для захвата события спаривания между ведущим и ведомым.
Чтобы проверить, содержит ли ваш PCAP-файл все необходимые пакеты, запустите crackle с опцией -i:
crackle -i <file.pcap>
crackle проанализирует каждое соединение во входном файле и выведет результаты своего анализа в stdout. Если у вас есть все компоненты диалога спаривания, вывод будет выглядеть так:
Анализ соединения 0:
xx:xx:xx:xx:xx:xx (public) -> yy:yy:yy:yy:yy:yy (public)
Найдено 13 зашифрованных пакетов
Взлом со стратегией 0, 20 бит энтропии
!!!
TK найден: 412741
!!!
Расшифровано 12 пакетов
LTK найден: 81b06facd90fe7a6e9bbd9cee59736a7
Укажите выходной файл с -o для расшифровки пакетов!
Чтобы расшифровать все пакеты, добавьте опцию -o:
crackle -i <file.pcap> -o <output.pcap>
Выходной файл будет содержать расшифрованные версии всех зашифрованных пакетов из исходного PCAP, а также все незашифрованные пакеты. Обратите внимание, что CRC не пересчитываются, поэтому CRC расшифрованных пакетов будут некорректными.
В режиме расшифровки с LTK, crackle требует PCAP-файл, который содержит как минимум пакеты LL_ENC_REQ и LL_ENC_RSP, а также LTK, использованный для шифрования коммуникаций.
Формат LTK — 128-битное шестнадцатеричное число без пробелов или разделителей, от старшего октета к младшему. Пример:
-l 81b06facd90fe7a6e9bbd9cee59736a7
Чтобы проверить, содержит ли ваш PCAP-файл все необходимые пакеты, запустите crackle с -i и -l:
crackle -i <file.pcap> -l <ltk>
Если у вас есть оба необходимых пакета, программа должна выдать вывод, похожий на этот:
Анализ соединения 0:
xx:xx:xx:xx:xx:xx (public) -> yy:yy:yy:yy:yy:yy (public)
Найдено 9 зашифрованных пакетов
Расшифровано 6 пакетов
Укажите выходной файл с -o для расшифровки пакетов!
Чтобы расшифровать все пакеты, добавьте опцию -o:
crackle -i <file.pcap> -o <out.pcap> -l <ltk>
Выходной файл будет создан аналогично описанному выше.
Тестовые файлы, включенные в каталог tests, служат
интересным материалом для экспериментов с crackle. Ознакомьтесь с файлами README,
включенными в подкаталог каждого теста.
Загрузите несколько образцов файлов для взлома с помощью crackle. Обратитесь к README внутри архива для получения дополнительной информации:
https://lacklustre.net/bluetooth/crackle-sample.tgz
Мы составили список Часто задаваемых вопросов.
Огромная благодарность Майку Оссманну и Доминику Спиллу из проекта Ubertooth. Без них ничего из этого было бы невозможно.
Большое спасибо Майку Кершоу/dragorn из Kismet за помощь в создании и работе с PCAP-файлами.
Спасибо остальным участникам #ubertooth на irc.freenode.net.