Слайд 4План
Основы Bluetooth
Способы реверс-инжиниринга Bluetooth
Реверс-инжиниринг вибратора с Алиэкспресс
Слайд 7BLE Security
Pairing – процесс создания парами BLE-устройств секретных ключей для последующего шифрования
трафика
Слайд 8BluetoothDevice & BluetoothGatt
GATT – профиль Bluetooth, определяющий способ взаимодействия двух устройств и
использующий концепцию атрибутов
GATT Characteristic – контейнер для данных
GATT Service – совокупность характеристик
UUID – 128-битный уникальный идентификатор атрибута
Слайд 14Пример
1. Подключение
2. Поиск всех сервисов устройства
3. Список сервисов
4. Отправка команды
5. Результат отправки
Слайд 15О BLE подробнее
http://appsconf.ru/moscow/2019/abstracts/5051
https://youtu.be/hpHFo_Lyk0M
Слайд 17Реверс-инжиниринг BLE-пакета
Анализ BLE-профиля
Реверс-инжиниринг приложения
Анализ трафика
Слайд 18nRF Connect
Сканирование
Подключение
Сервисы
Характеристики
Чтение и запись
Слайд 19nRF Connect
Android
https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp
iOS
https://apps.apple.com/ru/app/nrf-connect/id1054362403
Слайд 20Wireshark
Просмотр BLE-логов
Адреса
Запись/Чтение
Сервисы
Характеристики
Слайд 21Wireshark
Windows & macOS
https://www.wireshark.org/download.html
Слайд 22Анализ BLE-профиля
Список всех сервисов и характеристик
Свойства характеристик
Чтение/Запись сырых пакетов
Слайд 29Резюме
Первичная информация о девайсе
Формат данных неизвестен
Слайд 30Реверс-инжиниринг приложения
Декомпиляция бинарников
Найти сервисы и характеристики
Формат данных
Слайд 31Получение apk
adb shell pm path package.name
package:/data/app/package.name/app.apk
adb pull /data/app/package.name/app.apk
Слайд 34Поиск нужного сервиса
UART_UUID = UUID.fromString("6E400001-B5A3-F393-E0A9-E50E24DCCA9E");
TX_UUID = UUID.fromString("6E400002-B5A3-F393-E0A9-E50E24DCCA9E");
RX_UUID = UUID.fromString("6E400003-B5A3-F393-E0A9-E50E24DCCA9E");
Слайд 35Поиск чтения данных
class Clazz extends BluetoothGattCallback {
@Override
public void onCharacteristicRead(…)
{
... }
}
Слайд 36Поиск формата данных
onCharacteristicRead(… Characteristic c)
{
receivedData(c.getValue());
}
Слайд 37Поиск формата данных
private static void receivedData(byte[] dataBytes)
{
byte[] temp = { dataBytes[2], dataBytes[3] };
boolean[] bits = byteArray2BitArray(temp);
Inputs.buttonA.key = bits[0];
...
Inputs.forward2.key = bits[13];
...
Слайд 38Поиск записи данных
service = gatt.getService(s);
char = service.getCharacteristic(c);
char.setValue(value);
gatt.writeCharacteristic(char);
Слайд 39Резюме
Не все приложения можно реверс-инжинирить
Слайд 40Анализ трафика приложения
Протокол работы с девайсом
Сервисы и характеристики
Данные чтения/записи
Адреса, пароли, явки
Слайд 42Получаем трафик приложения
Делаем некие действия в приложение
adb pull /sdcard/btsnoop_hci.log
Слайд 45Анализ трафика
Фильтрация по адресу
Лог записи/чтения
Сервис
Характеристика
Значения
Слайд 47Резюме
Информация о работе приложения без его реверс-инжиниринга
Неявный формат данных
Слайд 50Брутфорс?
Нужно найти сервис для отправки команд
Отправлять туда байты
Фиксировать результат
Слайд 51Характеристика для команд
Находим характеристики для записи
Properties: Write
Слайд 52Приложение для брутфорса
char = service.getCharacteristic(uuid);
while (true) {
char.setValue(rand_byte_array);
gatt.writeCharacteristic(char);
// Смотрим на результат
}
Слайд 54Брутфорс?
Брутфорс возможен для несложного пакета команд
Но занимает много времени и внимания
Слайд 55Реверс-инжиниринг apk
adb shell pm path cn.yingtaoapp.android
package:/data/app/cn.yingtaoapp.android/base.apk
adb pull /data/app/cn.yingtaoapp.android/base.apk
Декомпиляция apk
Слайд 57Поиск нужного сервиса
Характеристики с “Write”
Слайд 58Поиск отправки данных
public void doClick(int value) {
case 0:
this.mToy.BLE.write(value * 128);
return;
case 1:
this.mToy.BLE.write(value * 64);
return;
default:
return;
}
Слайд 61Анализ приложения
Включим логи
Отправим команду
Посмотрим логи
Слайд 67Резюме
Формат команд
+
UUID сервисов и характеристик
=
Свое приложение
Слайд 68BLE Security?
и Да и Нет
Шифрование передачи данных между устройствами
Слайд 69Немного методов защиты
Спрятать парс данных в C++, etc
Аутентификация устройства и приложения
Дополнительное
шифрование трафика
Слайд 70Заключение
Bluetooth просто – протокол передачи данных
Не стоит забывать о безопасности!
Слайд 71Спасибо за внимание
Контакты:
telegram @neargye