Идентификаторы Android устройств, актуальные в 2023 году
Способы идентификации Android девайсов на основе IMEI, SIM ID и MAC адресов уходят в прошлое. Разбираемся, какие Android идентификаторы актуальны сегодня.

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

В прошлых версиях операционной системы Android были доступны для получения различные идентификаторы устройства и сим карты. Они широко использовались и позволяли однозначно определить устройство и даже узнать информацию об абоненте оператора сотовой связи, например, номер телефона из данных SIM карты. Перечислим некоторые из таких идентификаторов для Android приложений: IMEI — уникальный идентификатор устройства на уровне железа. Начиная с Android 10 (API level 29) приложению требудется разрешение READ_PRIVILEGED_PHONE_STATE для получения этого идентификатора. Основная причина, по которой стало необходимо получить разрешение — IMEI нельзя изменить или сбросить, поэтому он позволяет отслеживать устройство на протяжении всей его жизни. Разрешение READ_PRIVILEGED_PHONE_STATE может получить только определенный узкий круг приложений (например, предустановленные приложения операторов связи), поэтому IMEI больше недоступен для обычных Android приложений. В Android 6.0 (API level 23) для данного идентификатора требовалось явное разрешение пользователя (runtime permission) на его получение приложением. IMSI — идентификатор SIM карты. Условия его получения приложением аналогичны IMEI. Одним из способов использования номера SIM карты была проверка на ее перевыпуск. Если карта перевыпущена, возможно, это было сделано мошенниками в целях получения доступа к учетной записи, одноразовые коды для которой приходят в смс на указанный номер. Поэтому в таких случаях проводились дополнительные проверки со стороны интернет-сервиса. Line1 — номер телефона абонента. Условия его получения приложением аналогичны IMEI. Номер телефона мог использоваться приложением для проведения дополнительных проверок. Например, оценка репутации номера и проверка известных случаев его использования мошенниками. MAC адрес — идентификатор сетевой карты устройства. Он уникален и не изменится даже после сброса устройства, то есть его возврата к заводским настройкам. По этой причине, начиная с Android 6 MAC адрес доступен только системным приложениям. Обычные приложения его получить не могут.
Современные идентификатры Android девайсов

Один из наиболее полных источников информации об использовании идентификаторов Android приложений размещен на сайте для Android разработчиков. Рекомендуем с ним ознакомиться, если вы сами занимаетесь разработкой приложений. Здесь мы используем информацию с указанного сайта для разработчиков и из других доступных источников. Advertising ID — специальный идентификатор в Android. Он создан для приложений, которые показывают пользователю рекламу. Идентификатор учитывает возможность пользователя отказаться от отслеживания путем переключения флага в настройках устройства. Для использования Advertising ID приложению требуется разрешение com.google.android.gms.permission.AD_ID. Уникальный ID в хранилище приложения — простой, но не очень надежный способ. Он позволяет точно идентифицировать установку приложения, создавая уникальный идентификатор на самом устройстве (например, в формате GUID или UUID). Основных проблем две: пользователь легко может его изменить, поскольку имеет доступ к хранилищу приложения на своем устройстве, а также просто удалить приложение и установить его заново. Тогда идентификатор изменится. Данный идентификатор подходит для большинства случаев, но если ваше приложение пытаются использовать мошенники, то вам стоит задуматься о дополнительной защите. Android ID (ANDROID_ID, SSAID — Secure Settings Android ID) — уникальный ID устройства, который не меняется после переустановки приложения, но на современных версиях Android разные приложения (точнее, приложения с разным разработчиком) будут видеть разные ID. На Android 8.0 (API level 26) и выше этот ID уникален для каждой комбинации: ключ для подписи приложения + учетная запись пользователя на устройстве + устройство. Может быть изменен при сбросе устройства к заводским настройкам. На версиях до Android 8.0 (API level 26) этот ID был уникален для каждой комбинации: учетная запись пользователя на устройстве + устройство, таким образом все приложения видели одинаковый ID устройства. Отпечаток устройства (device fingerprint) — сумма настроек и других характеристик девайса. Не является системным идентификатором и не зависит от них. Поэтому отпечаток устройства не меняется между переустановками приложения и даже после сброса устройства к заводским настройкам. В операционной системе Android приложениям все еще доступно для чтения большое количество системных настроек, поэтому данный метод достаточно надежен и эффективен. Часто используется для защиты мобильных приложений от недобросовестных пользователей или мошенников. Один из минусов: при обновлении операционной системы Android данные настройки девайса могут значительно изменяться. В качестве решения возможно составлять различные отпечатки до и после обновления, но связывать их между собой через дополнительные идентификаторы. Самостоятельная разработка алгоритма составления отпечатка достаточно сложна, учитывая разнообразие смартфонов и планшетов на Android, а также большого количества версий операционной системы. Поэтому разработчики часто используют сторонние мобильные SDK для своих приложений. Производители таких SDK следят за выходом новых версий операционной системы и вовремя обновляют свою библиотеку для сбора отпечатков устройства. Существуют некоторые недокументированные идентификаторы Android устройства. Мы не рекомендуем их использовать, потому что они могут перестать работать при очередном обновлении операционной системы, либо такие приложения могут стать запрещены для публикации в Google Play в будущем. Тем не менее, мы приведем их для полноты названных идентификаторов. Идентификатор GSF Device ID — получен на основе com.google.android.gsf.gservices и является внутренним идентификатором для сервисов Google на данном устройстве. Официальной документации о данном методе нет, но вы можете найти примеры реализации в сети. Идентификатор Media Drm Device ID — использует API для работы с зашифрованным (для защиты от несанкционированного копирования) лицензионным медиа контентом. Вы можете найти примеры реализации по ключевым словам: MediaDrm, WideWine, Android, Device ID.
Что будет дальше с идентификаторами Android устройств

