Небольшое предисловие

Привет, Хабр!

Эта статья является пятой и заключительной в цикле “Диплом специалиста ИБ”, в рамках которого я рассказываю про свой опыт написания выпускной квалификационной работы на программе высшего образования “Компьютерная безопасность”. В предыдущей статье я рассказывал про написание мобильного приложения "Smart Connect" для взаимодействия с ранее разработанными IoT-устройствами (SmartLight и SmartPulse). В данной будем пытаться получить несанкционированный доступ к представленным в дипломной работе устройствам.

Зачем это вообще нужно?

Те, кто успел ознакомиться с первой частью данного цикла статей, помнят, что в ней я рассказывал про методику обеспечения безопасности, в которой предложил выбор наиболее эффективных механизмов защиты IoT-устройств с помощью математической модели на основе многокритериального выбора. Не знаю, у кого как, но у меня возникает вопрос:

"А как вообще практически можно было бы доказать эффективность данной методики?"

На мой взгляд - попробовать провести взлом устройства, которое было защищено в соответствии с ней. Конечно я понимаю, что такого рода методику нужно проверять более комплексно, и одна лишь попытка НСД не дает особой уверенности в ее эффективности. Но в рамках дипломной работы этого было более чем достаточно, а на большее ни времени, ни сил уже не хватало.

Несанкционированный доступ - это ...

Сначала предлагаю разобраться с тем, что вообще подразумевается под понятием "Несанкционированный доступ". Если попробовать поискать информацию об этом в интернете, можно найти различную интерпретацию определения НСД.

Несанкционированный доступ к IoT-устройствам по версии нейросети DALL-E
Несанкционированный доступ к IoT-устройствам по версии нейросети DALL-E

Но если выделить основную суть этого процесса и обобщить, получится, что несанкционированным доступом является любое получение доступа к чему-либо без прав на это.

Следовательно, в контексте моей дипломной работы, несанкционированный доступ будет рассматриваться, как получение возможности манипулирования значениями BLE-характеристик (чтение, редактирование, запись значения) устройств без использования мобильного приложения Smart Connect.

То есть, если у кого-то получится подключиться и взаимодействовать с IoT-устройствами с помощью условного nRF сканера или специализированного программного обеспечения, мы будем считать, что произошел несанкционированный доступ.

После того, как расставили все точки над "и", можно приступать к практической реализации всего вышесказанного. Естественно, так как в рамках дипломной работы я рассматривал технологию BLE, то весь процесс получения несанкционированного доступа будет реализовываться применительно к BLE устройствам. Для удобства весь процесс распишу по шагам.

Шаг 1: Устанавливаем программное обеспечение

Для того, чтобы как-то подключиться к BLE устройствам, нужно их сначала найти. То есть, сделать их видимыми для устройства, с которого будем пытаться к ним получить доступ. В этом могут помочь различные сканеры и т.д.

Так как я решил использовать виртуальную машину на Linux Ubuntu 22.04 LTS «Jammy Jellyfish», особого смысла в поиске каких-то специфических приложений не было от слова "совсем". Для этих целей существует вполне удобный опенсорсный пакет BlueZ, в который входят все необходимые службы и утилиты для работы с Bluetooth и BLE устройствами.

Помимо BlueZ, также поставим rfkill, bluetooth и bluez-tools. Устанавливаем все необходимое командой: sudo apt-get install bluetooth bluez bluez-tools rfkill.

Процесс установки пакетов bluez, rfkill, bluetooth и bluez-tools
Процесс установки пакетов bluez, rfkill, bluetooth и bluez-tools

Шаг 2: Запускаем Bluetooth

После установки необходимых пакетов, запускаем службу Bluetooth с помощью команды sudo systemctl start bluetooth и устанавливаем автозапуск с загрузкой системы посредством sudo systemctl enable bluetooth.

Далее надо удостовериться, что все работает корректно. Вводим команду sudo systemctl status bluetooth и проверяем статус работы службы.

Запуск и проверка службы Bluetooth на Linux Ubuntu
Запуск и проверка службы Bluetooth на Linux Ubuntu

Шаг 3: Сканируем устройства

Теперь можно приступить к сканированию Bluetooth и BLE устройств, которые находятся поблизости. Для этого воспользуемся командой sudo bluetoothctl, после чего запустим сканирование с помощью power on и scan on.

