HimeraSearchDB
Carding_EbayThief
triada
CrackerTuch
JustinSun

НОВОСТИ «Социальный мониторинг». Счёт 1:0 в нашу пользу

BDFpromo
Оффлайн

BDFpromo

.
.
Регистрация
23.09.18
Сообщения
12.347
Реакции
176
Репутация
0
Введение


Приложение вышло → увидели тихий ужас → начали писать отрицательные отзывы → разобрали по полочкам → приложение удалили (отправили на доработку).

Всем привет, в данной статье, когда всё миновало, я хочу рассказать Вам о двух ключевых стадиях из перечисленных выше.

Что за приложение можно почитать .
А про оправдания и отправку на доработку .

Под катом мы посмотрим с Вами что же такого увидели в самом начале разбора приложения и пробежимся полностью по интересным моментам из кода. Насладимся дырявостью приложения и ни в какую не будем принимать “посмотрите за какие мы сроки это сделали”.

Предыстория


Для меня началось всё в Telegram канале “ ”. Далеко не сразу увидел пост с ссылкой на приложение в Play Market’e и apk’шку ниже. Только спустя минут 30, от количества постов в этом канале, я решил почитать. На тот момент ребята уже декомпилировали приложение и активно смотрели куда отправляются данные. Выдернули некоторые эндпоинты, хосты, токен, начали постить скриншоты кусков кода. Приложив apk’шку попросили кого-нибудь опубликовать декомплированный код на GitHub — спустя полтора часа . Тут подключился я…

Основная часть


Бэк


В самом начале хочется сказать, что внутри приложения был токен для работы с API сервиса распознавания лиц Identix.one. Данные ребята работают так, что сначала им нужно загрузить базу пользователей с фотографиями и данными, а только потом можно отправлять фотографии на распознавание.

Токен был в приложении, работа с API этого сервиса через клиента, а не свой бэк. Таким образом любой пользователь, выдрав токен, мог начать загружать любые фотографии граждан РФ и получать о них информацию. Звучит прекрасно.

Посмотрев тарифы этого сервиса я понял, что это вообще для камер видеонаблюдения. За каждую камеру надо заплатить неплохую сумму и был удивлен, сколько же пришлось заплатить за это разработчикам приложения.

Зайдя в раздел документации по API мне показалось интересным получение загруженной базы пользователей и другие вещи. Поэтому я решил выполнить запрос и проверить токен. К счастью, или сожалению, токен был инвалидирован, о чем я сразу же сообщил владельцу канала “ ” через Twitter.

Начал я своё изучение с бэка, так как планировал найти что-нибудь интересное там (sql inj, например). У нас уже были хосты и ссылка для входа в админку. В админку и пошёл. Посмотрев на запросы сразу стало ясно, что это какой-то Atmosphere Framework. Увидев дикую жопу в запросах, как он помечает какая кнопка была нажата, какой флаг в форме поставлен, я приуныл. Не хотел копаться в этом и максимум что сделал — вбил в гугл “Atmosphere Framework CVE”. Бегло посмотрев заголовки ничего интересного не увидел кроме XSS и пошёл дальше. А дальше я пошёл на другие известные нам эндпоинты.

Такими эндпоинтами оказались ручки для начала и окончания вашей работы. Которая бы характеризовала диапазон времени, проведенный на работе. Тут уже не обошлось без кода. Я открыл проект, погрепал до нужного места и начал изучать параметры. Среди них оказались deviceEUI, idxid, latitude и longitude. Если с последними двумя понятно сразу, то с первыми — нет. Потратив N количество минут для успешного выполнения запроса, так и остановился на Access denied.

Потом, для понимания объекта исследования, я решил скачать приложение себе. Скачать скачал, а вот авторизоваться уже не удалось… Бэк к тому времени они положили (но я об этом ещё не знал).

Открыв код проекта не на GitHub’e, а полноценно в идеи я начал искать новые эндпоинты. Нашел! Название соответствующее: /api/covid/Device

Начал инвестигировать уже в эти ручки. Я долго не понимал как же проходит авторизация, где там заголовок с токеном или ещё чего. А потом до меня дошло… Её нет! Удостоверившись в этом, разобрав обработку и формирование запросов сделал своё заключение по бэкенд части и отправил опять в Twitter.

Заключение по бэкенд части: регистрация проходит отправкой информации о вашем девайсе (телефоне). Туда входит адрес, номер телефона, ФИО и т.д. Сразу после регистрации с вас требуют фотку и загружают уже её к “вам в профиль”. На самом деле для того, чтобы указать чья эта фотка, указывается доп параметр в запросе — IMEI. Он находится в поле deviceId модели Device, которую мы отправили при первом шаге регистрации. Нет никакой валидации того, что IMEI принадлежит Вам. Стоит отправить чужой — и вы успешно выполните запрос, якобы с другого устройства. Примечательным является то, что среди эндпоинтов присутствует /api/covid/Device/password, однако обработка ответа выглядит следующим образом:

dqqscgy7exqg_rhfeddo7b2sbrc.png


После регистрации устройства API возвращает authCode, но, к сожалению, данный код сохраняется в поле объекта и лежит там, пылится. Не участвует в формировании других запросов.

