Наткнулся на любопытную статью. Решил перевести. Автор купил умный пылесос и начал анализировать его трафик. Дальше началась Санта-Барбара. Ссылка на оригинал: https://codetiger.github.io/blog/the-day-my-smart-vacuum-turned-against-me/
День, когда мой умный пылесос обратился против меня
Начало: любопытный эксперимент
Всё началось довольно невинно. Я недавно купил умный пылесос iLife A11 — элегантный, доступный и технологически продвинутый робот, обещающий лёгкую уборку и интеллектуальную навигацию. Как инженер-любитель, я был очарован тем, как он работает.
Я немного параноик — в хорошем смысле этого слова. Поэтому я решил отслеживать его сетевой трафик, как и следовало бы сделать с любым таким «умным» устройством.
Через несколько минут я заметил постоянный поток пакетов, уходящих на серверы, расположенные на другом конце света. Мой робот-пылесос постоянно отправлял производителю журналы и телеметрию, на передачу которых я никогда не давал согласия.
И тогда я совершил свою первую ошибку: решил остановить передачу данных. Заблокировал его IP-адрес для регистрации данных — только журналы, а не обновления прошивки или каналы OTA.
Внезапная смерть умного пылесоса
В течение нескольких дней казалось, что всё в порядке. Пылесос продолжал убирать, строить карту помещения и послушно избегать мебели. Однако однажды утром он просто не включился.
Я отправил его в сервисный центр. Там мне сказали:
«Здесь он работает отлично, сэр.»
Они прислали его обратно, и каким-то чудом он снова проработал несколько дней. А затем снова вышел из строя.
Всё превратилось в один сюрреалистический цикл:
Я отправлял его в сервис
Они «ремонтировали» его
Он проработал недолго.
Он снова выходил из строя
Я начал чувствовать, что теряю рассудок. Как мог один простой 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 один из скриптов был изменён таким образом, что главный сервис не запускался. Это была не случайная ошибка — это была преднамеренная команда.
В системных логах я обнаружил такую запись:
Именно в этот момент мой пылесос навсегда перестал работать. Временная метка точно совпала с моментом его поломки, хотя я ни к какому приложению не прикасался.
Кто-то — или что-то — удалённо отправил команду kill.
Я отменил изменение в скрипте и перезагрузил устройство. Оно сразу же ожило. Оказалось, они не просто добавили функцию дистанционного управления — они использовали её, чтобы раз и навсегда отключить моё устройство.
На заводе на устройстве по умолчанию был установлен rtty. Эта небольшая программа позволяет получить root-доступ к устройству извне, давая производителю возможность запускать любые команды или устанавливать любые скрипты без ведома владельца.
К этому моменту я почувствовал себя даже более сведущим, чем сотрудники сервисного центра, которые вроде бы должны были разбираться в таких устройствах лучше меня.
Тайна сервисного центра, раскрыта
Помните бесконечный цикл сервисных визитов? Наконец-то всё стало ясно.
Когда я заблокировал серверы телеметрии робота, он стал использовать кэшированные DNS-записи для подключения к альтернативным IP-адресам. Каждый раз, когда я блокировал новый адрес, он снова терял связь — как в цифровой игре «Удар по кроту».
В сервисном центре устройство перепрошили и подключили к открытой Wi-Fi сети. Оно снова вышло на связь с «материнским» сервером и было удалённо «оживлено». Однако, вернувшись через мой файрвол, оно вновь вышло из строя. Это было вовсе не совпадение — это был чистой воды контроль.
Месть за конфиденциальность
Производитель мог дистанционно отключать устройства и использовал эту возможность, чтобы отомстить мне за блокировку сбора данных.
Назовём вещи своими именами: это была месть. Независимо от того, было ли это преднамеренное наказание или автоматизированная мера принуждения, результат оказался одним и тем же: потребительское устройство обернулось против своего владельца.
Что это значит для всех нас
Это был не единичный случай. Один и тот же аппаратный модуль — 3irobotix CRL-200S — используется в устройствах Xiaomi, Wyze, Viomi и Proscenic.
Десятки умных пылесосов могут подвергнуться той же атаке. Наши дома полны камер, микрофонов и сенсоров, подключённых к компаниям, о которых мы мало что знаем — и всё это можно превратить в оружие одной строкой кода.
Возвращение контроля
Возможно, я лишился гарантии, но зато вновь получил полный контроль. Теперь мой пылесос работает полностью автономно: никакого облака, никакого слежки, никакого удалённого доступа — только локальный робот, выполняющий мои команды.
Что сделал
- Полный локальный контроль над устройством.
- Доступ производителя полностью заблокирован.
- Все результаты задокументированы для сообщества.
- Робот воскрес — на моих условиях.
- Изучил Google Cartographer и поэкспериментировал с конфигурацией, чтобы улучшить работу устройства.
Извлеченные уроки
Что на самом деле означает «умный»:
- «Умный» часто означает отсутствие контроля у пользователя.
- «Дешёвый» почти всегда означает уязвимость в безопасности.
- «Удобство» нередко сопровождается скрытым наблюдением.
Золотое правило:
- Никогда не подключайте IoT-устройства к вашей основной Wi-Fi сети.
- Относитесь к ним как к чужим в вашем доме.
Личное размышление
То, что начиналось как простое любопытство, превратилось в настоящее откровение. Они не просто создали бэкдор — они им воспользовались. Я всего лишь хотел не дать пылесосу «звонить домой», но выяснилось, что он никогда по-настоящему не был моим.
В следующий раз, когда вы будете покупать «умное» устройство, подумайте:
- Кому оно на самом деле принадлежит — вам или компании, которая его создала?
Ведь иногда даже пылесос может оказаться шпионом.
Полная документация и все детали реверс-инжиниринга доступны в репозитории: VacuumRobot.