Наткнулся на любопытную статью. Решил перевести. Автор купил умный пылесос и начал анализировать его трафик. Дальше началась Санта-Барбара. Ссылка на оригинал: https://codetiger.github.io/blog/the-day-my-smart-vacuum-turned-against-me/

День, когда мой умный пылесос обратился против меня

Разрешили бы вы незнакомцу управлять роботом, оснащённым камерой, который курсирует по вашей гостиной? Возможно, вы уже сделали это, даже не осознавая.
Разрешили бы вы незнакомцу управлять роботом, оснащённым камерой, который курсирует по вашей гостиной? Возможно, вы уже сделали это, даже не осознавая.

Начало: любопытный эксперимент

Всё началось довольно невинно. Я недавно купил умный пылесос iLife A11 — элегантный, доступный и технологически продвинутый робот, обещающий лёгкую уборку и интеллектуальную навигацию. Как инженер-любитель, я был очарован тем, как он работает.

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

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

И тогда я совершил свою первую ошибку: решил остановить передачу данных. Заблокировал его IP-адрес для регистрации данных — только журналы, а не обновления прошивки или каналы OTA.

Внезапная смерть умного пылесоса

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

Я отправил его в сервисный центр. Там мне сказали:

«Здесь он работает отлично, сэр.»

Какой-то мужик из СЦ

Они прислали его обратно, и каким-то чудом он снова проработал несколько дней. А затем снова вышел из строя.

Всё превратилось в один сюрреалистический цикл:

  1. Я отправлял его в сервис

  2. Они «ремонтировали» его

  3. Он проработал недолго.

  4. Он снова выходил из строя

Я начал чувствовать, что теряю рассудок. Как мог один простой IP-блок вывести из строя пылесос, который, казалось бы, должен уметь работать автономно?

А вскоре сервисный центр просто отказался его дальше чинить. На это мне ответили:

«Гарантия истекла, сэр.»

Может быть, тот же мужик из СЦ

И вот так мой 300-долларовый умный пылесос превратился в простой пресс-папье.

Переломный момент: нечего терять

И тогда любопытство окончательно пересилило разочарование. Гарантия уже не действовала, поэтому я взял отвёртку и вскрыл пылесос. Если не смогу его починить, по крайней мере выясню, почему он сломался. То, что начиналось как обычный ремонт, превратилось в настоящее погружение в реверс-инжиниринг.

Снимая слой за слоем

Внутри iLife A11 оказался не просто пылесос, а настоящий компьютер на колёсах. Под капотом я обнаружил:

  • Системную плату SoC AllWinner A33 под управлением полноценной ОС Linux (TinaLinux).
  • Микроконтроллер GD32F103, управляющий двигателями и датчиками.

  • Лидар, гироскопы, энкодеры — и многое другое, что только можно вообразить.

Это было чудо дешёвой инженерии, но одновременно и настоящий кошмар для конфиденциальности, только и ждущий своего часа.

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

Для тестирования системы я собрал собственную систему управления: интерфейс джойстика на базе Raspberry Pi, с помощью которого можно было вручную управлять пылесосом. И она работала отлично. К этому моменту я полностью понимал устройство аппаратной части вплоть до каждого чипа и разъёма.

Первый прорыв: root-доступ к программному обеспечению

Во время исследования USB-порта отладки я обнаружил шокирующую деталь: Android Debug Bridge (ADB) был полностью открыт — без пароля и какой-либо аутентификации. И под этим портом работал Linux.

За считанные секунды я получил полный root-доступ. Без взломов или уязвимостей — я просто подключил устройство, и всё заработало само по себе.

Однако вскоре после загрузки соединение обрывалось. Я понял, что в эти драгоценные секунды нужно сделать что-то, чтобы связь сохранить. После небольшого интернет-исследования выяснилось, что для подобных устройств необходимо создать в корневой директории определённый файл. Оказалось, что это продуманный лайфхак от производителя, чтобы блокировать несанкционированный доступ вроде моего. Удивительно, но разобраться оказалось несложно. Методом проб и ошибок я выяснил несколько уловок, которые позволяли навсегда удерживать доступ к устройству.

