Недавно появившейся в мессенджер «Макс», наделал много шума. Он является достаточно спорным приложением и мне пришла в голову мысль изучить приложение и посмотреть, а настолько ли опасно оно, как о нем говорят.
Как можно познакомиться с приложением ближе, чем через его код? Тем более, что для исследования android-приложений нам не понадобятся сложные инструменты на подобии IDA или Ghidra, как это бывает с анализом исполняемых файлов.

Для анализа я использовал стандартный, для подобной задачи, набор инструментов: JADX, APKtool, VSCode ну и конечно же Android Studio, куда без него в анализе APK файлов.
Но, прежде чем лезть под капот «Макса» я установил его на эмулятор устройства и посмотрел его функционал и требуемые им разрешения. После того, как я ввел номер телефона и подтвердил его, «Макс» попросил доступ к моим контактам (Рисунок 1). Достаточно стандартное поведение для мессенджера, позволяет находить контакты из списка, зарегистрированных в «Максе»

Рис.1 Запрос доступа

После этого, «Макс» снова запросил доступ к контактам (рисунок 2).

Рис.2 Запрос доступа

Заполнив сведения о контакте, а именно имя пользователя, я решил выполнить звонок, и мессенджер сразу запросил разрешение для записи аудио (рисунок 3).

Рис.3

Пощупал остальной функционал, были запрошены доступ к камере, демонстрации и записи экрана (демонстрация экрана в звонке есть, а вот функционала записи я не увидел).

Рис.4 Запрос доступа к камере, демонстрации и записи экрана.

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

Итак, я «разобрал» приложение и приступил к его анализу. Как исследователей, нас в первую очередь интересует файл AndroidManifest.

AndroidManifest.xml — один из самых важных и интересных для исследователя файлов. Он содержит много информации, по которой можно составить представление о приложении, и даже сформировать поверхность атаки. В архиве он представлен в закодированном виде.

Рис.5 Содержимое AndroidManifest.xml

Итак, что же интересного я нашел? А нашлось достаточно много.

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

·        REQUEST_INSTALL_PACKAGES - может устанавливать другие приложения

Рис.6

·        SYSTEM_ALERT_WINDOW - может показывать окна поверх других приложений

Рис.7

RECEIVE_BOOT_COMPLETED - автозапуск при старте системы

Рис.8

DISABLE_KEYGUARD - отключение блокировки экрана

Рис. 9

USE_FULL_SCREEN_INTENT - полноэкранные уведомления

Рис. 10

Доступ к личным данным:

READ_CONTACTS, WRITE_CONTACTS - полный доступ к контактам

Рис. 11

ACCESS_FINE_LOCATION - точная геолокация. Постоянное отслеживание точного местоположения пользователя в реальном времени.

Рис.12

CAMERA - доступ к камере

Рис. 13

RECORD_AUDIO - запись аудио

Рис. 14

READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE - доступ к файловой системе

Рис. 15

READ_MEDIA_IMAGES, READ_MEDIA_VIDEO - доступ к медиафайлам

Рис. 16

READ_PHONE_NUMBERS - доступ к телефонным номерам

Рис. 17

GET_ACCOUNTS, AUTHENTICATE_ACCOUNTS, MANAGE_ACCOUNTS, USE_CREDENTIALS - полный доступ к аккаунтам. Может получить список всех аккаунтов (Google, соцсети, почта) на устройстве и манипулировать ими.

Рис. 18

USE_FINGERPRINT - доступ к биометрии

Рис. 19

Сетевые разрешения:

INTERNET - полный доступ в интернет

Рис .20

ACCESS_WIFI_STATE, ACCESS_NETWORK_STATE - мониторинг сети
Bluetooth разрешения - полный контроль Bluetooth
CHANGE_WIFI_STATE - изменение состояния Wi-Fi. Могут мешать работе сети, перехватывать трафик.

Рис. 21

Подозрительные сервисы

        Сервис для звонков с доступом к камере и микрофону

Рис. 22

        Сервис медиа-проекции (может записывать экран)

Рис. 23

Опасные компоненты

        LinkInterceptorActivity с возможностью перехвата deeplinks:

android:exported="true" (Критическая уязвимость). Эта активность может быть запущена извне — другим приложением на устройстве или даже из браузера по специальной ссылке.

android:excludeFromRecents="true" (Тактика скрытности). После того как пользователь завершит работу с этой активностью, она не появится в списке последних приложений (который вызывается кнопкой "Недавние").

Рис. 24

CallNotifierFixActivity с возможностью показа на экране блокировки

Рис. 25

Трекинг и аналитика

com.google.android.gms.permission.AD_ID - доступ к рекламному ID. Нужен для создания уникального профиля пользователя для таргетированной рекламы и трекинга между разными приложениями.

Рис. 26

        Отключено резервное копирование (allowBackup="false"). Обычные приложения разрешают бэкап, чтобы пользователь мог восстановить данные. Вредоносное приложение отключает эту функцию, чтобы усложнить исследование своего поведения и извлечение украденных данных при помощи инструментов анализа.
Включен нативный код (extractNativeLibs="false"). Указывает системе не распаковывать нативные библиотеки (.so файлы) из APK. Это может использоваться для затруднения статического анализа кода антивирусами и исследователями, так как часть логики спрятана в скомпилированных бинарниках.

Рис. 27

Дополнительные опасные функции

        DOWNLOAD_WITHOUT_NOTIFICATION - скрытые загрузки. Позволяет скачивать файлы без уведомления пользователя.
FOREGROUND_SERVICE_DATA_SYNC - фоновая синхронизация данных. Позволяет запустить foreground-сервис для "синхронизации данных". Это механизм для длительной фоновой работы под видом полезной деятельности, чтобы постоянно собирать данные.

Рис. 28

        Автозапуск: Receiver для автозапуска при включении устройства. Ресивер BootCompletedReceiver с тремя разными действиями (BOOT_COMPLETED, QUICKBOOT_POWERON) — это гарантирует, что запуск выполниться автоматически при любой возможности сразу после включения телефона, даже до его разблокировки.

Рис. 29

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

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

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

Автозапуск при загрузке, скрытые загрузки, отключение резервного копирования и сложность анализа кода (extractNativeLibs="false") — это приемы, которые чаще ассоциируются с вредоносным ПО, стремящимся закрепиться в системе и скрыть свою деятельность.

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