Современные технологии открывают практически неограниченные возможности для наблюдения и контроля за домашними питомцами, особенно когда хозяина нет дома. Недавно я решил приобрести недорогую внутреннюю камеру Tapo от компании TP-Link, чтобы проследить за тем, как ведет себя моя собака в мое отсутствие. Однако этот простой замысел вскоре превратился в полноценное техническое расследование, где мне удалось раскрыть скрытые аспекты работы устройства, неудобства настройки и даже серьезные уязвимости в системе безопасности TP-Link. Первоначально процесс настройки камеры в связке с приложением Frigate оказался куда сложнее, чем ожидалось. Практически отсутствовала понятная документация, и даже среди опытных энтузиастов не было единого мнения о том, как именно взаимодействовать с камерами Tapo.
Моя главная цель была наладить двустороннюю аудиосвязь в Frigate, но стандартный rtsp:// протокол не поддерживал эту функцию. Оказалось, что для полноценной работы звука необходимо использовать специальный tapo:// протокол с пропуском через go2rtc, поскольку TP-Link реализовала двустороннюю аудиосвязь исключительно через собственный проприетарный API. Кроме технических барьеров меня начал раздражать навязчивый сервис Tapo Care, который постоянно продвигался через официальное мобильное приложение. Это заставило задуматься о существовании альтернативных, более закрытых от облака способов настройки камеры - возможно, совсем без необходимости соединения с серверами TP-Link. Для реализации подобного сценария требовалось понять протоколы связи между приложением и устройством, а также методы авторизации и шифрования данных.
Первым серьезным препятствием стала необходимость отслеживания сетевого трафика, чтобы понять, какие запросы и ответы происходят во время процесса первоначальной настройки камеры. Традиционные способы перехвата трафика, такие как использование proxy-сервера с добавлением собственного сертификата в хранилище доверия телефона, в последнее время все чаще оказываются неэффективными. Современные приложения все чаще обходят системные настройки прокси и игнорируют хранилище сертификатов, внедряя механизмы certificate pinning. Чтобы обойти эти методы защиты, я применил динамическую инструментализацию с помощью фреймворка Frida. Этот мощный инструмент позволяет вмешиваться в выполнение приложения на лету, подменяя его поведение и заставляя принимать нужные сертификаты, игнорируя при этом встроенную проверку сертификатов.
Как итог, удалось настроить сложную цепочку из камеры, ноутбука с mitmproxy, проксирующего трафик, и мобильного приложения с внедренными скриптами Frida, которые обеспечили доступ к зашифрованным запросам. В процессе анализа запросов обратило на себя внимание, что камера изначально использует стандартные учетные данные с логином admin и каким-то паролем, после чего приложение меняет пароль администратора на соответствующий облачному. Интересный момент заключался в том, что если пользователь изменяет пароль в облаке после первичной настройки, устройство оказывается не в курсе этих изменений. Это позволило предположить о наличии на устройстве "по умолчанию" пароля, который доступен сразу после установки и до синхронизации с облаком. Чтобы проверить гипотезу, мной был произведен разбор APK-файла официального приложения TP-Link с помощью инструмента JADX.
В процессе декомпиляции были обнаружены функции, возвращающие зашитый в код дефолтный пароль для начального этапа аутентификации. Пароль оказался фиксированным значением, которое начинается с префикса TPL07 и далее состоит из числовой последовательности. Наличие данного встроенного пароля подтверждало первоначальную догадку о возможности обхода облачной авторизации на этапе онбординга камеры. Далее, с помощью информации о механизме шифрования с использованием типа шифра encrypt_type: 3, стала возможна разработка скриптов для расшифровки передаваемых данных. Совместно с библиотекой PyTapo я смог реализовать скрипт на языке Python, который внедрялся в mitmproxy, позволяя в реальном времени расшифровывать и анализировать содержимое запросов и ответов, получаемых от камеры.
Анализ сетевого взаимодействия показал, что процесс настройки камеры состоит из ряда последовательных вызовов, включая сканирование доступных Wi-Fi сетей, присоединение к выбранной сети, изменение пароля администратора, активацию RTSP и ONVIF аккаунтов, а также другие операции, вроде установки часового пояса и режима записи. Однако, по факту, большинство операций оказывались второстепенными на фоне важных команд, связанных с обеспечением базовой функциональности камеры и ее подключения к сети. Завершилось исследование небольшим Bash-скриптом, который автоматизировал весь процесс - от логина с использованием дефолтного пароля, отправки команд на подключение к Wi-Fi, отключения надоедливого логотипа на видео, включения необходимых сервисов до смены пароля на защищенный вариант. Такой подход практически исключал необходимость использования фирменного облачного приложения и позволял владельцам сохранять контроль над своими устройствами без вмешательства TP-Link. В ходе этого долгого и порой утомительного "обхода" я сделал важные выводы о состоянии безопасности и качестве реализации прошивки TP-Link в недорогих камерах.
В то время как некоторые API использовали современные алгоритмы хеширования типа SHA-256, другие, что было неожиданным и печальным, по-прежнему опирались на устаревший MD5. Разработчики явно попытались внедрить криптографические меры, но получилась не слишком надежная система, напоминающая работу любителей-шифровальщиков с дивана. Для передач паролей применялось два публичных ключа - один открытый клиенту и второй, "секретный", глубоко интегрированный в приложение. Выбор между ними зачастую был случайным и непредсказуемым. Такой хаос усложнял разработку более безопасных решений и усиливал опасения насчет уязвимости устройств на практике.
И, несмотря на всевозможные сложности и обнаруженные проблемы, я наконец-то узнал, чем же занимается моя собака, когда меня нет рядом. Оказалось, что она просто спит, отдыхает на диване и порой уютно устраивается в своей кровати. Удивительно, как иногда из простого желания присмотреть за питомцем может родиться целое приключение в мире безопасности IoT-устройств. Таким образом, мой опыт с камерой Tapo от TP-Link показывает, насколько важно владеть не только конечным устройством, но и глубоко погружаться в его внутренние механизмы. Особенно если хочется избежать навязываемых компанией облачных сервисов и сохранить за собой право на контроль и конфиденциальность данных.
В конечном счете это не только помогает лучше понять продукт, но и способствует развитию сообщества, стремящегося делать мир интернета вещей более открытым и безопасным. .