В результате я открыл порт SSH, что позволило подключаться к системе с компьютера. Поэкспериментировав с доступом к Linux, я нашёл системные журналы, конфигурации и даже незашифрованные учётные данные Wi-Fi, которые устройство отправляло на серверы производителя.

Затем я столкнулся с ещё одним сюрпризом: на устройстве работал Google Cartographer — профессиональная система SLAM, используемая для автономного картографирования и робототехники.

Этот недорогой пылесос использовал первоклассное программное обеспечение, чтобы построить живую 3D‑карту моего дома. То, что начиналось как поломка обычного пылесоса, превратилось в исследовательскую платформу с открытым исходным кодом для роботов.

Темное открытие

В глубине скриптов загрузки робота я нашёл неопровержимое доказательство. В каталоге /etc/init.d один из скриптов был изменён таким образом, что главный сервис не запускался. Это была не случайная ошибка — это была преднамеренная команда.

В системных логах я обнаружил такую запись:

2024/02/29, 14:06:55.852622 [LogKimbo][CAppSystemState] Handle message! cmd_id 501 RS_CTRL_REMOTE_EVENT, len 8 serialno 0

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

Кто-то — или что-то — удалённо отправил команду kill.

Я отменил изменение в скрипте и перезагрузил устройство. Оно сразу же ожило. Оказалось, они не просто добавили функцию дистанционного управления — они использовали её, чтобы раз и навсегда отключить моё устройство.

На заводе на устройстве по умолчанию был установлен rtty. Эта небольшая программа позволяет получить root-доступ к устройству извне, давая производителю возможность запускать любые команды или устанавливать любые скрипты без ведома владельца.

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

Тайна сервисного центра, раскрыта

Помните бесконечный цикл сервисных визитов? Наконец-то всё стало ясно.

Когда я заблокировал серверы телеметрии робота, он стал использовать кэшированные DNS-записи для подключения к альтернативным IP-адресам. Каждый раз, когда я блокировал новый адрес, он снова терял связь — как в цифровой игре «Удар по кроту».

В сервисном центре устройство перепрошили и подключили к открытой Wi-Fi сети. Оно снова вышло на связь с «материнским» сервером и было удалённо «оживлено». Однако, вернувшись через мой файрвол, оно вновь вышло из строя. Это было вовсе не совпадение — это был чистой воды контроль.

Месть за конфиденциальность

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

Назовём вещи своими именами: это была месть. Независимо от того, было ли это преднамеренное наказание или автоматизированная мера принуждения, результат оказался одним и тем же: потребительское устройство обернулось против своего владельца.

Что это значит для всех нас

Это был не единичный случай. Один и тот же аппаратный модуль — 3irobotix CRL-200S — используется в устройствах Xiaomi, Wyze, Viomi и Proscenic.

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

Возвращение контроля

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

Что сделал

  • Полный локальный контроль над устройством.
  • Доступ производителя полностью заблокирован.
  • Все результаты задокументированы для сообщества.
  • Робот воскрес — на моих условиях.
  • Изучил Google Cartographer и поэкспериментировал с конфигурацией, чтобы улучшить работу устройства.

Извлеченные уроки

Что на самом деле означает «умный»:

  • «Умный» часто означает отсутствие контроля у пользователя.
  • «Дешёвый» почти всегда означает уязвимость в безопасности.
  • «Удобство» нередко сопровождается скрытым наблюдением.

Золотое правило:

  • Никогда не подключайте IoT-устройства к вашей основной Wi-Fi сети.
  • Относитесь к ним как к чужим в вашем доме.

Личное размышление

То, что начиналось как простое любопытство, превратилось в настоящее откровение. Они не просто создали бэкдор — они им воспользовались. Я всего лишь хотел не дать пылесосу «звонить домой», но выяснилось, что он никогда по-настоящему не был моим.

В следующий раз, когда вы будете покупать «умное» устройство, подумайте:

  • Кому оно на самом деле принадлежит — вам или компании, которая его создала?
  • Ведь иногда даже пылесос может оказаться шпионом.

Полная документация и все детали реверс-инжиниринга доступны в репозитории: VacuumRobot.

32
3
2
2
13 комментариев