Мы считаем, что идентификаторы Android устройств для приложений продолжат существовать, поскольку используются в легитимных целях большим количеством разработчиков в своих приложениях. Без возможности отслеживать пользователей Android устройств реклама станет менее эффективной, мошенникам будет проще эксплуатировать приложения незаконными способами, а также разработчики будут терять прибыль из-за использования одной платной подписки на нескольких устройствах или повторного использования бесплатной пробной версии приложений. Возможное направление для изменений в работе идентификаторов: ввод дополнительных ограничений со стороны операционной системы Android на сбор данных приложениями, либо передача пользователям большего количества настроек для контроля за собираемыми данными на их устройствах. Что касается отпечатков устройств, то, возможно, появятся некоторые ограничения на сбор отпечатков или их составных частей. Могут появиться дополнительные разрешения, которые приложению необходимо получить от пользователя, или ограничения количества параметров для сбора за единицу времени (так называемый Privacy Budget, который планируется ввести в браузерах).
Использование Android идентификаторов в антифрод системах

Антифрод системы широко используют идентификаторы устройств для борьбы с мошенниками: поиска мультиаккаунтов, выявления эмуляторов и других типов рисков. Сессионные антифрод системы собирают идентификаторы устройства по каждой пользовательской сессии и используют их для анализа. Основная проблема Android SDK многих производителей антифрод решений в том, что они редко обновляются и содержат методы, которые были актуальны 3-5 лет назад, но недоступны в современных версиях операционной системы Android. Поэтому для каждой антифрод системы необходимо не только настроить сбор данных и их анализ, но и постоянно актуализировать свой продукт в соответствии с появлением новых версий устройств и операционных систем. Производитель российской антифрод системы Web Antifraud регулярно обновляет и совершенствует ее алгоритмы, а также учитывает новые реалии доступности идентификаторов Android устойств для приложений. Web Antifraud Mobile SDK для Android полностью поддерживает последнюю на данный момент версию операционной системы Android 13 (API level 33). Если вы ищете, как защитить мобильное приложение на Android, рекомендуем использовать решение от Web Antifraud. Кроме современных алгоритмов по выявлению мошенников у Web Antifraud есть бесплатный тестовый период, для получения которого оставьте заявку или напишите нам.
Для уведомлений о новых статьях и обсуждения:
Что такое Google Services Framework
Google Services Framework что это за программа — это приложение, предустановленное в систему устройства по умолчанию. Без него перестанут работать Гугл-сервисы, что приведет к сбою в работе ПО.
Зачем нужна
На Андроид Google Services Framework отвечает за проверку корректной работы фирменных приложений от поискового гиганта. Если они сбоят, то софт собирает полученную от устройства информацию и отравляет ее для анализа на официальные сервера компании. С GSF связаны :

- видеохостинг YouTube
- электронная почта Gmail;
- интернет-магазин Play Маркет;
- карты и определение местоположения;
- облачное хранилище G Drive, фирменные телефон, сообщения и галерея фото.
Компания Гугл не сообщает о прямом предназначении программы. Поэтому существует версия, что она также отвечает за проверку обновлений предустановленного софта или используется брендом для слежки за пользователями.
Сбои в работе
В работе ГСФ происходят периодические сбои, о чем оповещают через уведомления на главном экране. Зачастую это происходит из-за :
- недостатка оперативной памяти;
- нехватки места на внутреннем хранилище;
- долгой работы устройства без перезагрузки.
В крайнем случае, проблема скрывается в переизбытке временных файлов. Как от них избавиться :
-
Откройте «Настройки». Проследуйте в «Приложения», а затем разверните «Все приложения».




