Play Integrity API の概要

Play Integrity API を使用すると、操作とサーバー リクエストが真正な Android デバイスで動作している真正なアプリバイナリからのものかどうかを確認できます。改ざんされたアプリや信頼できない環境からの潜在的に危険で不正な操作を検出することにより、アプリのバックエンド サーバーで、攻撃を防ぎ不正使用を抑制するための適切な措置を講じることができます。

Google Play ストアに対応しており、Google Play 開発者サービスを搭載した Android デバイスでアプリまたはゲームが使用されている場合、Play Integrity API は、次のものとやり取りしているかどうかを判定するためのレスポンスを提供します。

  • 正規のアプリバイナリ: Google Play で認識されている、改変されていないバイナリとやり取りしているかどうかを判断します。
  • 真正な Play インストール: 現在のユーザー アカウントにライセンスが付与されているかどうか(つまり、ユーザーが Google Play でアプリまたはゲームのインストールや支払いを行ったかどうか)を判定します。
  • 真正な Android デバイス: Google Play 開発者サービスを搭載した真正な Android デバイス(または PC 版 Google Play Games の真正なインスタンス)でアプリが実行されているかどうかを判定します。

また、Play Integrity API レスポンスで環境に関する情報を受け取ることもできます。たとえば、次の情報です。

  • アプリアクセスのリスク: 画面をキャプチャしたり、オーバーレイを表示したり、デバイスを操作したりするアプリが実行されているかどうかを判断します。
  • 既知のマルウェアによるリスク: Google Play プロテクトがオンになっているか、危険なアプリのインストールがデバイスで検出されたかどうかを判断します。

概要

ユーザーがアプリで操作を行ったら、Play Integrity API を呼び出して、Google Play によってインストールされ、真正な Android デバイスで実行されている真正なアプリバイナリでその操作が行われたことを確認できます。また、デバイスが最近行ったリクエストの量や、環境に関するシグナル(アプリアクセス リスクの判定結果や Play プロテクトの判定結果など)など、レスポンスで追加情報をオプトインすることもできます。判定結果に問題があった場合、アプリのバックエンド サーバーは、不正行為、詐欺、不正使用、偽装、不正アクセス、攻撃などの問題への対処方法を決定できます。

Play Integrity API の概要を示すフロー

セキュリティ上の考慮事項

Play Integrity API は、以下のおすすめの方法を実践すると、アプリで最大限の効果を発揮します。

不正使用対策戦略を準備する

Play Integrity API は単独の不正使用対策メカニズムとして使用するのではなく、不正使用対策戦略の一環として他のシグナルと併用すると、最大限の効果を発揮します。この API は、アプリに適した他のセキュリティに関するおすすめの方法と組み合わせて使用してください。デフォルトでは、アプリはすべてのインストールで 1 日あたり最大 10,000 件のリクエストを実行できます。1 日あたりの上限の引き上げをリクエストできます。

アクションの前にテレメトリーを収集し対象ユーザーを理解する

Play Integrity API の判定結果に基づいてアプリの動作を変更する前に、まず API を適用せずに実装することで既存のユーザー層の現状を把握できます。現在のインストール ベースの判定結果が判明したら、計画している適用を実施した場合の影響を推定し、それに応じて不正使用対策戦略を調整できます。

完全性判定の結果をリクエストする方法を決定する

Play Integrity API には、完全性判定の結果をリクエストして受け取る方法が 2 つあります。標準リクエスト、クラシック リクエスト、両者の組み合わせのいずれを実行した場合でも、完全性判定の結果レスポンスは同じ形式で返されます。

標準 API リクエストは、すべてのアプリとゲームに適しており、ユーザー アクションまたはサーバー リクエストが真正なものかどうかを確認するために、オンデマンドで実行できます。標準リクエストはレイテンシが最も低く(平均で数百ミリ秒)、使用可能な判定結果を取得できる信頼性が高くなります。標準リクエストは、特定のタイプの攻撃からの保護を Google Play に委任するとともに、オンデバイス スマート キャッシュを利用します。

クラシック API リクエスト(完全性判定の結果のリクエストに元々使用されていた方法)も引き続き使用できます。クラシック リクエストはレイテンシがより高く(平均で数秒)、デベロッパーには特定のタイプの攻撃のリスクを軽減する責任があります。クラシック リクエストは新たに評価を開始するため、標準リクエストより多くのユーザーデータとバッテリーを消費します。そのため、機密性の高いアクションまたは価値の高いアクションが真正なものかどうかを確認するために、少ない頻度で 1 回のみ実行するようにします。クラシック リクエストを作成し、後で使用するためにキャッシュに保存することを検討している場合は、攻撃のリスクを抑えるため、代わりに標準リクエストを実行してください。

2 種類のリクエストの主な違いを次の表に示します。

標準 API リクエスト クラシック API リクエスト
必要な最小 Android SDK バージョン Android 5.0(API レベル 21)以降 Android 4.4(API レベル 19)以降
API のウォームアップが必要 ✔️(数秒)
リクエストの一般的なレイテンシ 数百ミリ秒 数秒
可能なリクエスト頻度 高頻度(アクションまたはリクエストのオンデマンド チェック) 低頻度(価値の高いアクションまたは機密性の高いリクエストの 1 回限りのチェック)
リプレイおよびその種の攻撃の軽減 Google Play による自動軽減 サーバーサイド ロジックで nonce フィールドを使用する

上記以外の違いについては、クラシック リクエストに関する考慮事項の表をご覧ください。

適切なタイミングで完全性判定の結果をリクエストする