После сканирования останавливаем данный процесс командой scan off. Среди найденных устройств замечаем SmartLight. Для получения НСД скопируем его адрес - 10:76:2A:61:BE:38.

Сканирование Bluetooth и BLE устройств
Сканирование Bluetooth и BLE устройств

Аналогичным способом получим информацию об адресе пульсомера SmartPulse (10:7F:B0:5:93:17), в процессе разработки которого были реализованы наиболее приоритетные механизмы защиты из предложенной методики обеспечения безопасности.

SmartPulse среди найденных устройств
SmartPulse среди найденных устройств

Шаг 4: Подключаемся к устройству

После обнародования адресов искомых устройств воспользуемся утилитой gatt tool, чтобы посмотреть всю доступную информацию о них в контексте BLE. На примере SmartLight, используем команду sudo gatttool -b 10:76:2A:61:BE:38 - I, а затем подключимся к устройству с помощью connect.

Теперь мы можем посмотреть информацию о сервисах и характеристиках SmartLight. Сервисы можно открыть посредством primary, а характеристики – командой characteristics.

Список BLE-сервисов и характеристик SmartLight
Список BLE-сервисов и характеристик SmartLight

Таким же образом найдем сервисы и характеристики устройства SmartPulse по адресу 10:7F:B0:5:93:17.

BLE-сервисы и характеристики SmartPulse
BLE-сервисы и характеристики SmartPulse

Шаг 5: Читаем и пишем значения BLE характеристик

Для того, чтобы прочитать информацию об уровне освещенности с помощью SmartLight, воспользуемся командой char-read-hnd, добавляя значение char value handle нужной характеристики (в данном случае 0x0003).

После применения команды получим данные об уровне освещенности, которые равны 40%. Для перевода устройства в ручной режим используем команду char-write-req 0×0008 с последующей передачей значения 00 в характеристику. Получаем уведомление об успешной записи значения в нужную характеристику.

Чтение и запись значения в характеристики устройства SmartLight
Чтение и запись значения в характеристики устройства SmartLight

В результате можно считать, что у нас получилось реализовать несанкционированный доступ к умному светильнику SmartLight с помощью базового пакета Linux для работы с Bluetooth и адреса устройства. Теперь попробуем проделать то же самое с защищенным устройством SmartPulse.

При попытке прочитать данные из характеристики появляется ошибка сегментирования. Также происходит автоматическое отключение от устройства. Если попробовать подключиться второй раз, то и тут возникнут проблемы, так как устройство больше не будет отображаться в перечне доступных для подключения. SmartPulse по факту больше не будет передавать никаких данных, пока его не перезагрузят физически с помощью кнопки.

Такой механизм из методики создает существенные трудности для повторных попыток удаленного подключения к устройству, благодаря чему остается один наиболее доступный способ взломать SmartPulse - украсть его. Правда, смысла в этом немного, так как само устройство не сохраняет никаких пользовательских данных.

Неудачная попытка НСД к SmartPulse
Неудачная попытка НСД к SmartPulse

Демонстрация НСД

Для наглядности проведения попыток несанкционированного доступа, я решил запечатлеть все на видео.

Чтобы смотрелось эпичнее, в процессе записи значения в характеристику SmartLight, я запустил на устройстве бегущую строку с надписью "I hacked you" с помощью команды char-write-req 0x000e 49206861636b656420796f75, где закодировал передаваемое сообщение в HEX.

Ну получил ты НСД к своему же устройству и что?

Я понимаю, что после прочтения данной статьи можно подумать, что она в целом не имеет никакого смысла. Потому что "собрать два устройства, на одном из которых реализовать разные механизмы защиты, а на другом не сделать даже банальный пин-код, после чего радоваться, что получили НСД к незащищенному устройству" - это сильно. Но айсберг, что называется, намного больше, чем кажется.

В силу того, что мне не хотелось бы "нырять" в возможные судебные тяжбы с одной достаточно крупной отечественной компанией, я не стану упоминать ни бренд, ни продукт, к которому у меня получилось подключиться ровно таким же образом, что и в этой статье.

Скажу только, что это было устройство одного из моих знакомых. Оно никак не было привязано ни к одному из моих мобильных или любых других устройств. После такого предисловия перейдем к невыдуманным историям, о которых невозможно молчать.

