Обзор Play Integrity API

Play Integrity API позволяет удостовериться, что действия пользователей и запросы к серверу исходят из подлинного приложения, которое было установлено из Google Play и запущено на немодифицированном сертифицированном устройстве Android. Обнаруживая подозрительные действия, например со стороны модифицированных версий приложения, ненадежных устройств или эмулированных сред, ваш бэкенд-сервер может принимать необходимые меры для предотвращения злоупотреблений и несанкционированного доступа, борьбы с мошенничеством и жульничеством, а также защиты пользователей от атак.

Обзор Play Integrity API
flow

API возвращает результаты оценки, которые помогают выявлять потенциальные угрозы, в том числе:

  • Несанкционированный доступ. Оценка accountDetails позволяет определить, установил или оплатил ли пользователь ваше приложение или игру через Google Play.
  • Изменение кода. Оценка appIntegrity помогает узнать, используется ли неизмененная версия исполняемого файла, подтвержденная Google Play.
  • Опасные устройства и эмулируемые среды. Оценка deviceIntegrity позволяет выявить, запущено ли приложение на немодифицированном сертифицированном устройстве Android или в подлинной версии Google Play Игр на компьютере.

Разработчики Google Play также могут согласиться получать дополнительные результаты оценки и выявлять более широкий спектр потенциальных угроз, в том числе:

  • Устройства без исправлений. Ответ MEETS_STRONG_INTEGRITY в оценке deviceIntegrity помогает определить, установлены ли на устройстве недавние обновления системы безопасности (для устройств с Android 13 и более поздних версий).
  • Риск доступа со стороны других приложений. Оценка appAccessRiskVerdict позволяет узнать, запущены ли приложения, которые могут использоваться для записи экрана, показа оверлеев или управления устройством (например, путем злоупотребления разрешениями на доступ к специальным возможностям).
  • Известное вредоносное ПО. Оценка playProtectVerdict помогает выявить, включена ли Google Play Защита и обнаружены ли на устройстве подозрительные или опасные приложения.
  • Гиперактивность. Уровень recentDeviceActivity позволяет определить, отправляло ли устройство аномально высокое число запросов в последнее время. Это может указывать на автоматическую передачу трафика или атаку.
  • Повторные нарушения и неоднократное использование устройств. Оценка deviceRecall (бета) помогает узнать, взаимодействуете ли вы с устройством, на котором вы уже отмечали нарушения, даже если приложение было переустановлено или настройки устройства были сброшены.

API можно использовать на устройствах Android всех типов, включая телефоны, планшеты, складные устройства, Android Auto, Android TV, Android XR, ChromeOS и Wear OS, а также в Google Play Играх на компьютере.

Безопасность

Чтобы использовать Play Integrity API с максимальной эффективностью, придерживайтесь следующих рекомендаций:

Разработайте стратегию борьбы со злоупотреблениями

Лучше всего использовать Play Integrity API вместе с другими средствами мониторинга в составе общей системы борьбы со злоупотреблениями, а не в качестве единственного механизма защиты. Используйте этот API в сочетании с другими рекомендациями по обеспечению безопасности. По умолчанию ваше приложение может отправлять до 10 000 запросов в день. Вы можете запросить увеличение суточного лимита.

Сбор телеметрии и анализ аудитории перед принятием мер

Прежде чем менять поведение приложения на основе оценок Play Integrity API, вы можете внедрить API без принудительного применения, чтобы оценить текущую ситуацию с существующей аудиторией. Узнав, какие оценки возвращает текущее количество установок, вы сможете оценить влияние планируемых мер и скорректировать стратегию борьбы со злоупотреблениями.

Решите, как будете запрашивать оценку целостности

Play Integrity API предлагает два способа запрашивать и получать оценки целостности: Независимо от того, какие запросы вы отправляете, оценка целостности возвращается в одном и том же формате.

Стандартные запросы к API подходят для любых приложений и игр. Они позволяют проверять, действительно ли действия пользователей или запросы к серверу исходят из вашего приложения. Стандартные запросы обрабатываются быстрее всего (в среднем за несколько сотен миллисекунд) и с высокой вероятностью позволяют получить полезную оценку. При этом используется умное кеширование на устройстве, а защита от некоторых типов атак делегируется Google Play.

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