Не используйте клавишу «Остановить», иначе лишитесь доступа к сервисам компании.
Как итог, Google Services Framework представляет из себя очередное системное приложение, которое работает в фоне и регулирует работоспособность другого ПО. Удалить его без ROOT-прав доступа не получится.
Параметры политики защиты приложений Android в Microsoft Intune
В этой статье описаны параметры политики защиты приложений для устройств Android. Описанные параметры политики можно настроить для политики защиты приложений на панели Параметры на портале. Существует три категории параметров политики: параметры защиты данных, требования к доступу и условный запуск. В этой статье термин управляемые политикой приложения означает приложения, которые настроены с помощью политик защиты приложений.
Для получения политик защиты приложений для устройств Android требуется Корпоративный портал Intune.
Intune Managed Browser больше не поддерживается. Используйте Microsoft Edge для взаимодействия с защищенным браузером в Intune.
Защита данных
Передача данных
| Setting | Применение | Значение по умолчанию |
|---|---|---|
| Резервное копирование данных организации в службы резервного копирования Android | Выберите Блокировать, чтобы запретить этому приложению резервное копирование рабочих или учебных данных в службу архивации Android. |
- Приложения, управляемые политикой: разрешить передачу только в другие приложения, управляемые политикой.
- Все приложения: разрешить передачу в любое приложение.
- Нет. Не разрешайте передачу данных в любое приложение, включая другие приложения, управляемые политикой.
Среди приложений и служб существует несколько исключений, в которых Intune может разрешить передачу данных по умолчанию. Кроме того, вы можете создавать собственные исключения, если хотите разрешить передачу данных в приложение, не поддерживающее Intune. Дополнительные сведения см. в разделе Исключения передачи данных.
Эта политика также может применяться к ссылкам на приложения Android. Общие веб-ссылки управляются параметром политики Открывать ссылки из приложений в Intune Managed Browser.
В настоящее время Intune не поддерживает функцию мгновенных приложений Android. Intune блокирует любое подключение к приложению и из нее. Дополнительные сведения см. в разделе Мгновенные приложения Android в документации для разработчиков Android.
Если отправка данных организации в другие приложения настроена для всех приложений, текстовые данные по-прежнему могут передаваться через общий доступ ОС в буфер обмена.
При выборе значения Блокировать можно настроить параметр Разрешить пользователю открывать данные из выбранных служб, указав службы, которым разрешен доступ к расположениям данных организации.
- Этот параметр можно настроить, только если для параметра Получать данные из других приложений установлено значение Приложения, управляемые политикой.
- Этот параметр будет иметь значение «Разрешить», если для параметра Получение данных из других приложений задано значение Все приложения.
- Этот параметр будет иметь значение «Заблокировать» без допустимых расположений служб, если для параметра Получать данные из других приложений установлено значение Нет.
- Этот параметр поддерживают следующие приложения.
- OneDrive 6.14.1 или более поздней версии.
- Outlook для Android 4.2039.2 или более поздней версии.
- Teams для Android 1416/1.0.0.2021173701 или более поздней версии.
Примечание: Пользователю, назначаемому нескольким политикам защиты приложений, будет разрешено использовать только утвержденные клавиатуры, общие для всех политик.
Шифрование
Setting Применение Значение по умолчанию Шифрование данных организации Выберите Требовать, чтобы включить шифрование рабочих или учебных данных в этом приложении. Intune использует 256-разрядную схему шифрования AES wolfSSL вместе с системой хранилища ключей Android для безопасного шифрования данных приложения. Данные шифруются синхронно во время задач файлового ввода-вывода. Содержимое в хранилище устройства всегда шифруется. Новые файлы будут зашифрованы с помощью 256-разрядных ключей. Существующие 128-разрядные зашифрованные файлы будут перенесены на 256-разрядные ключи, но этот процесс не гарантируется. Файлы, зашифрованные с помощью 128-разрядных ключей, останутся читаемыми. функциональность.
Setting Применение Значение по умолчанию Синхронизация данных в собственных и управляемых политикой приложениях или надстройках Выберите Блокировать, чтобы запретить приложениям, управляемым политикой, сохранять данные в собственных приложениях устройства (контакты, календарь и мини-приложения), а также запретить использование надстроек в приложениях, управляемых политикой. Если приложение не поддерживает, сохранение данных в собственных приложениях и использование надстроек будет разрешено. Если выбран параметр «Разрешить», управляемое политикой приложение может сохранять данные в собственных приложениях или использовать надстройки, если эти функции поддерживаются и включены в управляемом политикой приложении.
Приложения могут предоставлять дополнительные элементы управления для настройки поведения синхронизации данных для конкретных собственных приложений или не учитывать этот элемент управления.
Примечание. При выборочной очистке для удаления рабочих или учебных данных из приложения данные, синхронизируемые непосредственно из приложения, управляемого политикой, удаляются. Все данные, синхронизированные из собственного приложения с другим внешним источником, не будут очищаться.
- Outlook для Android см. в статье Развертывание параметров конфигурации приложений Outlook для iOS и Android
Браузеры, управляемые политикой
В Android пользователи могут выбирать другие приложения, управляемые политикой, которые поддерживают ссылки http/https, если ни Intune Managed Browser, ни Microsoft Edge не установлены.Если браузер, управляемый политикой, требуется, но не установлен, конечным пользователям будет предложено установить Microsoft Edge.
Если требуется браузер, управляемый политикой, ссылки на приложения Android управляются параметром политики Разрешить приложению передавать данные в другие приложения .
Регистрация устройств в Intune
Если вы используете Intune для управления устройствами, см. статью Управление доступом к Интернету с помощью политик управляемого браузера с помощью Microsoft Intune.- Outlook для Android 4.0.95 или более поздней версии
- Teams для Android 1416/1.0.0.2020092202 или более поздней версии.
Исключения передачи данных
Существуют некоторые исключенные приложения и службы платформы, которые политики защиты приложений Intune разрешают передачу данных в и из них. Например, все приложения, управляемые Intune, на Android должны иметь возможность передавать данные в текст Google и из нее, чтобы текст с экрана мобильного устройства можно было читать вслух. Этот список может измениться. В нем представлены полезные службы и приложения для безопасной работы.
Полные исключения
Эти приложения и службы полностью разрешены для передачи данных в приложения, управляемые Intune, и из них.
Имя приложения или службы Описание com.android.phone Собственное приложение для телефона com.android.vending Магазин Google Play com.google.android.webview WebView, который необходим для многих приложений, включая Outlook. com.android.webview Веб-представление, необходимое для многих приложений, включая Outlook. com.google.android.tts Преобразование текста в речь в Google com.android.providers.settings Параметры системы Android com.android.settings Параметры системы Android com.azure.authenticator Приложение Azure Authenticator, которое требуется для успешной проверки подлинности во многих сценариях. com.microsoft.windowsintune.companyportal Корпоративный портал Intune Условные исключения
Эти приложения и службы разрешены только для передачи данных в приложения, управляемые Intune, и из них только при определенных условиях.
Имя приложения или службы Описание Условие исключения com.android.chrome Браузер Google Chrome Chrome используется для некоторых компонентов WebView в Android 7.0 и более поздних версий и никогда не скрывается от просмотра. Однако поток данных в приложение и из нее всегда ограничен. com.skype.raider Skype Приложение Skype разрешено только для определенных действий, которые приводят к телефонным звонкам. com.android.providers.media Поставщик содержимого мультимедиа Android Поставщик содержимого мультимедиа разрешен только для действия выбора мелодии звонка. com.google.android.gms; com.google.android.gsf Пакеты служб Google Play Эти пакеты разрешены для действий Google Cloud Messaging, таких как push-уведомления. com.google.android.apps.maps Google Maps Адреса разрешены для навигации. com.android.documentsui Средство выбора документов Android Разрешено при открытии или создании файла. com.google.android.documentsui Средство выбора документов Android (Android 10 и более поздних версий) Разрешено при открытии или создании файла. Дополнительные сведения см. в разделе Исключения политики передачи данных для приложений.
Требования к доступу
Setting Применение ПИН-код для доступа Выберите Требуется, чтобы для использования этого приложения требовалось вводить ПИН-код. Пользователю предлагается настроить ПИН-код при первом запуске приложения в рабочем или учебном контексте. Значение по умолчанию = Требовать
Значение по умолчанию = числовое значение
Значение по умолчанию = Разрешить
Если выбрано значение Да, необходимо настроить количество дней, по истечении которого ПИН-код необходимо сменить.
-
Время ожидания. Это количество минут до повторного проверки требований к доступу (определенных ранее в политике). Например, если администратор включил ПИН-код и запретил устройства с административным доступом в политике, при открытии управляемого приложения Intune пользователь должен ввести ПИН-код и использовать приложение на устройстве без административного доступа. При использовании этого параметра пользователю не придется вводить ПИН-код или проходить другой корневой проверка обнаружения в любом приложении, управляемом Intune, в течение периода времени, равного заданному значению.
Этот формат параметра политики поддерживает положительное целое число.
Значение по умолчанию = 30 минут
Примечание: В Android ПИН-код предоставляется всем приложениям, управляемым Intune. Таймер ПИН-кода сбрасывается после того, как приложение покидает передний план на устройстве. Пользователю не придется вводить ПИН-код в любом приложении, управляемом Intune, которое использует свой ПИН-код в течение времени ожидания, определенного в этом параметре.
Дополнительные сведения о том, как несколько параметров защиты приложений Intune, настроенных в разделе Доступ к одному набору приложений и пользователей, работают в Android, см. в статьях Часто задаваемые вопросы о Intune MAM и Выборочная очистка данных с помощью действий доступа к политике защиты приложений в Intune.
Условный запуск
Настройте параметры условного запуска, чтобы задать требования к безопасности входа для политики защиты приложений.
По умолчанию предоставляется несколько параметров с предварительно настроенными значениями и действиями. Вы можете удалить некоторые параметры, например минимальную версию ОС. Вы также можете выбрать дополнительные параметры из раскрывающегося списка Выбрать один элемент.
Условия приложения
Setting Применение Макс. попыток ввода ПИН-кода Укажите количество попыток, за которое пользователь должен успешно ввести свой ПИН-код до применения настроенного действия. Если пользователю не удается ввести ПИН-код после максимальной попытки ПИН-кода, пользователь должен сбросить пин-код после успешного входа в свою учетную запись и выполнения запроса Многофакторной идентификации (MFA), если это необходимо. Этот формат параметра политики поддерживает положительное целое число. - Сбросить ПИН-код — пользователь должен сбросить ПИН-код.
- Очистить данные — учетная запись пользователя, связанная с приложением, будет удалена с устройства.
-
Блокировать доступ (в минутах) — количество минут, в течение которых приложения MAM могут работать в автономном режиме. Укажите время (в минутах), по истечении которого выполняется повторная проверка требований доступа для приложения. По истечении этого периода приложению требуется проверка подлинности пользователя для Microsoft Entra идентификатора, чтобы приложение продолжало работать.
Этот формат параметра политики поддерживает положительное целое число.
Значение по умолчанию — 720 минут (12 часов)
- Предупредить — пользователь получит уведомление, если версия приложения на устройстве не соответствует требованиям. Это уведомление можно отклонить.
- Блокировать доступ — пользователю будет запрещен доступ, если версия приложения на устройстве не соответствует требованиям.
- Очистить данные — учетная запись пользователя, связанная с приложением, будет удалена с устройства.
Эта запись может встречаться несколько раз, при этом каждый экземпляр поддерживает отдельное действие.
Этот формат параметра политики поддерживает следующие форматы версий: major.minor, major.minor.build, major.minor.build.revision.
- Блокировать доступ . Доступ пользователя заблокирован, так как его учетная запись отключена.
- Очистить данные — учетная запись пользователя, связанная с приложением, будет удалена с устройства.
Условия устройства
Setting Применение Устройства со снятой защитой или административным доступом Укажите, следует ли блокировать доступ к устройству или очищать данные устройства для устройств со снятой защитой или привилегированным доступом. - Блокировать доступ — блокирует запуск этого приложения на устройствах со снятой защитой или с административным доступом. Пользователь по-прежнему может использовать это приложение для личных задач, но для доступа к рабочим или учебным данным в этом приложении придется использовать другое устройство.
- Очистить данные — учетная запись пользователя, связанная с приложением, будет удалена с устройства.
- Предупреждение . Пользователь увидит уведомление, если версия Android на устройстве не соответствует требованиям. Это уведомление можно отклонить.
- Блокировать доступ . Пользователю будет запрещен доступ, если версия Android на устройстве не соответствует этому требованию.
- Очистить данные — учетная запись пользователя, связанная с приложением, будет удалена с устройства.
- Предупреждение . Пользователь увидит уведомление, если версия Android на устройстве не соответствует требованиям. Это уведомление можно отклонить.
- Блокировать доступ . Пользователю будет запрещен доступ, если версия Android на устройстве не соответствует этому требованию.
- Очистить данные — учетная запись пользователя, связанная с приложением, будет удалена с устройства.
- Предупреждение . Пользователь увидит уведомление, если версия Android на устройстве не соответствует требованиям. Это уведомление можно отклонить.
- Блокировать доступ . Пользователю будет запрещен доступ, если версия Android на устройстве не соответствует этому требованию.
- Очистить данные — учетная запись пользователя, связанная с приложением, будет удалена с устройства.
- Разрешить задано (блокировать не указано) — приложение могут использовать только устройства, соответствующие указанному производителю. Все остальные устройства блокируются.
- Разрешить указанные (очистить неуказанные) — учетная запись пользователя, связанная с приложением, будет удалена с устройства.
Базовая целостность сообщает о общей целостности устройства. Проверку базовой целостности не проходят устройства с root-доступом, эмуляторы, виртуальные устройства и устройства с признаками несанкционированного доступа. Базовая целостность & сертифицированных устройств сообщает о совместимости устройства со службами Google. Эту проверку могут пройти только неизмененные устройства, сертифицированные корпорацией Google.
Если для условного запуска выбран параметр Аттестация устройства SafetyNet , можно указать, что в качестве типа оценки используется аппаратный ключ. Наличие ключа с аппаратной поддержкой как типа оценки будет свидетельствовать о большей целостности для устройства. Устройства, не поддерживающие аппаратные ключи, будут заблокированы политикой MAM, если они предназначены для этого параметра. Аппаратный ключ обеспечивает более надежное обнаружение корней в ответ на новые типы средств и методов, которые не всегда могут быть надежно обнаружены программным решением. В приложении аттестация оборудования будет включена, задав для параметра Тип оценки Required SafetyNet значениеАппаратный ключ после настройки аттестации устройства SafetyNet . Аппаратная аттестация использует аппаратный компонент, поставляемый с устройствами, установленными с Android 8.1 и более поздних версий. Устройства, которые были обновлены с предыдущей версии Android до Android 8.1, вряд ли будут иметь аппаратные компоненты, необходимые для аттестации с аппаратной поддержкой. Хотя этот параметр должен широко поддерживаться, начиная с устройств, поставляемых с Android 8.1, корпорация Майкрософт настоятельно рекомендует проверять каждое устройство отдельно, прежде чем широко применять этот параметр политики.
Важно: Устройства, которые не поддерживают этот тип оценки, будут блокироваться или очищаться в соответствии с действием аттестации устройств SafetyNet. Организациям, которые хотели бы использовать эту функцию, необходимо убедиться, что у пользователей есть поддерживаемые устройства. Дополнительные сведения о рекомендуемых устройствах Google см. в разделе Рекомендуемые требования к Android Enterprise.
- Предупреждение . Пользователь видит уведомление, если устройство не соответствует проверке google SafetyNet Аттестации на основе настроенного значения. Это уведомление можно отклонить.
- Блокировать доступ . Пользователь блокирует доступ, если устройство не соответствует проверке google SafetyNet Аттестации на основе настроенного значения.
- Очистить данные — учетная запись пользователя, связанная с приложением, будет удалена с устройства.
- Предупреждать . Пользователь видит уведомление, если проверка Приложений Google на устройстве не включена. Это уведомление можно отклонить.
- Блокировать доступ — пользователь блокирует доступ, если проверка приложений Google на устройстве не включена.
Это значение сложности предназначено для Android 12 и более поздних версий. Для устройств, работающих с Android 11 и более ранних версий, установка значения сложности с низким, средним или высоким значением по умолчанию будет зависеть от ожидаемого поведения при низкой сложности. Дополнительные сведения см. в документации для разработчиков Google getPasswordComplexity, PASSWORD_COMPLEXITY_LOW, PASSWORD_COMPLEXITY_MEDIUM и PASSWORD_COMPLEXITY_HIGH.
- Предупреждение . Пользователь видит уведомление, если блокировка устройства не соответствует минимальному требованию к паролю. Уведомление может быть отклонено.
- Блокировать доступ . Если блокировка устройства не соответствует минимальному требованию к паролю, пользователю будет запрещен доступ.
- Очистка данных . Учетная запись пользователя, связанная с приложением, очищается с устройства, если блокировка устройства не соответствует минимальным требованиям к паролю.
Используя этот параметр, Microsoft Intune также проверит обмен данными из Корпоративный портал со службой Intune с работоспособного устройства.
- Предупреждение. Пользователь видит уведомление, если устройство не соответствует аттестации устройства Samsung Knox проверка. Это уведомление можно отклонить.
- Блокировать доступ. Учетная запись пользователя блокирует доступ, если устройство не соответствует проверка аттестации устройства Samsung Knox.
- Очистить данные — учетная запись пользователя, связанная с приложением, будет удалена с устройства.
- Блокировать доступ — пользователю будет запрещен доступ, если уровень угроз, определяемый приложением выбранного поставщика защиты мобильных устройств (MTD) на устройстве конечного пользователя, не соответствует этому требованию.
- Очистить данные — учетная запись пользователя, связанная с приложением, будет удалена с устройства.
- Microsoft Defender для конечной точки — если настроен соединитель MTD, укажите Microsoft Defender для конечной точки предоставит сведения об уровне угрозы устройства.
- Mobile Threat Defense (non-Microsoft) — если настроен соединитель MTD, укажите, что MTD не microsoft предоставит сведения об уровне угрозы устройства.
Чтобы использовать этот параметр, необходимо настроить параметр «Максимальный разрешенный уровень угрозы устройства».
Как правильно идентифицировать Android-устройства
Всем привет! Если вам нужно создать уникальный и стабильный идентификатор Android-устройства для использования внутри приложения, то вы наверняка заметили тот хаос, который присутствует в документации и в ответах на stackoverflow. Давайте рассмотрим, как решить эту задачу в 2020 году. О том, где взять идентификатор, стойкий к переустановкам вашего приложения, и какие могут быть сложности в будущем — в этом кратком обзоре. Поехали!
Зачем нужна идентификация
В последнее время обсуждения конфиденциальности пользовательских данных стремительно набирают популярность. Возможно, это спровоцировано ростом выручки рекламных гигантов. Возможно, под этими обсуждениями скрывается обеспокоенность монополиями, которые идентифицируют пользователей и их устройства. Так, Apple, борясь со слежкой и ограничивая всем разработчикам использование IDFA, в то же самое время нисколько не ограничивает его себе. Что можно сказать точно: процесс идентификации пользователя приложения для разработчиков усложнился.
В задачах, опирающихся на идентификацию, встречаются: аналитика возвратов, персонализация контента и рекламы, предотвращение мошенничества.
Среди последних можно выделить несколько актуальных проблем:
- Общие аккаунты в сервисах с платной подпиской или уникальным платным контентом. Только представьте сколько теряют сервисы вроде Netflix или Coursera от того, что пользователи заводят один аккаунт на нескольких человек.
- Кража аккаунтов.
Обе проблемы ведут либо к потере выручки, либо к репутационным потерям. Надежность их решения напрямую зависит от надежности идентификации устройств.
Основные способы идентификации
Использование аппаратных идентификаторов
Устаревший и нежизнеспособный в настоящее время способ. Google хорошо поработала над тем, чтобы закрыть доступ к ним, поскольку они не меняются даже после сброса к заводским настройкам. Среди таких идентификаторов:
В настоящее время они недоступны без явного запроса разрешений. Более того, если приложению нужно ими пользоваться, оно может не попасть в Play Market. Оно должно основным функционалом опираться на эти разрешения, иначе будут трудности с прохождением ревью. Поэтому сейчас эта опция доступна приложениям для работы со звонками или голосовым ассистентам.
Такие идентификаторы не меняются после сброса к заводским настройкам, и здесь кроется неочевидный недостаток: люди могут продавать свои устройства, и в таком случае идентификатор будет указывать на другого человека.
Генерация UUID с первым запуском
Данный способ схож с использованием cookie: создаем файл со сгенерированной строкой, сохраняем его в песочнице нашего приложения (например с помощью SharedPreferences), и используем как идентификатор. Недостаток тот же, что и у cookie — вся песочница удаляется вместе с приложением. Еще она может быть очищена пользователем явно из настроек.
При наличии у приложения разрешений к хранилищу вне песочницы можно сохранить идентификатор где-то на устройстве и постараться поискать его после переустановки. Будет ли в тот момент нужное разрешение у приложения — неизвестно. Этот идентификатор можно использовать как идентификатор установки приложения (app instance ID).
Использование идентификаторов, предоставляемых системой
В документации для разработчиков представлен идентификатор ANDROID_ID. Он уникален для каждой комбинации устройства, пользователя, и ключа, которым подписано приложение. До Android 8.0 идентификатор был общим для всех приложений, после — уникален только в рамках ключа подписи. Этот вариант в целом годится для идентификации пользователей в своих приложениях (которые подписаны вашим сертификатом).
Существует и менее известный способ получить идентификатор общий для всех приложений, независимо от сертификата подписи. При первичной настройке устройства (или после сброса к заводским) сервисы Google генерируют идентификатор. Вы не найдете о нем никакой информации в документации, но тем не менее можете попробовать код ниже, он будет работать (по состоянию на конец 2020 года).
Добавляем строчку в файл манифеста нужного модуля:
И вот так достаем идентификатор:
private static String URI = "content://com.google.android.gsf.gservices"; public static String getGsfAndroidId(Context context) < String params[] = < ID_KEY >; Cursor c = context.getContentResolver().query(URI, null, null, params, null); if (!c.moveToFirst() || c.getColumnCount() < 2) return null; try < return Long.toHexString(Long.parseLong(c.getString(1))); >catch (NumberFormatException e) < return null; >>В коде происходит следующее: мы делаем запрос к данным из определенного ContentProvider-a, что поставляется с сервисами Google. Вполне возможно, что Google закроет к нему доступ простым обновлением сервисов. И это даже не обновление самой операционки, а пакета внутри нее, т.е. доступ закроется с обычным обновлением приложений из Play Market.
Но это не самое плохое. Самый большой недостаток в том, что такие фреймворки, как Xposed, позволяют с помощью расширений в пару кликов подменить как ANDROID_ID, так и GSF_ID. Подменить локально сохраненный идентификатор из предыдущего способа сложнее, поскольку это предполагает как минимум базовое изучение работы приложения.