Таким образом, не имея аутентификации, любой пользователь, зная IMEI человека (или подобрав/перебрав его) мог отправить ложную геопозицию, загрузить фотографию, отправить статус о начале рабочего дня и прочее.

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

С этого времени я начал полностью упарываться в код и описывать то, что вижу, в своём Telegram канале. Получился бред полнейший без какой-либо связи между абзацами, однако после этого поста у меня нашлись силы (уже было 2-3 ночи) переписать его и сделать читаемым.

Разбор приложения


Здесь сразу стоит отметить, что приложение к этому времени уже не работало. Поэтому я не имел представления о том, что оно может наглядно. Изучал всё вслепую и по коду, который был далеко не весь! Все мы знаем что такое декомпиляция, но того, что было, хватило сделать определённые выводы.

Приложение хранит информацию о вашем устройстве, ФИО, номере телефона, адресе. Существуют непонятные поля, например comments. А есть интересные — врач.

Для распознания лиц используется сервис identix (тот самый параметр из части с бэком). Он позволяет по загруженной фотографии вернуть возраст, пол человека и другую информацию. Там же находится уникальный идентификатор человека, который используется внутри приложения.

Для навигации используются два типа устройств: блютуз, вайфай. У обоих есть название и RSSI (качество сигнала, говорящее о расстоянии до точки).

Вашу геопозицию получают благодаря Google и GPS модулю.

Среди различных типов хранимой информации присутствует локация. Удивительно, но в ней огромное количество полей. В том числе уровень заряда батареи, количество шагов (несмотря на отдельную модель для этого) и прочее.

В настройках можно задавать интервал телеметрии. Как сбора, так и отправки. Не уверен насчет возможность изменять данные параметры.

Уникальный идентификатор бывает трёх разных типов:

  • IMEI устройства.
  • ID устройства (не изучал).
  • MAC адрес WiFi.

Таким образом, то, что я вверху писал про передачу и подбор IMEI является упрощением, для понимания. На самом деле это один из трёх идентификаторов.

Ваш ID зависит от того, какой версии у вас стоит SDK. Проще говоря, есть ли возможность получить тот, или иной тип уникального идентификатора. Разработчики приложения сами путаются в них и не могут сойтись в одном названии.

Единственное место, где вставлю код в статье.


if (Build.VERSION.SDK_INT >= 29) {
return getMac(context);
}
return getImei(context);


А внутри получения getImei вот такой иф:


if (Build.VERSION.SDK_INT >= 26) {
str = telephonyManager.getImei();
} else {
str = telephonyManager.getDeviceId();
}


Приложение также может получить номер сим-карты, но только тоже в хитрых кейсах. Есть возможность — возьмёт.

QR код генерируется с текстом ID, который может быть трёх типов. Эту тему, как и с сервисом распознавания лиц, обмусолили кому не лень. .

Интересной возможность приложения являются пуш уведомления вам на устройства. Разработчики удаленно могут послать команды и они будут выполнены у вас. Одна из команд называется OPEN_CAMERA. Другая — SERVER_ADDRESS_KEY — тут, вероятнее всего, по аналогии с Telegram. Когда его блокировали, он рассылал всем пользователям новые IP адреса и мы продолжали использовать мессенджер. Помимо этого нам удаленно могут задать интервал отправки и сбора телеметрии. .

Можно конечно ещё рассказать про аватарку, как её можно вращать, как они её локально сохраняют, как они её нормализуют. Можно рассказать про желание сделать автообновление приложения, но что-то не успели, про возможность переходить в звонилку по номеру, ведение списка контактов (самая примитивная записная книжка имя — номер), про то, что на минималках взаимодействуют с количеством активных файвай точек вокруг, но это всё скуууучнооо.

Заключение


Знаете, я не буду говорить какие они плохие, я не буду говорить какие они молодцы. Каждый сделает вывод для себя сам. Критические недоработки, уязвимости и шпионские штучки я Вам изложил. Лишь могу сказать, что, несмотря на поставленные сроки, ни в коем случае нельзя допускать разработку заведомо уязвимого приложения.

Не могу не отметить сплочённость народа. Все начали делиться своими находками, проявлять активность, а кто не мог в это — ставили 1 в отзывах. 4207 единиц было мной зафиксировано максимально и отсутствие (на взгляд) других оценок.

То самое бредовое сообщение с набросками и оригинал заключения по бэку есть в моём Telegram канале, а он есть среди ссылок в профиле.

Последнее, что хочу Вам показать, дык это функция “нелегального” получения MAC адреса из их кода и такая же на stackoverflow (спасибо ntoskrnl):

там ещё пытаются воспользоваться особенностью Android для получения mac-адреса обходным путём. Не через пермишен ACCESS_WIFI_STATE, а через базовый INTERNET
Но! Найдите 10 отличий между их кодом и ответом со stackoverflow)
Немножко шумит декомпилированный котлин, но суть понятна

— NTen (@nteuxinus)

И как всегда, спасибо, что дочитали аж до сюда!

P.S. Любой человек может допустить ошибку и я не исключение. Возможно, что-то не так увидел, возможно не совсем понял реализацию. Сейчас придут и скажут, что при регистрации запоминается IP и выполнять запросы другому человеку нельзя, а?! А я отвечу, что бред и тогда сам владелец при переподключении к мобильной сети потеряет доступ… В общем Вы поняли, комментарии открыты!
 
Сверху Снизу