アプリアクセス リスクの判定結果は、詐欺師がアプリで実行される完全性判定を回避できないよう、アクセスを防ぎたいアクションやサーバー リクエストにできる限り近いタイミングでリクエストする必要があります。

API リクエストの複製を困難にする

標準 API リクエストには requestHash というフィールドがあり、改ざんやその種の攻撃を防ぐために使用できます。このフィールドには、アプリのリクエストに関連するすべての値のダイジェストを含める必要があります。アプリの標準リクエストを保護するには、コンテンツ バインディングの使用方法のガイダンスをご覧ください。

クラシック API リクエストには nonce(number once の略語)というフィールドがあり、リプレイ攻撃や改ざん攻撃など、特定タイプの攻撃の防止に使用できます。アプリのクラシック リクエストを保護するには、nonce を生成する方法のガイダンスをご覧ください。

完全性判定の結果をキャッシュに保存しない

完全性判定の結果をキャッシュに保存すると、プロキシ攻撃のリスクが高くなります。これは、不正な行為者が不正な目的で別の環境から真正なデバイスの判定結果を再利用する攻撃です。レスポンスをキャッシュに保存する代わりに、標準 API リクエストを実行して、オンデマンドで判定結果を取得できます。

階層型適用戦略を準備する

Play Integrity API の完全性判定にはさまざまなレスポンスがあり、それによって、複数の階層で適用できる不正使用対策戦略を構築できます。そのためには、可能なレスポンスまたはレスポンス グループごとに異なる動作をするようにアプリのバックエンド サーバーを構成します。

また、Google Play Console からの API レスポンスで追加のデバイスラベルの受け取りをオプトインすることで、デバイスの信頼性に基づいて適用戦略を階層化することもできます。各デバイスは、それぞれの条件を満たしたすべてのラベルを返します。たとえば、すべてのデバイスラベルの受け取りをオプトインした場合は、MEETS_BASIC_INTEGRITY のみを返すデバイスよりも、MEETS_STRONG_INTEGRITYMEETS_DEVICE_INTEGRITYMEETS_BASIC_INTEGRITY を返すデバイスを信頼することを選択できます。各シナリオで、サーバーから異なるレスポンスを返すことができます。

サーバーからアプリに多様なレスポンスを送信する

多様な決定結果を用意すると、各レスポンスでサーバーからアプリにバイナリの許可または拒否のレスポンスを送信するよりも、複製が困難になります。たとえば、「許可」、「制限付きで許可」、「CAPTCHA の完了後に制限付きで許可」、「拒否」のような一連の関連するレスポンスを使用できます。

最近のデバイスのアクティビティを使用して大規模な不正行為を検出する

Play Integrity API の最近のデバイスのアクティビティ機能を使用して、完全性トークンを多数リクエストしているデバイスを見つけます。大量のアクティビティを発生させる不正行為者は、一般的に実際のデバイスから有効な構成証明結果を生成し、それを bot に提供して、ユーザーに root 権限のあるデバイスやエミュレータに対する攻撃を自動化します。最近のデバイスのアクティビティ レベルを使用すると、過去 1 時間にそのデバイスでアプリによって生成された証明書の数を確認できます。

実用的なエラー メッセージを表示する

可能であれば、有用なエラー メッセージをユーザーに提供して、ユーザーがエラーの解決方法を理解できるようにします。たとえば、再試行、インターネット接続の有効化、Google Play ストア アプリが最新かどうかの確認などの解決方法を提示します。

不測の問題や障害に対する計画を立てる

Play ステータス ダッシュボードには、Play Integrity API のサービスのステータスに関する情報に加えて、停止や障害に関する情報も表示されます。Play Integrity API で万が一大規模な障害が起きた場合に備えて、バックエンド サーバーの動作を事前に計画する必要があります。デバイス固有の Android プラットフォーム キー認証キーが取り消された場合にも、バックエンド サーバーが機能するようにする必要があります。

エンドツーエンドのエンタープライズ不正防止ソリューションを検討する

不正行為や bot 管理のための総合ソリューションを求める企業のお客様は、デベロッパーに不正行為のリスクスコアを提供する Android 向け SDK が含まれるモバイル向けの reCAPTCHA Enterprise を購入できます。reCAPTCHA Enterprise には最初から Play Integrity API シグナルが含まれており、それを reCAPTCHA ネットワークおよびアプリケーション シグナルと組み合わせて、スムーズで非表示の不正管理ソリューションをすぐに使用できるようにしています。Play Integrity API を利用できない Android アプリの保護もできます。

価値の高い機能や機密性の高い機能にアクセスする際に、リスクの高いトラフィックを検証する

アプリやゲームで、Play Integrity API で保護する価値の高いアクションや機密性の高いアクションを特定します。これにより、アクセスを完全に拒否する必要がなくなります。可能であれば、価値の高いアクションを許可する前に、リスクの高いトラフィックを検証します。たとえば、アプリアクセス リスクにより、画面をキャプチャする可能性のあるアプリが実行されていることが示されている場合は、保護したい機能の実行を許可する前に、画面をキャプチャできるアプリを無効にするかアンインストールするようユーザーに求めます。

利用規約とデータ セーフティ

Play Integrity API にアクセスするか Play Integrity API を使用すると、Play Integrity API 利用規約に同意したものと見なされます。適用されるすべての利用規約とポリシーを読み理解したうえで、API にアクセスしてください。

Google Play には、デベロッパーがアプリによるデータの収集、データの共有、アプリのセキュリティ対策を開示し、ユーザーに最新情報を提供するためのデータ セーフティ セクションがあります。データフォームの記入方法については、Play Integrity API によるデータ処理の仕組みに関する情報をご覧ください。