Инструмент для взлома шифрования BLE (Bluetooth Low Energy). Взламывает ключ сессии TK (Temporary Key) при использовании Legacy Pairing — позволяет расшифровать захваченный BLE-трафик, если в захвате присутствует фаза сопряжения устройств.
git clone https://github.com/mikeryan/crackle cd crackle && make # Взлом захваченного BLE pcap: ./crackle -i capture.pcap -o decrypted.pcap

crackle взламывает шифрование BLE (также известного как Bluetooth Smart).
crackle использует уязвимость в процессе сопряжения BLE, которая позволяет атакующему угадать или очень быстро перебрать методом полного перебора TK (Временный ключ). С помощью TK и других данных, собранных в процессе сопряжения, можно получить STK (Краткосрочный ключ) и позже LTK (Долгосрочный ключ).
Имея STK и LTK можно расшифровать все communications между master и slave.
Перед попыткой использовать crackle, ознакомьтесь с Часто задаваемыми вопросами, чтобы определить, является ли этот инструмент подходящим для вашей ситуации.
crackle был написан Майком Райаном mikeryan@lacklustre.net Дополнительную информацию можно найти на сайте: 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 можно использовать для расшифровки будущих communications между двумя конечными точками.
Укажите crackle выходной файл с помощью флага -o, чтобы создать новый файл PCAP, содержащий расшифрованные данные (в дополнение к уже незашифрованным данным).
Пример использования:
$ crackle -i input.pcap -o decrypted.pcap
В режиме «Расшифровка с помощью LTK» crackle использует LTK, предоставленный пользователем, для расшифровки communications между master и slave. Этот режим идентичен части расшифровки в режиме «Взлом TK».
Пример использования:
$ crackle -i encrypted.pcap -o decrypted.pcap -l 81b06facd90fe7a6e9bbd9cee59736a7
В режиме «Взлом TK» crackle требует файл PCAP, содержащий событие сопряжения BLE. Лучший способ создать такой файл — использовать Ubertooth для захвата события сопряжения между master и slave.
Чтобы проверить, содержит ли ваш файл PCAP все необходимые пакеты, запустите crackle с опцией -i:
crackle -i <file.pcap>
crackle проанализирует каждое соединение во входном файле и выведет результаты своего анализа в stdout. Если у вас есть все компоненты диалога сопряжения, вывод будет выглядеть примерно так:
Analyzing connection 0:
xx:xx:xx:xx:xx:xx (public) -> yy:yy:yy:yy:yy:yy (public)
Found 13 encrypted packets
Cracking with strategy 0, 20 bits of entropy
!!!
TK found: 412741
!!!
Decrypted 12 packets
LTK found: 81b06facd90fe7a6e9bbd9cee59736a7
Specify an output file with -o to decrypt packets!
Чтобы расшифровать все пакеты, добавьте опцию -o:
crackle -i <file.pcap> -o <output.pcap>
Выходной файл будет содержать расшифрованные версии всех зашифрованных пакетов из исходного PCAP, а также все незашифрованные пакеты. Обратите внимание, что CRC не пересчитываются, поэтому CRC расшифрованных пакетов будут некорректными.
В режиме «Расшифровка с помощью LTK» crackle требует файл PCAP, содержащий как минимум пакеты LL_ENC_REQ и LL_ENC_RSP, а также LTK, использованный для шифрования communications.
Формат LTK — 128-битное шестнадцатеричное число без пробелов или разделителей, от старшего октета к младшему. Пример:
-l 81b06facd90fe7a6e9bbd9cee59736a7
Чтобы проверить, содержит ли ваш файл PCAP все необходимые пакеты, запустите crackle с опциями -i и -l:
crackle -i <file.pcap> -l <ltk>
Если у вас есть оба требуемых пакета, программа должна выдать вывод, подобный этому:
Analyzing connection 0:
xx:xx:xx:xx:xx:xx (public) -> yy:yy:yy:yy:yy:yy (public)
Found 9 encrypted packets
Decrypted 6 packets
Specify an output file with -o to decrypt packets!
Чтобы расшифровать все пакеты, добавьте опцию -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.