Создание цифрового отпечатка (fingerprint) устройства
Идея device-fingerprinting не новая, и активно используется в вебе. У самой популярной библиотеки для создания отпечатка — FingerprintJS — 13 тысяч звезд на GitHub. Она позволяет идентифицировать пользователя без использования cookie.
Рассмотрим идею на примере (цифры взяты приблизительные для иллюстрации).
Возьмем ежедневную аудиторию какого-нибудь Android-приложения. Допустим она составляет 4 миллиона. Сколько среди них устройств марки Samsung? Гораздо меньше, примерно 600 тысяч. А сколько среди устройств Samsung таких, что находятся под управлением Android 9? Уже около 150 тысяч. Выделим среди последних такие, что используют сканер отпечатков пальцев? Это множество устройств еще меньше, ведь у многих планшетов нет сканера отпечатков пальцев, а современные модели опираются на распознавание лица. Получим 25000 устройств. Добавляя больше условий и получая больше информации, можно добиться множеств малых размеров. В идеальном случае — с единственным элементом внутри, что и позволит идентифицировать пользователя. Чем больше пользователей можно различить, тем выше энтропия этой информации.
Среди основных источников информации в Android, доступных без пользовательских разрешений, можно выделить аппаратное обеспечение, прошивку, некоторые настройки устройства, установленные приложения и другие.
Обычно всю добытую информацию хешируют, получая цифровой отпечаток. Его и можно использовать в качестве идентификатора.
Из достоинств метода — его независимость от приложения (в отличие от ANDROID_ID), поскольку при одинаковых показаниях с источников отпечатки будут одинаковыми. Отсюда же вытекает первый недостаток — разные устройства с некоторой вероятностью могут иметь одинаковый отпечаток.
Еще одна особенность отпечатка — не все источники информации стабильны. Например, установленные приложения дадут много энтропии. Возьмите устройство друга, и проверьте, одинаков ли у вас набор приложений. Скорее всего — нет, к тому же приложения могут устанавливаться и удаляться почти каждый день.
Таким образом, метод будет работать при правильном соотношении стабильности и уникальности источников энтропии.
Какой метод выбрать
Итак, мы рассмотрели доступные способы идентификации. Какой же выбрать? Как и в большинстве инженерных задач, единственного правильного решения не существует. Все зависит от ваших требований к идентификатору и от требований к безопасности приложения.
Разумный вариант — использовать сторонние решения с открытыми исходниками. В этом случае за изменениями в политике конфиденциальности будет следить сообщество, вовремя поставляя нужные изменения. За столько лет существования проблемы до сих пор нет популярной библиотеки для ее решения, как это есть для веба. Но среди того, что можно найти на android-arsenal, можно выделить две, обе с открытым исходным кодом.
- Android-device-identification — библиотека для получения идентификатора. Судя по коду класса, ответственного за идентификацию, используются аппаратные идентификаторы, ANDROID_ID, и цифровой отпечаток полей из класса Build. Увы, проект уже 2 года как не поддерживается, и в настоящий момент скорее неактуален. Но, возможно, у него еще будет развитие.
- Fingerprint-android — совсем новая библиотека. Предоставляет 2 метода: getDeviceId и getFingerprint. Первый опирается на GSF_ID и ANDROID_ID, а второй отдает отпечаток, основанный на информации с аппаратного обеспечения, прошивки и некоторых стабильных настроек устройства. Какая точность у метода getFingerprint — пока неясно. Несмотря на это библиотека начинает набирать популярность. Она проста в интеграции, написана на Kotlin, и не несет за собой никаких зависимостей.
В случае, когда импортирование сторонних зависимостей нежелательно, подойдет вариант с использованием ANDROID_ID и GSF_ID. Но стоит следить за изменениями в обновлениях Android, чтобы быть готовым к моменту, когда доступ к ним будет ограничен.
Если у вас есть вопросы или дополнения — делитесь ими в комментариях. А на этом все, спасибо за внимание!
- Android
- разработка
- идентификация
- информационная безопасность
- безопасность мобильных приложений