Робот-пылесос Xiaomi Mi Robot взломали
Дыры в интернете вещей стали обычным пугалом нашего времени, но даже страшные сказки иногда заканчиваются хорошо. Вот вам свежий пример: экспертам по информационной безопасности Деннис Гизе (Dennis Giese) и Дэниэл Вегемер (Daniel Wegemer) удалось взломать робот-пылесос Xiaomi Mi Robot — однако в процессе исследования выяснилось, что он намного безопаснее большинства смарт-устройств.
В своем выступлении на Chaos Communication Congress 34, который недавно прошел в Лейпциге, исследователи рассказали о том, как устроено программное обеспечение пылесоса и о том, какими уязвимостями они воспользовались для того, чтобы преодолеть его защиту.
Аппаратный взлом пылесоса Mi Robot с помощью фольгиНачалось все с того, что Гизе и Вегемер с удивлением обнаружили, что начинка робота-пылесоса Xiaomi мощнее, чем у многих смартфонов: в него встроено целых три; процессора ARM, один из них четырехъядерный. Уже интригует, не так ли? Для разогрева Гизе и Вегемер попробовали несколько очевидных способов атаки.
Первым делом они проверили, можно ли использовать для взлома пылесоса порт micro-USB. Оказалось, что нельзя: разработчики Xiaomi защитили подключение аутентификацией. Затем исследователи полностью разобрали Mi Robot и попытались найти последовательный порт на материнской плате — но эта затея тоже оказалась неудачной.
Следующую попытку взлома эксперты предприняли через сеть. Они просканировали сетевые порты устройства, но все оказались закрыты. Перехват трафика тоже ни к чему не привел — выяснилось, что обмен данными пылесоса с внешним миром полностью зашифрован.
Лично я был впечатлен таким вступлением: уже на этой стадии большинство других IoT-устройств удалось бы взломать. Их производители редко дают себе труд предусмотреть такие меры безопасности. Наше недавнее исследование наглядно продемонстрировало, насколько плачевно обстоят дела с защитой большинства подключенных устройств.
Но вернемся к Xiaomi Mi Robot. Следующая попытка заключалась в атаке на аппаратную часть пылесоса. Тут наконец-то исследователям улыбнулась удача — замкнув фольгой «правильные» контакты процессора, им удалось перевести чип в специальный режим, разрешающий не только чтение, но даже запись флеш-памяти напрямую через USB-порт.
Таким образом Гизе и Вегемер смогли извлечь прошивку Mi Robot, провести ее реверс-инжиниринг и модификацию, а потом загрузить результат своих трудов обратно в робот-пылесос — и таким образом получить полный контроль над устройством.
Беспроводной взлом пылесоса Mi RobotНо вскрытие корпуса и манипуляции с железом — это не круто, всегда гораздо интереснее, когда хакнуть удается «без проникновения». После реверс-инжиниринга прошивки исследователи нашли способ взломать пылесос просто через Wi-Fi, воспользовавшись недоработками в механизме обновления.
Вообще говоря, процедура обновления прошивки реализована Xiaomi весьма грамотно: зашифрованный архив со свежей прошивкой загружается через зашифрованное подключение после получения зашифрованного же сообщения с командой обновиться.
Однако кое-что реализовано не идеально. Во-первых, оказалось, что эти архивы с обновлениями Xiaomi защищены одним и тем же статичным паролем: rockrobo (никогда не пользуйтесь настолько слабыми паролями). Зная это, исследователи подготовили зашифрованный нужным образом пакет с собственной модифицированной прошивкой.
Вторая ошибка разработчиков состояла в том, что команду обновить ПО пылесосу можно отправить со смартфона, для этого используется встроенный в приложение Xiaomi ключ. Оставалось извлечь этот ключ из приложения и после этого исследователи получили возможность отправить пылесосу команду на загрузку и установку обновления — но не из облака Xiaomi, а с их собственного сервера. Вот так был найден еще один способ взлома устройства, на этот раз беспроводной.
Прошивка Mi Robot изнутриИзучая прошивку, Гизе и Вегемер узнали ряд интересных фактов о смарт-устройствах Xiaomi. Во-первых, прошивка Mi Robot представляет собой операционную систему Ubuntu Linux — причем все патчи устанавливаются регулярно и оперативно. Во-вторых, компания применяет уникальные пароли суперпользователя на каждом устройстве, а значит, не существует единого пароля, которым можно одним махом взломать целую армию роботов-пылесосов. И в-третьих, система оснащена сетевым экраном, который блокирует любые полезные для хакеров порты. Вновь снимаю шляпу перед Xiaomi: по стандартам IoT они реализовали на удивление хорошую защиту.
Однако в бочке меда не обошлось без ложки дегтя: обнаружилось, что Mi Robot собирает и отправляет в облако Xiaomi очень много данных — по несколько мегабайт в день. Причем наряду с относительно безобидной телеметрией пылесос передает названия и пароли сетей Wi-Fi, к которым подключается, а также схемы помещений, которые создает с помощью встроенного лидара.
Еще один неприятный момент: все собранные пылесосом данные навечно остаются в системе, даже после сброса до заводских настроек. Так что если кто-то купит подержанный робот-пылесос Xiaomi на eBay и сумеет его взломать (а после публикации исследования Гизе и Вегемера это будет не так сложно сделать), то сможет без проблем добраться до паролей предыдущих хозяев.
Стоит подчеркнуть, что оба способа атаки, найденные Гизе и Вегемером, позволяют им взломать только собственные устройства. Первый метод требует физического доступа к пылесосу. Для второго же необходимо раздобыть ключ шифрования, чтобы сформировать фальшивый запрос на обновление, — а эти ключи генерируются заново при каждом «спаривании» устройства с мобильным приложению, не повторяясь. Заполучить такой ключ без доступа к смартфону, подключенному к нужному вам устройству Xiaomi, очень непросто.
Так что создание ботнета Xiaomirai нам вряд ли грозит. Скорее, наоборот: исследование продемонстрировало, что Xiaomi намного серьезнее относится к безопасности, чем большинство производителей подключенных устройств. Как известно, взломать можно практически что угодно, но если система хорошо защищена, вряд ли злоумышленники будут тратить на нее время — обычно их привлекает легкая добыча.
© kaspersky.ru
Способы взлома:
Последняя на данный момент прошивка (3.3.9_003132) с рутом и отдельно русская говорилка
Языковые пакеты можно ставить на любую прошивку, независимо стоковая она у вас или кастомная.
Прошивку и говорилку можно прошивать независимо друг от друга, а можно и вместе. Красным указано, что нужно сделать в случае прошивки, а что в случае говорилки. Остальные пункты общие для обоих процессов
» Инструкция по прошивке на примере Debian 8.7-9.3 «
# - означает, что команда должна быть выполнена от пользователя root
Чтоб выполнить команду от пользователя root, необходимо перед командой добавить sudo (в Debian может не быть по умолчанию). Например sudo apt-get ...., либо перейти полностью в режим рут с помощью команды su (sudo su в Ubuntu). После ввода команды система попросит рут-пароль.
Робот должен быть заряжен или стоять на док-станции
Если будете прошивать говорилку, ставим китайский язык, который DefaultСначала тянем зависимости:
Code
#apt-get install python-setuptools git python3 python3-dev build-essential
#easy_install pip
#pip install pipenv
Чтоб все сделать чисто, создаем папку в домашнем каталоге и переходим в неё
Code
mkdir ~/cleaner
cd ~/cleaner
В эту папку теперь скачиваем прошивку и/или говорилку. В данном случае v11_003132_root.pkg и russian.pkg
Для прошивки:
Code
wget https://www.dropbox.com/s/s55t9wanye3lml4/v11_003132_root.pkg?dl=1 -O v11_003132_root.pkg
Для говорилки:
Code
wget https://www.dropbox.com/s/brtrgc511ll36ff/russian.pkg?dl=1 -O russian.pkg
Качаем необходимое ПО и разворачиваем:
Code
alias python=python3
pipenv shell --three
pip install git+https://github.com/rytilahti/python-miio
Далее начинаем уже работу с пылесосом:
Если на компьютере есть Wi-Fi, то сбрасываем Wi-Fi удержанием обеих кнопок (выкл. и домой). Далее на компе появится новая открытая сеть rockrobo-XXXX. Подключаемся к ней.
Эта команда найдет нам ip и токен, которые нам нужны будут в дальнейшем. Например, IP 192.168.8.1 (ID: 03xxxxx) - token: b'374643644a4e41333232755346305a79'. Токен берем только то, что в кавычках. Выполняем:
Code
mirobo discover --handshake true
Если на компьютере нет Wi-Fi, то выполняем действия по этой инструкции, чтоб получить токен.1) С помощью Root Explorer или SQLite Editor на телефоне открыть /data/data/com.xiaomi.smarthome/databases/miio2.db и посмотреть Ваш token
Далее набор команд:
Code
mirobo --ip=192.168.8.1 --token=#токен# status
Если все сделали правильно, то отобразится информация с пылесоса о батарее, настройках и убранной территории.
Далее запускаем локальный сервер, с которого робот и будет тянуть прошивку:
Code
python -m http.server 8000 &
Прошиваем прошивку:
IP-адрес (в моем случае 192.168.8.167) нужно посмотреть в состоянии Wi-Fi. MD5-сумма рассчитана для текущей прошивки (можно посчитать самим с помощью команды md5sum file.pkg):
Code
mirobo --ip=192.168.8.1 --token=#токен# raw_command miIO.ota '{"mode":"normal", "install":"1", "app_url":"http://192.168.8.167:8000/v11_003132_root.pkg", "file_md5":"f00d9fe91f32c52cea4e019340a8d75c","proc":"dnld install"}'
Если прошивка пошла, то на экране вы увидете следующую надпись (может и не появиться, зависит от ОС) и индикатор на роботе начнет часто мигать:
Code
192.168.8.1 - - [03/Jan/2018 04:26:32] "GET /v11_003132_root.pkg HTTP/1.1" 200 -
Логин и пароль по ssh
cleaner. После логина можно поменять пароль на свой с помощью команды
passwdПрошиваем говорилку:Если до этого прошивали прошивку (обязательно дождитесь окончания прошивки - мелодия включения, только потом продолжайте), то нужно снова "поздороваться" с роботом, чтоб получить новый токен (возможно заново нужно подключиться к его сети), иначе пропускаем этот шаг:
Code
mirobo discover --handshake true
IP-адрес (в моем случае 192.168.8.167) нужно посмотреть в состоянии Wi-Fi. MD5-сумма рассчитана для текущей говорилки (можно посчитать самим с помощью команды md5sum file.pkg):
Code
mirobo --ip=192.168.8.1 --token=#токен# raw_command dnld_install_sound '{"md5":"2324e8453474e3cb984569e118742fee","sid":1,"url":"http://192.168.8.167:8000/russian.pkg"}'
Если прошивка пошла, то на экране вы увидете следующую надпись (может и не появиться, зависит от ОС) и индикатор на роботе начнет часто мигать (процесс занимает пару секунд):
Code
192.168.8.1 - - [03/Jan/2018 04:26:32] "GET /russian.pkg HTTP/1.1" 200 -
После того, как все успешно прошьется и запустится (а это около 10 минут, в процессе робот еще буркнет, что скачал прошивку и начинает процесс прошивки или пара секунд в случае прошивки говорилки) можно будет выключить локальный сервер python:
Code
fg
control+C
P.S. Можно все сделать под виртуалкой в VirtualBox, дополнительного нужно будет только в настройках виртуальной машины добавить сетевой адаптер с типом "Мост" с вашим Wi-Fi-адаптером и включить его внутри виртуальной ОС. Это для того, чтоб виртуалка видела пылесос, подключенный по Wi-Fi. Остальные интерфейсы лучше выключить перед «приветствием» (handshake)
»» Нажмите, для закрытия спойлера | Press to close the spoiler «« » Видео-инструкция «
https://www.youtube.co...?v=qDfiwMU7uc0»» Нажмите, для закрытия спойлера | Press to close the spoiler «« » Слушаем радио или музыку «
Code
#apt-get update
#apt-get install sox libsox-fmt-mp3
sox http://radio-srv1.11one.ru/record192k.mp3 -d
»» Нажмите, для закрытия спойлера | Press to close the spoiler «« Лично проверенно на своём питомце, наконец-то заговорил на русском и поёт при уборке радио или детскую музыку
--------------------
Не работает ссылка? Пишите в теме, обновим :)! Link not working? Let us know in the comments, we'll fix it!Трудно найти слова, когда действительно есть что сказать. Э.М. Ремарк