В таблице ниже приводятся некоторые основные различия между этими типами запросов.

Стандартные запросы к API Классические запросы к API
Минимальная версия Android SDK* Android 6.0 (уровень API 23) или более поздней версии; Android 6.0 (уровень API 23) или более поздней версии;
Необходимость подготовки API ✔️ (несколько секунд) ❌
Типичная задержка при обработке запроса Несколько сотен миллисекунд Несколько секунд
Возможная частота запросов Часто (проверка любых действий или запросов по запросу) Низкая (разовая проверка наиболее важных действий или запросов доступа к наиболее конфиденциальным данным)
Защита от атак повторного воспроизведения и аналогичных злоупотреблений Автоматическая защита Google Play Использование поля nonce в логике сервера

* Для Play Integrity API версии 1.4.0 и более поздних минимальная поддерживаемая версия Android SDK одинакова для обоих типов запросов и определяется значением minSdkVersion библиотеки. Для версии 1.3.0 и более ранних выпусков минимальная требуемая версия Android SDK – Android 5.0 (уровень API 21) для запросов к Standard API и Android 4.4 (уровень API 19) для запросов к Classic API.

Таблица с другими различиями приведена в статье Примечания к классическим запросам.

Запрашивайте оценку целостности в подходящий момент

Запрашивайте оценку риска доступа к приложению как можно ближе к моменту действия или запроса сервера, который вы хотите защитить от доступа. Это поможет предотвратить обход проверки целостности, выполняемой вашим приложением.

Защитите запросы к API от копирования

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

В запросах к Classic API есть поле nonce (сокращение от number once – одноразовое число), которое используется для защиты от определенных типов атак, например атак повторного воспроизведения и фальсификации. Следуйте инструкциям по созданию одноразовых кодов, чтобы защитить классические запросы приложения.

Не кешируйте оценки целостности

Кеширование оценок целостности повышает риск проксирования – атаки, при которой злоумышленник повторно использует оценку с надежного устройства в целях злоупотребления в другой среде. Вместо кеширования ответов вы можете отправить стандартный запрос к API, чтобы получить оценку по требованию.

Используйте многоуровневую стратегию применения мер

Play Integrity API может предоставлять разные оценки целостности, что позволяет выстроить стратегию безопасности с применением различных мер в зависимости от полученной оценки. Для этого настройте внутренний сервер приложения так, чтобы он по-разному реагировал на каждый возможный ответ или группу ответов.

Прежде чем оценивать надежность устройства, необходимо проверить другие основные сигналы в ответе API:

  • Сведения о запросе. Убедитесь, что requestDetails соответствуют ожидаемым значениям. В частности, проверьте requestHash или nonce, чтобы предотвратить атаки повторного воспроизведения.
  • Целостность приложения. Убедитесь, что для параметра appRecognitionVerdict установлено значение PLAY_RECOGNIZED. Это подтверждает, что сертификат подписи приложения распознан Google Play и не был изменен.
  • Сведения об аккаунте. Убедитесь, что для параметра appLicensingVerdict установлено значение LICENSED. Это подтверждает, что пользователь установил или обновил приложение из Google Play.

Приложение должно быть способно обрабатывать ошибки, возникающие при проверке, например с помощью диалогового окна Google Play. Кроме того, приложение должно уметь обрабатывать коды ошибок, которые могут возникнуть во время запроса.

После прохождения базовых проверок вы можете настроить стратегию принудительного применения на основе надежности устройства, включив дополнительные ярлыки устройств в ответе API из Play Console. Для каждого устройства будут возвращены все ярлыки, критериям которых оно соответствует. Чтобы получить версию Android SDK, используйте поле deviceAttributes, включенное в ответ API. Уровни доверия устройств варьируются от более надежных к менее надежным:

  • MEETS_STRONG_INTEGRITY (Android 13 и более поздние версии) – самый высокий уровень доверия к устройству, требующий аппаратных защищенных сигналов и недавнего исправления системы безопасности.
  • MEETS_DEVICE_INTEGRITY (Android 13 и более поздние версии) и MEETS_STRONG_INTEGRITY (версии до Android 13) – следующий уровень доверия. Оба решения используют аппаратные сигналы безопасности.
  • MEETS_DEVICE_INTEGRITY (до Android 13). Следующий уровень, на котором используется аппаратная аттестация, если она доступна, и программная аттестация в качестве резервной.
  • MEETS_BASIC_INTEGRITY – самый низкий уровень доверия, ниже которого ярлыки устройства не присваиваются.