Итак, мне удалось обнаружить умное устройство моего знакомого в процессе одного из многочисленных сканирований. Недолго думая я решил "почему бы не попробовать к нему подключиться?". Я обычно доверяю тем, с кем общаюсь. Но попасть под 272 статью УК РФ как-то не было желания. Поэтому я решил спросить разрешение на подключение. Знакомый оказался не против. В итоге я не просто подключился к его устройству, но еще и смог отправить несколько записей в BLE-характеристики.

Мне не хотелось бы обвинять кого-либо или подробно разбираться в данном вопросе, но данный случай отнюдь не единичен. Это служит доказательством того, что коммерческие продукты от крупных и известных компаний, использующих BLE или Bluetooth для передачи данных, зачастую либо плохо защищены, либо незащищенны вовсе.

Поэтому даже тот грубый и прямолинейный способ, который я продемонстрировал, может быть рассмотрен для реального получения неправомерного доступа к существующим на рынке устройствам.

Вместо заключения

На мой взгляд, та методика обеспечения безопасности, которую я предложил в дипломной работе и описал в первой статье, может быть доработана и углублена для того, чтобы ее действительно можно было использовать на практике в ходе разработки и проектирования устройств Интернета вещей.

Я с радостью выслушаю мнение и предложения людей, которые осилили и прочитали эту и другие статьи цикла "Диплом специалиста ИБ", о том, как можно было бы улучшить методику и мое исследование в целом. Также мне хотелось бы поблагодарить всех, кто уделил время для прочтения данной статьи. Был бы безумно рад получить фидбек в виде комментариев, чтобы улучшать качество материала будущих статей.

P.S. Диплом защитил на 5 и получил несколько предложений о работе в сфере IIoT и инфобеза от членов комиссии.

Другие статьи цикла "Диплом специалиста ИБ"

Так как дипломная работа получилась достаточно объемной, я решил разбить ее на несколько связанных статей: 

  1. Диплом специалиста ИБ. Часть №1 - Методика обеспечения безопасности устройств Интернета вещей 

  2. Диплом специалиста ИБ. Часть №2 - Стационарное устройство SmartLight 

  3. Диплом специалиста ИБ. Часть №3 - Портативное устройство SmartPulse 

  4. Диплом специалиста ИБ. Часть №4 - Мобильное приложение Smart Connect 

  5. Диплом специалиста ИБ. Часть №5 - Несанкционированный доступ к IoT-устройствам с BLE

С оригиналом ВКР можно ознакомиться тут

