S в аббревиатуре IoT означает «Security», или Как я лампу хакнул

в 9:45, , рубрики: IoT, безопасность, Блог компании VDSina.ru, гаджеты, Интернет вещей, информационная безопасность, Разработка для интернета вещей

S в аббревиатуре IoT означает «Security», или Как я лампу хакнул - 1

Недавно мне выдали пару настольных светодиодных ламп, чтобы улучшить освещение для видеосовещаний. Это простые ламы с тремя элементами управления: включение-отключение, температура, яркость. Благодаря тупиковому стремлению создавать IOT-устройства с приложением для монетизации данных пользователей управление температурой и яркостью — это не просто регуляторы на лампе, нет, они управляются проприетарным приложением, которые вы вынуждены (если вы, конечно, его не хакнете, но об этом позже) скачать на свой телефон или компьютер. Кроме того, для установки приложения необходимо принять условия пользовательского соглашения. После установки приложения нужно «активировать» лампу в приложении, подключив её к WiFi и Интернету.

Полный стек лампы

Теперь это не просто лампа, а целый компьютер и точка доступа к WiFi. Кроме того, он требует установки на телефон или компьютер проприетарного приложения, для которого невозможно провести аудит безопасности. Права владения — главная мера степени конфиденциальности, безопасности и свободы; если вы не владеете устройством полностью, то вами владеет разработчик (и производитель) устройства. Единственный способ вернуть лампу себе в собственность — это взломать её.

Зная (по опыту), что устройство, умеющее получать доступ в Интернет, может создавать обратный канал в локальную сеть (autossh ... -R ...), я отказался от подключения этих ламп к своему локальному WiFi и Интернету, решив, что выберу один из вариантов: a) сдам их в переработку; b) буду использовать их только офлайн-режиме «лампы» со стандартными значениями; или c) проверю, смогу ли я управлять их API точки доступа без использования проприетарного приложения (и принятия условий пользовательского соглашения).

Напомню, что функции ограничены включением-отключением, регулировкой температуры и яркости.

Включение-отключение работает как от физического переключателя на лампе (прямо рядом с кнопкой сброса, потому что это ведь теперь настоящий компьютер), так и через приложение (это я видел только на скриншотах, потому что не устанавливал его). Управление температурой меняет цвета освещения от голубого к жёлтому (и по умолчанию установлен голубой, если вы его не измените). Яркость по умолчанию выставлена на 90%, а мне бы хотелось регулировать её в зависимости от времени суток.

Я подумал, что если смогу хакнуть лампу, то у меня получится и собрать приложение, которое будет принадлежать мне, и я буду использовать лампу для своих личных целей. Так как я следил за невероятным прогрессом разработки приложений для PureOS и Librem 5 при помощи GNOME-Builder, создание простого приложения будет отличным проектом-экспериментом для получения полного контроля над моей лампой.

Взламываем лампу

Увидев, что эти две лампы являются точками доступа WiFi, и поняв из скриншотов, что в проприетарном приложении нужно «добавлять» лампы в приложение (то есть подключаться к ним как к точке доступа WiFi), а затем подключать лампу к локальному WiFi (что, разумеется, даст ей полный доступ к Интернету, если вы не настроите в своём роутере правила для файрволла), я решил подключиться к точке доступа лампы (Lamp AP) и посмотреть, что удастся выяснить. Производитель (безымянный) настроил точку доступа с уникальными шестнадцатеричными кодами, привязанными к его ESSID (Manufacturer 4CDC), и после подключения к первой лампе (каждый раз смеюсь, вспоминая, что лампа является IOT-устройством) я получил локальный ip 192.168.1.24 с точкой доступа по адресу 192.168.1.1. Браузер по этому адресу выдаёт 404, поэтому я опросил порты и обнаружил открытый порт 8193. По этому адресу браузер вернул страницу подключения лампы к локальному WiFi. Для меня это не вариант, так что, возможно, существует web API.

Web API

После краткого поиска обнаружился URL-путь web API, возвращающий структуру JSON {"numberOfLights":1,"lights":[{"on":0,"brightness":28,"temperature":309}]}, то есть можно считывать три используемых лампой значения как однострочный объект данных. Метод GET возвращает значения, а метод PUT задаёт значение. Теперь я мог подключиться к точке доступа и передать при помощи PUT строку JSON на address:port/path, управляя таким образом тремя значениями лампы. Счёт: Лампа — 0, Я — 1.

Короткий bash-скрипт позволил мне как минимум включать лампы и задавать им заранее установленные температуру и яркость.

Благодаря возможности управлять лампами через web API мы не обязаны отказываться ни от одного из своих цифровых прав и можем получить эти лампы в полную собственность, не отдавая контроль производителю или разработчикам приложения. Счёт: Приложение лампы — 0, Я — 2.

Приложение

Борьба за свободу и избавление от цепей проприетарного приложения — это хорошо. Плохая идея — не только подключать лампу к Интернету, но и то, что нужно устанавливать какое-то «левое» приложение, аудита которого вы не можете провести на своём телефоне.

GNOME-Builder — потрясающий инструмент (привет, Кристиан). Я решил начать новый проект, выбрал Python и сразу же получил полнофункциональный пример проекта Hello World, который можно было собрать.

В GNOME-Builder я накидал простой дизайн во вкладке View Design и начал транслировать nmcli bash и wget в библиотеки Python. После изучения того, как работают манифесты Flatpak для включения необходимых библиотек (подсказка: манифесты потребовали обучения, чтобы разрешать зависимости внутри flatpak), у меня на руках было приложение уровня proof of concept, позволявшее мне подключаться к лампе и регулировать температуру и яркость.

S в аббревиатуре IoT означает «Security», или Как я лампу хакнул - 2

Обеспечиваем безопасность лампы

Теперь, когда я могу управлять лампами без доступа к Интернету через свой телефон Librem 5, а также на десктопе Librem Mini, нужно добавить этому IOT-устройству столь необходимую безопасность. К счастью, поскольку у меня был Librem 5 с PureOS, мне удалось относительно легко заменить проприетарное небезопасное приложение собственным простым приложением, работающим и в телефоне, и (благодаря конвергентной разработке приложений) на десктопе, чтобы можно было держать лампы отключенными от Интернета и управлять ими при помощи моего надёжного приложения.

Чем больше Internet of Things (или, как его называют некоторые, Internet of Stings) проникает в сети и в дома, тем сильнее будет страдать от эксплуатации ваша цифровая жизнь. Об этой эксплуатации регулярно сообщают; например, в Washington Post недавно опубликовали статью Massive camera hack exposes the growing reach and intimacy of American surveillance, демонстрирующую ужасы небезопасного IOT.

Защищаем IOT

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

Безопасность должна быть фундаментальным принципом IOT-продуктов: если уж лампу сделали IOT-устройством, то её, по крайней мере, можно разработать так, чтобы пользователь имел над ней полный контроль, чтобы она не требовала принятия условий пользовательского соглашения, не сообщала информацию производителю и не отправляла ни единого бита по сети без запроса пользователя. Именно это я и проделал со своей IOT-лампой.


На правах рекламы

Наши серверы подойдут для любых целей, в том числе для разработки и управления IoT. Частота ядра CPU до 3.4 GHz, используется быстрое и надёжное дисковое хранилище на основе NVMe дисков. Создайте собственный тарифный план в пару кликов, максимальная конфигурация — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe.

Автор: Mikhail

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js