Например, если вы включили все ярлыки устройств, то можете считать устройство, которое возвращает MEETS_STRONG_INTEGRITY, MEETS_DEVICE_INTEGRITY и MEETS_BASIC_INTEGRITY, более надежным, чем то, которое возвращает только MEETS_BASIC_INTEGRITY. Вы можете по-разному отвечать с сервера в каждом сценарии.

Вы можете добавить в многоуровневую стратегию защиты другие сигналы, например считать менее надежными устройства, которые возвращают более высокие уровни в recentDeviceActivity.

Отправка ответов из сервера в приложение

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

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

Запоминание устройства позволяет приложениям хранить некоторые данные, связанные с определенным устройством, и обращаться к ним при необходимости, не нарушая конфиденциальность пользователя. Так как информация хранится на серверах Google, ваше приложение сможет обращаться к ней даже после сброса настроек устройства или переустановки. Это позволяет надежно идентифицировать устройство, которое ранее использовалось для злоупотреблений, и принять меры, чтобы предотвратить их повторение. Вы можете самостоятельно определить значение трех параметров, которые составляют данные запоминания устройства:

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

Также не забывайте о требованиях и других особенностях работы с данными запоминания устройства.

Как выявлять масштабные злоупотребления с помощью данных о недавних действиях на устройстве

Используйте функцию Недавние действия на устройстве в Play Integrity API, чтобы находить устройства, которые запрашивают большое количество токенов целостности. Злоумышленники, совершающие масштабные атаки, часто генерируют действительные результаты проверки на реальных устройствах и передают их ботам, чтобы автоматизировать атаки на эмуляторы и устройства с root-доступом. С помощью уровня недавних действий на устройстве можно узнать, сколько подтверждений было сгенерировано вашим приложением на этом устройстве за последний час.

Показывать сообщения об ошибках, которые можно исправить

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

Составьте план на случай непредвиденных проблем или сбоев

На панели мониторинга доступности сервисов Google Play показывается информация о статусе Play Integrity API, в том числе о сбоях и перерывах в работе. Заранее спланируйте действия вашего внутреннего сервера на случай, если произойдет масштабный сбой Play Integrity API. Обратите внимание, что ваш бэкенд-сервер также должен быть готов к работе в случае, если ключи аттестации ключей платформы Android, относящиеся к устройствам, отозваны.

Используйте комплексные решения для борьбы с мошенничеством

Корпоративные клиенты, которым нужно комплексное решение для защиты от мошенничества и ботов, могут приобрести reCAPTCHA Enterprise для мобильных устройств. В этот продукт входят SDK для Android, которые предоставляют разработчикам оценки риска мошенничества. reCAPTCHA Enterprise автоматически включает сигналы Play Integrity API и объединяет их с сигналами сети и приложений reCAPTCHA, предоставляя клиентам готовое решение для незаметной защиты от мошенничества. Она также может защищать приложения для Android, в которых недоступен Play Integrity API.

Проверка подозрительного трафика при доступе к ценным или конфиденциальным функциям

Определите, какие действия в вашем приложении или игре являются ценными или конфиденциальными, и защитите их с помощью Play Integrity API, вместо того чтобы полностью запрещать доступ. По возможности проверяйте подозрительный трафик, прежде чем разрешать ценные действия. Например, если риск доступа к приложению указывает на то, что запущено приложение, которое может делать снимки экрана, попросите пользователя отключить или удалить его, прежде чем разрешить доступ к защищаемой функции.

Условия использования и безопасность данных

Получая доступ к Play Integrity API или используя его, вы принимаете Условия использования Play Integrity API. Прежде чем начать работу с API, внимательно прочитайте все действующие условия и правила.

В Google Play есть раздел безопасности данных, в котором разработчики должны указывать сведения о том, как их приложения собирают, защищают и передают пользовательские данные. Чтобы вам было проще заполнить форму, ознакомьтесь с информацией о том, как Play Integrity API обрабатывает данные.