Комментарии (8)


  1. NutsUnderline
    26.03.2024 11:04
    +1

    Выводы из истории несколько замылены, понятно почему так, но все же, если не хочется про крупную отечественную компанию то почему бы не взять девайс от совершенно неизвестного китайского производителя. Собственно, копались уже и в вибраторах и в зубных щетках, но вот что то обошли вниманием - вездеорущие колонки. Естественно с разрешения владелица/владелицы... Можно даже свои купить на известных маркетах :)

    Ну и поздравляю с дипломом, все очень достойно, было приятно читать, без фейспалмов - тем более.


    1. MaxiEnergy Автор
      26.03.2024 11:04
      +1

      Большое спасибо) Это очень приятно читать

      Про колонки и прочее - тут просто самой цели именно в этом не было, поэтому работал с тем, что подвернулось под руку. Я дальше планирую на Flipper Zero попробовать поиграться с моими устройствами и с разными коммерческими, если время будет


  1. Jury_78
    26.03.2024 11:04
    +1

    В результате можно считать, что у нас получилось реализовать несанкционированный доступ к умному светильнику

    Почему же несанкционированый? Если характеристики открыта и автор знает коды управления.


    1. MaxiEnergy Автор
      26.03.2024 11:04
      +1

      Поэтому я привел в пример историю с коммерческим устройством. То есть, смысл в том, что не обязательно знать коды управления (при наличии времени и желания их можно подобрать), чтобы получить доступ к устройству и как минимум попробовать им управлять. Ну и про открытые характеристики туда же. Хотя звучит, может, и не особо убедительно


  1. ZEN_LS
    26.03.2024 11:04
    +2

    Описанная проблема с "несанкционированным" доступом решается элегантнее. Устройству достаточно ожидать, что в течение 10 секунд должна прийти какая-то магическая константа. Если не приходит, то обрубаем соединение и ждем скажем минуту. Можно также сохранить MAC плохого клиента и в принципе не давать больше подключиться. Конечно мак можно и поменять, но какой в этом смысл если, во-первых, вы не можете определить причину дисконнекта, а во-вторых даже если определите, то перебор магического числа займет десятилетия.

    А по поводу самого BLE не нужно путать баг и фичу. Очень напоминает историю про badusb когда похекеры вдруг узнали как работает usb, и оказалось система при коннекте отправляет запрос и доверяет ответу от устройства. С BLE точно так-же, это фича, то что можно подключится к любому устройству без родного клиента (имхо, это прекрасно потому что позволяет делать кастомные клиенты, например для умных часов). Защищать же или нет свое устройство от использования базового функционала BLE каждая компания решает сама. Один из вариантов подобных действий описан выше.


    1. MaxiEnergy Автор
      26.03.2024 11:04
      +2

      Спасибо за идею с более элегантным способом. Я как-то сам до этого не дошел, хотя по сути, способ много где используется.

      Ну про фичу согласен. Только на мой взгляд это не должно никоим образом мешать безопасности устройства в целом. С тем же SmartPulse я же не запретил доступ в принципе. Можно спокойно подключиться к нему, можно посмотреть все сервисы и характеристики. То есть, при желании написать кастомный клиент, я предусмотрел эту возможность. Но прочитать что-либо из характеристик или записать в них без первоначального введения временного пин-кода - невозможно (или трудно выполнимо, чтобы не кидаться громкими словами). По сути, смысл всей статьи был в этом.

      Огромное спасибо за комментарий!


  1. Nick0las
    26.03.2024 11:04
    +2

    Вообще стандарт на BLE и GATT как раз разработан так, чтобы была возможна совместная работа разных устройств и зазного ПО, как уже укзал выше @ZEN_LS. А для защиты используется Pairing, которы требует физического доступа к устройству. Pairing в стандарте не самый тривиальный, там целых 4 уровня безопасности предусмотренно в зависимости от того как спаривание произошло. Процедура спаривания с высоким уровнем безопасности подразумевает аутентификацию. Аутентификация в свою очередь требует передачи информации от устройства к устройству минуя BLE, и невозможна без физического доступа к устройству. Типичная реализация аутентификации: считать код с экрана часов и ввести в телефон. Теоретически любую GATT характеристику можно запретить читать и писать неаутентифицированным клиентам, поэтому на уровне стандарта с защищенностью проблем нет.

    Ну а если вендор устройства не подумал об аутентификации, это его проблемы. Если у устройства нет ни интерфейса ввода ни интерфейса вывода способного передать 6 цифр с спариванием могут быть сложности. Это снижает защищенность канала связи, потому что 6 цифр нужны не только для аутнтификации но и для генерации ключа, недоступного тем, кто только слушает эфир. Можно сделать спаривание с подтверждением по кнопке (не помню, есть это в стандарте или надо костыли ставить). Но проблема известная, я сам работал когда-то над BLE устройством, и вопрос спаривания и защиты от несанкционированного доступа был отложен менеджментом и техлидом "на потом".


    1. MaxiEnergy Автор
      26.03.2024 11:04
      +1

      Про аутентификацию я с вами полностью согласен. Как раз в устройстве SmartPulse я реализовывал тот механизм, на который вы ссылаетесь, с генерацией шестизначного рандомного пин-кода и последующим выводом на экран устройства. Доступ к нему предоставляется после введения пин-кода в приложении Smart Connect. То есть, характеристики закрыты до тех пор, пока не произойдет проверка введенного в приложении пин-кода на уровне прошивки устройства. 

      Про кнопку ничего сказать не могу, я в стандарте этого не видел. По сути, сама проблема безопасности Интернета вещей как концепции и устройств IoT в частности заключается даже не в использовании уязвимостей технологий беспроводной передачи данных и прочего, а просто в нежелании «разработчика» хотя бы мало-мальски постараться над механизмами безопасности своего продукта. С точки зрения человека я могу это понять, потому что мало кто идет проверяться у стоматолога, пока зуб не заболит. Но на мой взгляд это все таки проблема, потому что важно осознавать последствия, которые могут возникать из-за такой халатности.

      Спасибо за комментарий!