HimeraSearchDB
Carding_EbayThief
triada
CrackerTuch
JustinSun

НОВОСТИ [Из песочницы] Сим-сим откройся или реверс инжиниринг умного домофона

BDFpromo
Оффлайн

BDFpromo

.
.
Регистрация
23.09.18
Сообщения
12.347
Реакции
176
Репутация
0
После прочтения возникла мысль разобраться с mitmproxy и посмотреть как устроен бэкенд ежедневно используемых мобильных приложений. Выбор пал на приложение домофон. После авторизации оно позволяет открывать двери и отвечать на видеозвонки. Что из этого вышло и какие дырки мне удалось найти расскажу под катом.

cdrchuiued3otgzhrka3gqtgdqa.jpeg



Настройка прокси


Для анализа трафика часто применяется подход называемый человек посередине (man in the middle). Он состоит в том, что при подключении к локальной сети трафик с анализируемого устройства сначала идет на компьютер, на котором он расшифровывается и анализируется, а затем зашифровывается обратно и отправляется на сервер. Для расшифровки трафика наиболее популярной является программа mitmproxy. Установка mitmproxy не составила больших проблем.

Для просмотра трафика с мобильного устройства нужно подключиться к домашнему wifi с телефона и компьютера. На комп установить mitmproxy и запустить. На телефоне в настройках wifi установить локальный адрес и порт компа как прокси сервер. Далее зайти с телефона на mitm.it и установить сертификат дающий возможность расшифровки https запросов. После этих шагов запросы из браузера стали видны. Ура! Однако следующим шагом меня ждало разочарование:

jsot7e1q5qkrqftcgvxvwy2h1mq.jpeg


Поиск в гугле привел к открытому issue на . Оказалось, что, начиная с API Level 24, приложения больше не доверяют пользовательским сертификатам. К счастью это можно обойти если разархивировать apk и добавить в AndroidManifest.xml следующий конфиг:













Более того, на гитхабе есть готовый который делает это автоматом. Итак, скачиваем apk, патчим скриптом, ставим командой adb install и вуаля все работает.

Анализ трафика


Видим, что запросы выполняются на адреса вида:


https://{intercom-company-url}/api/


В заголовке передаются два параметра:

'api-version': '2',
'authorization': 'Bearer your.jwt.token’


Первый параметр — это версия api, а второй — токен авторизации. Для авторизации используется json web token состоящий из трех частей: заголовок, полезная нагрузка (payload) и подпись.
Декодировав его с помощью команды:


pyjwt decode --no-verify your.jwt.token


увидим, что в payload содержатся account_id и exp. Поле exp соответствует времени создания токена, что позволяет генерить токены для разных девайсов с одного аккаунта.

Наиболее интересными для нас являются запросы на получение списка доступных домофонов и открытие дверей. При отправке запроса (я использовал python и библиотеку requests) к


https://{intercom-company-url}/api/customers/properties/{account_id}/intercoms


Получаем json содержащий список домофонов c полями:


[
{
'id': ID,
'mode': MODE,
'sip_account': {'ex_user': USER_ID, 'proxy': PROXY, 'password': PSWD},
'video': [{'quality': 'low', 'source': 'rtsp://LINK }]
}
]


В json id — идентификатор домофона, mode — какую дверь можно открыть (возможные значения one_door, left_door, right_door), sip аккаунт и ссылка на видео трансляцию. Ого!

С помощью протокола установления сеанса (session initiation protocol, sip) осуществляются видео звонки через домофон. В поле sip_account нам пришли id'шники и пароли домофонов к которым есть доступ у нашего аккаунта. Позвонить на них всё же не получится так как они находятся во внутренней сети. А вот поле видео — это интересно. В нем содержится внешняя ссылка на трансляцию видео с камеры. Достаточно открыть vlc, скопировать ссылку и можно круглосуточно смотреть в камеру домофона. Не хорошо такими ссылками разбрасываться!

Далее разберёмся как открыть дверь. При нажатии на кнопку открытия дверей приложение посылает get-запрос:


https://{intercom-company-url}/api/customers/intercoms/{intercom_id}/unlock?door=left_door&id={intercom_id}


Оказалось, что наличие или отсутствие параметра id ни на что не влияет, а вот door позволяет в случае домофона с двумя дверьми открывать не только свою, но и соседнюю дверь по выбору.

Сим-сим откройся!


Разобравшись с api, я решил сделать что-то полезное. В результате получилось приложение под Андроид, которое распознает голосовые команды, и при распознавании заранее заданных команд вроде «сим-сим откройся» отправляет запрос на открытие соответствующей двери.

Выводы


Умный домофон — это хорошо, но безопасный и умный домофон ещё лучше.
 
Сверху Снизу