MAX: мессенджер или инструмент для слежки? | Credit: Rigolit
Наши коллеги из Rigolit подготовили интересный анализ мессенджера MAX. Статья раскрывает сбор персональных данных (возраст, пол, контакты, email, телефон), системные разрешения на Android (доступ к камере, микрофону, геолокации).
Введение
Мы решили провести исследование и выяснить как MAX приобрел функцию общения в мессенджере и кросс-платформенность под инициативой РКН.
Начнем по порядку. Как разработчики позиционируют MAX:
Быстрый и лёгкий мессенджер для общения. Заявлены функции высокого качества звонков, анимированные стикеры, отправка файлов до 4 ГБ, а также наличие чат-ботов и мини-приложений. Распространяется на различных платформах: Android (через Google Play, RuStore, AppGallery), iOS (через App Store) и десктопные версии.
Разбор
Теперь начнем погружаться глубже, приступим к разбору версии на смартфон.
Приступим к обзору собираемых данных внутри мессенджера, разберем основные модули который отвечают за сбор данных о юзере.
com.my.tracker
(судя по MyTracker.java
, MyTrackerConfig.java
, MyTrackerParams.java
) - отвечает за обширный сбор пользовательских данных и событий.
Основные категории собираемых данных
- Рекламные события (
trackAdEvent
): Информация о взаимодействии с рекламой. - События покупок (
trackAppGalleryPurchaseEvent
,trackPurchaseEvent
): Детали о приобретениях, включая ID продукта, цены, валюты, и дополнительные параметры. - Общие пользовательские события (
trackEvent
): Универсальный сбор произвольных событий с настраиваемыми параметрами (например, название события, категория, значение). - События приглашений (
trackInviteEvent
): Отслеживание приглашений пользователей. - Запуски приложений (
trackLaunchManually
): Фиксация каждого ручного запуска приложения. - События уровней (
trackLevelEvent
): Прогресс пользователя по уровням. - События входа (
trackLoginEvent
): Информация о входах пользователя, включая ID и метод входа. - События мини-приложений (
trackMiniAppEvent
): Активность пользователя в мини-приложениях. - События регистрации (
trackRegistrationEvent
): Детали о процессе регистрации пользователя. - Время, проведенное в приложении/на событии (
incrementEventTimeSpent
,startAnytimeTimeSpent
,stopAnytimeTimeSpent
,startForegroundTimeSpent
,stopForegroundTimeSpent
): Детальная статистика использования приложения.
Персональные данные пользователя:
- Возраст (
getAge
,setAge
). - Пол (
getGender
,setGender
). - Пользовательские ID (
getCustomUserId
/getCustomUserIds
,setCustomUserId
/setCustomUserIds
). - Адреса электронной почты (
getEmail
/getEmails
,setEmail
/setEmails
). - ID из мессенджеров и соцсетей: ICQ ID (
getIcqId
), OK.ru ID (getOkId
), VK Connect ID (getVkConnectId
), VK ID (getVkId
). - Номера телефонов (
getPhone
/getPhones
,setPhone
/setPhones
). - Язык интерфейса (
getLang
,setLang
). - Специальные ID, связанные с MRGS (
getMrgsAppId
,getMrgsId
,getMrgsUserId
). - Произвольные кастомные параметры (
getCustomParam
,setCustomParam
): Позволяют разработчикам собирать любую дополнительную информацию.
- Диплинки (
getDeeplink
изMyTrackerAttribution
): Источники перехода пользователя в приложение (например, из рекламных кампаний или внешних ссылок).
Глубокий анализ
Данные системы и действия с ней (AndroidManifest.xml
):
Файл AndroidManifest.xml
описывает запрошенные разрешения и компоненты, которые позволяют приложению взаимодействовать с операционной системой и собирать системные данные.
Основные запрашиваемые разрешения:
android.permission.INTERNET
: Полный доступ к сетиandroid.permission.ACCESS_WIFI_STATE
,android.permission.ACCESS_NETWORK_STATE
,android.permission.CHANGE_NETWORK_STATE
,android.permission.CHANGE_WIFI_STATE
: Доступ к состоянию Wi-Fi и сотовой сети, возможность изменять их состояние.android.permission.ACCESS_FINE_LOCATION
,android.permission.ACCESS_COARSE_LOCATION
: Получение точного и приблизительного местоположения пользователя (GPS, Wi-Fi, сотовые сети).
android.permission.READ_CONTACTS
, android.permission.WRITE_CONTACTS
: Чтение и изменение списка контактов.
Чтение и изменение списка контактов:
android.permission.GET_ACCOUNTS
,android.permission.AUTHENTICATE_ACCOUNTS
,android.permission.MANAGE_ACCOUNTS
,android.permission.USE_CREDENTIALS
: Доступ к учетным записям на устройстве, управление ими и использование учетных данных.android.permission.READ_PHONE_NUMBERS
: Чтение телефонных номеров с устройства.android.permission.READ_EXTERNAL_STORAGE
,android.permission.WRITE_EXTERNAL_STORAGE
(до SDK 28/32): Чтение и запись файлов.android.permission.READ_MEDIA_IMAGES
,android.permission.READ_MEDIA_VIDEO
,android.permission.READ_MEDIA_VISUAL_USER_SELECTED
: Доступ к изображениям и видео.
Доступ к аппаратным возможностям:
android.permission.CAMERA
: Доступ к камере.android.permission.RECORD_AUDIO
: Доступ к микрофону для записи звука.android.permission.BLUETOOTH
,android.permission.BLUETOOTH_ADMIN
,android.permission.BLUETOOTH_CONNECT
: Полный контроль над Bluetooth-соединениями.- a
ndroid.permission.USE_BIOMETRIC
,android.permission.USE_FINGERPRINT
: Использование биометрических данных (отпечатков пальцев).
Управление системой и уведомлениями:
android.permission.POST_NOTIFICATIONS
: Отправка уведомлений.android.permission.SYSTEM_ALERT_WINDOW
: Отображение контента поверх других окон.android.permission.RECEIVE_BOOT_COMPLETED
: Автозапуск при включении устройства.android.permission.WAKE_LOCK
: Предотвращение перехода устройства в спящий режим.android.permission.DISABLE_KEYGUARD
: Отключение блокировки экрана.android.permission.MODIFY_AUDIO_SETTINGS
: Изменение настроек звука.android.permission.REQUEST_INSTALL_PACKAGES
: Запрос на установку других приложений.android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
: Загрузка файлов без уведомлений.- Разрешения для работы со значками уведомлений на различных лаунчерах (Samsung, Sony, Huawei, Oppo, HTC и другие).
Интеграция с сервисами Google:
com.google.android.gms.permission.AD_ID
: Доступ к рекламному идентификатору Google.com.android.vending.BILLING
: Работа с платежной системой Google Play.com.google.android.c2dm.permission.RECEIVE
: Получение push-уведомлений.com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE
: Получение данных о реферере установки.
Основные компоненты и их функции:
MainActivity
: Основной экран, может принимать интенты для обмена данными (android.intent.action.SEND
).LinkInterceptorActivity
: Перехватывает HTTP/HTTPS и кастомные схемы (max) для обработки диплинков, потенциально контролируя веб-трафик.CallNotifierFixActivity
: Отображает информацию о звонках на экране блокировки.
ContactsSyncService
: Служба синхронизации контактов.NotificationTamService
, FcmMessagingService, FirebaseMessagingService: Службы для обработки push-уведомлений.OneMeMediaSessionService
,OneMeDownloadService
,MediaProjectionService
: Службы для работы с медиа-контентом, загрузками и захватом экрана.UploadService
: Служба для загрузки аналитических данных.CallServiceImpl
: Служба, связанная с функциями звонков.androidx.work.impl.foreground.SystemForegroundService
: Использует службы переднего плана для microphone|camera|location|mediaPlayback|dataSync, что означает, что эти функции могут работать в фоне с уведомлением.
BootCompletedReceiver
: Запускает приложение при загрузке системы.TimeChangeReceiver
: Реагирует на изменение системного времени.CallsMediaButtonReceiver
: Обрабатывает нажатия на медиа-кнопки (например, на гарнитуре).
Приложение может использовать: сенсорный экран, функции телефонии, геолокацию (GPS и сетевую), акселерометр, камеру (с автофокусом), датчики света, компаса, гироскопа, барометра, приближения, а также Bluetooth, лоадер сторонних файлов, имеет полный доступ к файлам и логирует весь трафик.
Более подробный отчет: https://mega.nz/file/zJYnAZ7S#6rlkFPSFcp7Nz4B5cDkTvscwj0N8iuUvgD0nyTysjhM
Рассмотрение MAX-мессенджера на Windows
Установщик у MAX расширения .msi, что нестандартно для приложений такого типа. Более подробно о .msi можно почитать здесь
Переходим ко вскрытию этого установщика в нашей виртуальной среде, чтобы проследить всю картину разом. Для этого воспользуемся утилитой, названной msitools:
$ msitools max.msi
Получаем огромное количество файлов, и главный max.exe. В основном мы имеем большое количество .dll-файлов, также имеется qml-директория, содержащая все нужное для Qt, и директории Resources/Translations. Они нас не особо сильно интересуют.
И начнем, традиционно, с характеристик для .exe-файла. Следует написать небольшой bash-скрипт, чтобы сразу и без танцев с бубнами точно выделить все нужное нам поле информации: основные зависимости(депенденсы), тип файла, его экспорты. Представлю этот bash-скрипт здесь, да, я использовал нативный линукс. Я понимаю, что IDA и прочие GUI-обладающие программы могут быть вам удобнее.
#!/bin/bash if [ $# -ne 1 ]; then echo "Usage: $0 <file.dll or file.exe>" exit 1 fi FILE=$1 echo "определим тип файла..." file $FILE echo "вытянем строки..." strings $FILE > "${FILE}_strings.txt" echo "ищем зависимости..." peldd $FILE > "${FILE}_dependencies.txt" if [[ $FILE == *.dll ]]; then echo "смотрим экспорты..." readpe --exports $FILE > "${FILE}_exports.txt" fi echo "анализ гидрой..." /opt/ghidra/support/analyzeHeadless /home/kali/ghidra_projects MyProject -import $FILE -scriptPath /path/to/scripts -postScript ExportCode.java
Пропускаем через такой скрипт наш основной EXE, дабы увидеть все основные и первоочередные зависимости в удобном нам формате.
Уже на этом этапе мы видим крайне тревожное поведение приложения: как свои зависимости оно требует ADVAPI, shell и Kernel - DLLники критического значения, в совокупности дающие полный контроль над системой. ADVAPI позволяет редактировать реестр системы, shell - управлять процессами, и это еще может быть объяснено. Однако, это сделано с прямым доступом к системе, что делает факт очень тревожным.
Рассмотрим следующие интересующие нас факты. Среди всех .dll очень сильно выделяются network.dll, logger.dll и tracer_crash_reporter.dll. Нетворк, скорее всего, имеет в себе важные логические аспекты работы с "вебом", краш репортер и логгер по всей видимости отвечают за сбор информации о работе приложения(спойлер, не только работы приложения)).
Далее рассмотрим network.dll. Когда мы пропустили этот скрипт через наш сборщик информации на баше, мы увидели, что он также тесно связан с KERNEL32.dll и logger.dll.
Внутри мы можем начать поиск по основным интересующим нас моментам. В основном, нам следует смотреть на непосредственно работу с сетью, используя ключевые слова вроде socket, http, request, QNetwork и т.д.
При рассмотрении QNetwork-ассоциированных строк мы можем увидеть "базис" работы с сетью: создание реквестов, хидеринг, гет/пост реквесты, трекеры процесса загрузки и отправки. Однако, также есть достаточно большое количество функций с бредовыми названиями, ассоциированных с QNetwork. Их названия похожи на обфусцированные.
При поиске по socket мы можем увидеть также 2 функции, связанные с TCP-сокетами, которые имеют такие же бредовые названия. Это дает нам подсказку, что здесь далеко не все в полном порядке.
При поиске по HTTP внутри этого же DLLника мы опять видим 2 функции с обфусцированными названиями, значение и роль которых не очень понятны. Тут же мы видим и странное использование Jenkins. Что Jenkins тут забыл как локально установленная вещь, зная, сколько в нем самом уязвимостей, и сколько конкретно есть сценариев его вредоносного использования? Мы можем видеть воркспейс Jenkins.
Помимо этого, мы можем рассмотреть часть обфусцированных функций, которые мы можем тут увидеть.
Одна из функций под обфускацией в прямом смысле может быть реконструирована в средство для активного сбора самых разных данных, которые позже передаются через функции, связанные с socket-элементами и request-элементами.
Выводы
Приложение "Макс" является чрезвычайно интрузивным. Оно не только собирает широкий спектр персональных данных пользователя (возраст, пол, контакты, email, телефон, ID в соцсетях), но и имеет обширные возможности для взаимодействия с системой Android и Windows. Способность читать установленные приложения, записывать аудио, получать точное местоположение, управлять аккаунтами, использовать камеру и даже перехватывать диплинки, а также работать в фоновом режиме с использованием различных сенсоров и системных компонентов, делает его мощным инструментом для слежки и анализа пользовательской активности. Обфускация кода дополнительно затрудняет полный и точный анализ всех его функций. Это не просто мессенджер, ЭТО - ПОЛНОЦЕННЫЙ МАЛВАРЬ.
С более подробным отчетом по мобильной версии и со всеми фото можете ознакомиться здаесь: https://github.com/ZolManStaff/MAX-deep-analysis-of-the-messenger/tree/main