• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Как я реверсил домофон, нашел возможность прослушки и поставил на него Doom II

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,311
Розыгрыши
0
Реакции
591
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Недавно я исследовал крайне необычный для меня девайс — видеодомофон с сенсорным экраном и Wi-Fi. Я разобрал его, изучил и нашел… некоторые уязвимости. Я хотел ответить на вопрос «А могут ли меня подслушивать?». Ответ мы сегодня найдем вместе.
Я привык, что домофон — это такая висящая на стене трубка, которую надо снять, когда звонят, а потом нажать кнопку с ключиком, чтобы открыть дверь. Пару раз я видел вариант с маленьким экраном, на котором не видно ровным счетом ничего: черно‑белая картинка, сильно зернистая, с плохо распознаваемыми силуэтами.

Однажды в мои руки попал не такой простецкий домофон, а навороченный: с большим цветным тачскрином и подключением по Wi-Fi. Я хотел узнать, нельзя ли его использовать для прослушивания. Забегая вперед скажу, что при определенных условиях вполне можно.


Вот как выглядело это чудо.

Для просмотра ссылки Войди или Зарегистрируйся
На обратной стороне девайса — клеммы для подключения питания, сигнализации, звонка и Ethernet-кабеля, который по факту оказался разъемом PoE (можно питать домофон сразу от локальной сети). На торчащие провода обращать внимание не нужно: это уже мои «доработки», о них я расскажу позже.

Для просмотра ссылки Войди или Зарегистрируйся
Включив аппарат, первым делом идем в настройки и ищем что‑нибудь на тему Telnet/SSH/FTP, но ничего полезного не обнаруживаем. Однако в веб‑интерфейсе нашлась возможность обновлять прошивку, что может пригодиться.

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

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

Для просмотра ссылки Войди или Зарегистрируйся
Судя по начинке, основная плата домофона — это фактически контроллер дисплея, Wi-Fi и PoE, а отдельная платка — не что иное, как съемный CPU с оперативкой и флешкой. Похоже, такая реализация удобна для обслуживания.

Для просмотра ссылки Войди или Зарегистрируйся
Рядом с маленькой платой — странный нераспаянный разъем CN2 (на фото я к нему уже припаялся), на двух выводах которого — резисторы. Верный знак того, что это что‑то важное (например, UART-консоль). Прежде чем браться за паяльник, можно изучить поближе съемную плату, с нее вполне возможно прочитать прошивку.

Для просмотра ссылки Войди или Зарегистрируйся
Правда, BGA я тогда запаивать обратно (реболить) не умел, поэтому сконцентрировал усилия на UART.

Для просмотра ссылки Войди или Зарегистрируйся
Увидеть при запуске лог загрузки — это, несомненно, круто! Но еще круче увидеть строку «Hit any key to stop autoboot». Активно нажимаем Enter и попадаем в меню U-Boot. Затем набираем команду help и ищем среди доступных команд что‑то для работы с eMMC. Команда mmc read вполне сгодится. У меня уже был опыт получения дампа флешек через UART, поэтому я просто взял и адаптировал старый Для просмотра ссылки Войди или Зарегистрируйся на Python под вывод команды.

Для просмотра ссылки Войди или Зарегистрируйся
Дампятся такие штуки обычно крайне долго (можно научиться паять BGA за это время). Я оставил процесс на ночь, но даже этого не хватило. Поэтому я прервал чтение и поправил скрипт так, чтобы тот дампил из файловой системы только нужные мне файлы. Например, файлик /etc/shadow пригодится для брута учеток и входа на домофон по SSH (Telnet на девайсе был выключен). К сожалению, ничего набрутить мне не удалось.

Остается вариант дампить все исполняемые файлы и искать в них механизм обновления. Под подозрение попали каталоги /sbin и /usr/sbin — как содержащие наибольшее количество интересных файлов вроде xxxx-upgrade, xxxxManager.py.

Дождавшись окончания дампа каталогов, я стал искать строки с ошибками обновления — «Upgrade failed», «Error code» и все в таком духе. И файлик нашелся.

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

Если кратко, то структура прошивки выглядит так:

  1. Файл .tar с uImage и uImage.dtb.
  2. Файл .bz2 с rootfs.
  3. Структура с определенным заголовком, содержащая файлы 1 и 2. Все это зашифровано захардкоженным ключом 3DES.
  4. Файл лицензии, сформированный на основе MAC-адреса домофона, захардкоженного массива из 16 байт под названием license number и версии прошивки.
  5. Архив .tar.gz с файлами 3 и 4 — это и есть файл обновления.
Ниже показана часть функции, проверяющей файл обновления.

Для просмотра ссылки Войди или Зарегистрируйся
Сказать, что алгоритм обновления очень серьезный, — ничего не сказать. Со стороны без знаний о структуре прошивки, даже имея под рукой сами обновления, взломать такое нереально. Но, как говорится, есть нюанс.


Уязвимость​

Изучая механизм обновления, а именно то, как принимается загружаемый через веб‑интерфейс файл, я заметил, что:

  • первым делом распаковывается .gz через вызов gunzip, который убирает суффикс .gz, оставляя лишь .tar, после чего передает результат в вызов следующей команды;
  • вызывается команда tar -x -C /tmp/upgrade, которая принимает через stdin архив .tar, а на выходе — файл лицензии и зашифрованный файл с rootfs и uImage;
  • команда tar — не самостоятельный бинарник, а симлинк на BusyBox (практически стандарт для embedded-устройств).
Куда двигаться дальше? Я решил посмотреть исходник команды tar в самом BusyBox. Описание меня не только удивило, но и сильно подзадорило. Оно, по сути, раскрывает уязвимость и рассказывает, как ей пользоваться!

Суть ее вот в чем: до Для просмотра ссылки Войди или Зарегистрируйся команда tar из BusyBox при распаковке принимала символьную ссылку, ведущую за пределы рабочей директории, а затем следовала ей — что позволяло выполнить directory traversal (обход каталога) и перезаписать произвольные файлы.

Я решил попробовать.

Для просмотра ссылки Войди или Зарегистрируйся
Я сделал ровно так, как там и написано, только в качестве файла, который должен оказаться на устройстве, я подложил файл справки в PDF. Тестовая накатка обновления, и… я смог получить доступ к своей PDF через веб‑интерфейс.

Что ж, нужно расширять вектор, подумал я, самое время подложить свой /etc/shadow. Простые манипуляции с содержимым архива, и у нас есть доступ на устройство по SSH.

info​

На домофоне за SSH отвечает dropbear, а в его конфиге разрешена только авторизация по ключу, поэтому для получения SSH пришлось еще и патчить конфиг.
Что же это получается, если ко мне в подъезд попадет какой‑нибудь нехороший дядя, он сможет подключиться к домовой сети и закрепиться на всех местных домофонах? И да и нет.

По умолчанию для входа в веб‑интерфейс требуется ввод пароля, но это не очень серьезная преграда, когда пароль прописан во всех руководствах к устройству: 112233.

Зная пароль, можно обновить прошивку домофона и, например, через встроенный микрофон подслушивать, что происходит в квартире, — без ведома жильцов. А если к домофону подключены IP-камеры, можно будет получать и изображение с них.

В моем случае на домофоне был именно дефолтный пароль.


Митигация​

Есть и хорошие, и плохие новости:

  • Можно включать запись с микрофона, смотреть видео с подключенных IP-камер, если попасть в консоль домофона.
  • Для исправления уязвимости достаточно обновить BusyBox до последней версии и не использовать дефолтный пароль.
  • Производитель видеодомофонов больше не обслуживает клиентов из РФ, а выпустить обновление может только он.
  • Через веб‑интерфейс можно сбросить домофон до заводских настроек, что приведет к сбросу пароля до дефолтного.
  • Беспарольный SSH-доступ с чьим‑то публичным ключом, зашитым в устройство, предоставляет доступ неизвестно кому (вендору или управляющей компании).
Моя паранойя не позволила мне использовать это устройство дальше, а также рекомендовать его знакомым.


Запускаем на домофоне Doom II​

В угоду модным трендам я дополнительно решил окончательно ушатать домофон запустить Doom II на домофоне. Пришлось погружаться в тему сборки игры для не самых шустрых устройств, но главной проблемой стал сенсорный экран. Подключить клавиатуру‑то никак не получится. Нужно что‑то придумывать.

Хотелось сделать так, чтобы можно было играть, а не просто смотреть заставку. Поэтому пришлось изучать, как хранятся ресурсы игры, как вывести нужные картинки на экран, как обрабатывать нажатия и много чего еще. Самой крепкой занозой стал SDL2: все современные форки Doom используют SDL, а в дефолтной прошивке его не было. Ставить этот фреймворк с нуля — очень плохая затея (из которой у меня ничего не вышло).

Тем не менее процесс оказался крайне увлекательным. Я нашел форк под названием fbDoom, заставил его использовать ALSA Audio, ну и, конечно, реагировать на тапы по сенсорному экрану.
 
Activity
So far there's no one here
Сверху Снизу