Категория > Новости > Потрошим «Социальный мониторинг». Что внутри у приложения для изоляции на дому - «Новости»
Потрошим «Социальный мониторинг». Что внутри у приложения для изоляции на дому - «Новости»28-05-2020, 16:00. Автор: Haig |
|
Приложение «Социальный мониторинг», которое позволяет следить за тем, чтобы заразившиеся коронавирусом оставались дома, уже успело собрать массу негативных отзывов. Оно, мол, и глюкавое, и вообще «цифровой ошейник». Однако именно технической информации о нем (и, в частности, о его последней версии) немного. Чтобы восполнить этот пробел, я предпринял собственное исследование. Итак, последняя версия приложения — 1.4.1. Разработчик приложения — Департамент информационных технологий города Москвы. Существуют версии для Android и iOS. По данным из Google Play, на текущий момент приложение установлено более чем у 50 тысяч пользователей. Обещано, что если телефон пользователя не поддерживает его, то в теории ему должен быть предоставлен аппарат с уже установленным приложением. На практике, конечно, такое случается далеко не всегда и не сразу. На сайте мэра Москвы заявлено, что «приложение при авторизации просит подтвердить номер телефона и сделать фотографию лица, а в дальнейшем фиксирует геолокацию и запрашивает фотографию посредством пуш-уведомления». С виду это действительно так, а если проигнорировать запрос на фото или выйти за пределы квартиры, будет автоматически выписан штраф. Если отказаться от установки, то принудительно поместят в обсерватор или больницу. Если удалить приложение после установки и регистрации, то будут присылать штрафы. Конечно, ставить что-либо на свой телефон по чьему-то требованию мне не хотелось, но раз уж я был к этому принужден весьма незамысловатым способом, то надо хотя бы проверить, действительно ли приложение выполняет только заявленные функции, или там есть что-то еще. Итак, поехали. Сразу скажу — я не гуру реверса, так что мог чего-то не заметить. Если обнаружишь что-то новое, обязательно поделись находкой в комментариях. Смотрим трафикПервым делом я решил проверить трафик с помощью приложения Fiddler, однако тут меня ждало разочарование. «Социальный мониторинг» устанавливает шифрованное соединение (HTTPS) с сервером mos.ru, а что там происходит дальше — так просто не понять, нужно или рутовать телефон, или пересобирать приложение. Но на рутованном аппарате приложение не работает, а пересобирать его я не рискнул, слишком высока цена ошибки — 4000 рублей за каждый пропущенный запрос на фотографию. А вдруг этот запрос придет как раз в тот момент, когда я буду с трафиком разбираться... С помощью Fiddler и logcat удалось выяснить только то, что приложение раз в пять минут что-то отправляет на mos.ru. Что ж, придется декомпилировать и ковыряться в коде. Декомпилируем приложениеДля декомпиляции я использовал программу JEB версии 3.17.1 производства PNF Software. На мой взгляд, это одно из лучших приложений для исследования APK, единственный его недостаток — высокая стоимость. Приложение подписано сертификатом, сгенерированным 17 апреля 2020 года, и почему-то указан город Самара. Интересно, при чем тут Самара? ![]() Первым делом смотрим, что в манифесте. ![]() Версия программы — 1.4.1, имя пакета — ru.mos.socmon. Приложение запрашивает следующие разрешения: доступ к координатам, в том числе и фоновый, доступ к камере, к интернету, состоянию сети, состоянию и изменению Wi-Fi, возможность запускать неубиваемые сервисы и добавление в список исключений оптимизации батареи (чтобы ОС не заставляла приложение экономить энергию), а также чтение и запись данных на карте памяти. Ну что же, уже неплохо — намеков на недекларированные функции пока не видно. Контакты, журнал звонков, SMS и прочее вроде не просят. Будем смотреть дальше. Дальше видим, что приложение весьма обфусцировано. Конечно, это осложняет анализ, но попробуем. Обычно при анализе всякой обфусцированной вирусни я поступаю так: сначала переименовываю все объявленные переменные в соответствии с их типом, то есть вместо РўРѕ Р¶Рµ самое Рё СЃ классами. Сначала переименовываю созвучно тому, РѕС‚ чего класс наследуется, например Прежде чем погружаться РІ дебри РєРѕРґР°, окинем взглядом используемые приложением нативные библиотеки, Р° именно:
Беглый анализ показал, что, РїРѕРјРёРјРѕ обфусцированного РєРѕРґР° Рё почти стандартных OkHttp 3, Retrofit 2 Рё Crashlytics, приложение использует компоненты com.redmadrobot.inputmask.helper Рё com.scottyab.rootbeer. Первый компонент РѕСЃРѕР±РѕРіРѕ интереса РЅРµ представляет, РѕРЅ используется для проверки РІРІРѕРґР° телефонного номера РїСЂРё регистрации приложения. Последний компонент проверяет «рутованность» используемого устройства: ищет определенные приложения, бинарный файл su или компоненты BusyBox. Р’СЃРµ, дальше РІСЂРѕРґРµ тянуть СѓР¶Рµ некуда, надо смотреть РєРѕРґ. РЇ РЅРµ Р±СѓРґСѓ утомлять читателя скрупулезным Рё занудным описанием алгоритма, тем более что РёР·-Р·Р° обфускации РєРѕРґР° пришлось Р±С‹ часто использовать слова «вероятно», «похоже» Рё «судя РїРѕ всему», Рё просто расскажу СЃРІРѕРёРјРё словами. РџСЂРё запуске приложение достает РёР· настроек адрес сервера для отправки данных, интервал для отправки координат Рё интервал для СЃР±РѕСЂР° Рё отправки телеметрии (отметим, что эти значения РјРѕР¶РЅРѕ изменить РїРѕ команде СЃ сервера). Затем проверяет наличие необходимых для работы разрешений Рё, если РЅСѓР¶РЅРѕ, запрашивает РёС…, Р° также выводит запрос РЅР° добавление РІ «белый СЃРїРёСЃРѕРєВ» энергосбережения, чтобы РћРЎ РЅРµ мешала работать РІ фоновом режиме. Также проверяется (с помощью акселерометра), держит ли пользователь устройство в руках. В приложении есть три основных сервиса:
Приложение периодически (в моем случае раз в пять минут, но это значение может быть изменено сервером) получает координаты и телеметрию, отправляет их на сервер, а также ждет запроса на фото. Если запрос на фото пришел, то выводится уведомление и подается звуковой сигнал. Кстати, когда пользователь делает фотографию, устройство автоматически ищет лицо в области предпросмотра (см. выше про libface_detector). Пока лицо не будет найдено, фотографию отправить не получится. В интернете попадалась информация, что у пользователя есть один час с прихода уведомления, чтобы сделать фото. В коде я никаких подтверждений этому не нашел. Если отсчет времени ведется, то это, надо думать, происходит на сервере. Посмотрим подробнее, какие именно данные приложение отправляет на сервер. Перейти обратно к новости |