Анализ приложения «Социальной мониторинг»

Анализ Социальной мониторинг

С появлением приложения «Социальный мониторинг» стало появлятся много статьей и публикаций, в которых люди далекиe от программирования делали громкие выводы, что приложение следит за пользователями и называли приложение «цифровой ошейник». Я решил проанализировать «Социальный мониторинг» и рассказать вам о том, что представляет код приложения и какую информацию посылает на сервера.

Еще по теме: Инструменты для анализа приложений Android

Анализ трафика приложения  «Социальной мониторинг»

Первым делом я решил проверить трафик с помощью инструмента 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 и прочее вроде не просят. Будем смотреть дальше.

Дальше видим, что приложение весьма обфусцировано. Конечно, это осложняет анализ, но попробуем.

Обычно при анализе всякой обфусцированной вирусни я поступаю так: сначала переименовываю все объявленные переменные в соответствии с их типом, то есть вместо a, b, c, d пишу intIn, intOut, int1, str1 и так далее. Затем заново смотрю на код, уже становится видно, что некоторые переменные можно переименовать в counter, i, k, resString. Ну и третьим проходом после беглого анализа алгоритма переименовываю во всякие там name, password, hashMD5 и так далее.

То же самое и с классами. Сначала переименовываю созвучно тому, от чего класс наследуется, например activity1 или serviceHZ, а дальше уже, изучив содержимое, даю осмысленное имя. Да, это кропотливый труд, но я не знаю, как по-другому эффективно бороться с обфускацией. В данном случае объем кода не позволяет выполнить такие переименования за разумное время, да и нет в этом особой необходимости.

Прежде чем погружаться в дебри кода, окинем взглядом используемые приложением нативные библиотеки, а именно:

  • libconscrypt_jni.so — гугловская библиотека Conscrypt, поставщик безопасности Java (JSP), который реализует расширения криптографии Java (JCE) и расширения безопасных сокетов Java (JSSE). Он использует BoringSSL для предоставления криптографических примитивов и безопасности транспортного уровня (TLS) для приложений Java на Android и OpenJDK;
  • libface_detector_v2_jni.so — опенсорсная библиотека libfacedetection для распознавания лиц на фото;
  • libtool_checker_jni.so — библиотека из состава опенсорсного пакета rootbeer, предназначенного для проверки наличия прав root на устройстве. Чуть подробнее расскажу о ней дальше.

Беглый анализ показал, что, помимо обфусцированного кода и почти стандартных OkHttp 3, Retrofit 2 и Crashlytics, приложение использует компоненты com.redmadrobot.inputmask.helper и com.scottyab.rootbeer.

Первый компонент особого интереса не представляет, он используется для проверки ввода телефонного номера при регистрации приложения. Последний компонент проверяет «рутованность» используемого устройства: ищет определенные приложения, бинарный файл su или компоненты BusyBox.

Все, дальше вроде тянуть уже некуда, надо смотреть код. Я не буду утомлять читателя скрупулезным и занудным описанием алгоритма, тем более что из-за обфускации кода пришлось бы часто использовать слова «вероятно», «похоже» и «судя по всему», и просто расскажу своими словами.

При запуске приложение достает из настроек адрес сервера для отправки данных, интервал для отправки координат и интервал для сбора и отправки телеметрии (отметим, что эти значения можно изменить по команде с сервера). Затем проверяет наличие необходимых для работы разрешений и, если нужно, запрашивает их, а также выводит запрос на добавление в «белый список» энергосбережения, чтобы ОС не мешала работать в фоновом режиме.

Также проверяется (с помощью акселерометра), держит ли пользователь устройство в руках.

В приложении «Социальной мониторинг» есть три основных сервиса:

  • LocationService — периодически собирает координаты;
  • MessagingService — отслеживает сообщения с сервера, в сообщениях могут быть новые настройки или запрос на фото пользователя;
  • PeriodicJobService — собирает и отправляет телеметрию.

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

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

Посмотрим подробнее, какие именно данные приложение отправляет на сервер.

Социальной мониторинг слежка

Класс Location, как оказалось, содержит не только координаты (а именно долготу, широту, высоту, скорость, точность, азимут), но и кучу интересной информации: версию ОС, уровень заряда батареи, заряжается ли устройство в настоящий момент, дата и время, номер телефона, модель телефона, дату и время установки программы, название провайдера, находится ли телефон в руках в момент сбора данных, количество пройденных шагов.

Геолокация в телефоне сама по себе — это крайне ненадежный способ отслеживания. Если переключить телефон в режим разработчика, то в появившихся настройках будет пункт «Выбрать приложение для фиктивных местоположений». Есть масса бесплатных приложений, которые при запросе будут выдавать ложные координаты, и ОС передаст их приложениям вместо реальных.

Помимо этого, приложение «Социальной мониторинг» собирает информацию об окружающих телефон сетях Wi-Fi и подключенных по Bluetooth устройствах.

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

За неделю использования приложение отправило 8,54 Мбайт трафика, из них в активном режиме 6,34 Мбайт, в фоновом 2,2 Мбайт.

Заключение

Честно говоря, по итогам исследования я несколько разочарован. Была надежда найти в приложении «Социальной мониторинг» какие-нибудь шокирующие факты и грубые попирания приватности, но вынужден признать, что в целом функции соответствуют заявленным.

Конечно, отправляется не только геолокация и фото, но и много других данных сверх описанных (шагомер, Bluetooth, Wi-Fi и прочее), но это явно сбор косвенных улик, а не что-то постороннее. Впрочем, было бы неплохо уведомлять пользователя о собираемых данных и не умалчивать эти подробности.

На этом все. Будьте здоровы!

Еще по теме: Дистрибутивы для криминалистического анализа

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *