Play Integrity API を使用すると、操作とサーバー リクエストが真正な Android デバイスで動作している真正なアプリバイナリからのものかどうかを確認できます。改ざんされたアプリや信頼できない環境からの潜在的に危険で不正な操作を検出することにより、アプリのバックエンド サーバーで、攻撃を防ぎ不正使用を抑制するための適切な措置を講じることができます。Play Integrity API には、既知のマルウェア、不明な画面キャプチャとオーバーレイ、ユーザー補助権限を不正使用するアプリ、過剰なアクティビティ、同じデバイスからの繰り返しの不正使用などのその他の脅威を検出して対応するためのオプション機能も用意されています。
Play Protect 認定 Android デバイスでアプリまたはゲームが使用されている場合、Play Integrity API は、次のものとやり取りしているかどうかを判定するためのレスポンスを提供します。
- 正規のアプリバイナリ: Google Play で認識されている、改変されていないバイナリとやり取りしているかどうかを判断します。
- 正規の Play インストール: 現在のユーザー アカウントにライセンスが付与されているかどうか(つまりユーザーが Google Play でアプリまたはゲームのインストールや支払いを行ったかどうか)を判断します。
- 真正な Android デバイス: アプリが、Play プロテクト認定を受けた真正な Android デバイス(または PC 版 Google Play Games の真正なインスタンス)で実行されているかどうかを判断します。
Play Integrity API レスポンスで環境に関する情報を受け取ることができます。次に例を示します。
- アプリアクセスのリスク: 画面をキャプチャしたり、オーバーレイを表示したり、デバイスを操作したりする(たとえば、ユーザー補助権限を不正使用する)可能性のあるアプリが実行されているかどうかを判断します。
- 既知のマルウェアによるリスク: Google Play プロテクトがオンになっているか、危険なアプリのインストールがデバイスで検出されたかどうかを判断します。
過剰なアクティビティや不正行為の繰り返しを検出できる機能を有効にすることもできます。
- 最近のデバイスのアクティビティ: デバイスが最近異常に大量のリクエストを送信しているかどうかを判断します。これは、自動生成トラフィックや攻撃の兆候である可能性があります。
- デバイスの再呼び出し(ベータ版): アプリが再インストールされた場合やデバイスがリセットされた場合でも、以前に操作したデバイスとやり取りしているかどうかを判断します。
概要
ユーザーがアプリで操作を行ったら、Play Integrity API を呼び出して、Google Play によってインストールされ、真正な Android デバイスで実行されている真正なアプリバイナリでその操作が行われたことを確認できます。また、デバイスが最近行ったリクエストの量や、環境に関するシグナル(アプリアクセス リスクの判定結果や Play プロテクトの判定結果など)など、レスポンスで追加情報をオプトインすることもできます。判定結果に問題があった場合、アプリのバックエンド サーバーは、不正行為、詐欺、不正使用、偽装、不正アクセス、攻撃などの問題への対処方法を決定できます。
セキュリティ上の考慮事項
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_INTEGRITY
、MEETS_DEVICE_INTEGRITY
、MEETS_BASIC_INTEGRITY
を返すデバイスを信頼することを選択できます。各シナリオで、サーバーから異なるレスポンスを返すことができます。
サーバーからアプリに多様なレスポンスを送信する
多様な決定結果を用意すると、各レスポンスでサーバーからアプリにバイナリの許可または拒否のレスポンスを送信するよりも、複製が困難になります。たとえば、「許可」、「制限付きで許可」、「CAPTCHA の完了後に制限付きで許可」、「拒否」のような一連の関連するレスポンスを使用できます。
デバイスの呼び出しを使用して繰り返しの不正使用を検出し、ユーザーのプライバシーを保護する
デバイスの呼び出しにより、ユーザーのプライバシーを保護しながら、アプリで特定のデバイスに関連付けられているカスタムデータを保存したり呼び出したりできます。このデータは Google のサーバーに保存されるため、アプリを再インストールしたりデバイスをリセットしたりした後でも、各デバイスのデータをアプリで確実に呼び出すことができます。これにより、過去に不正行為が検出されたデバイスを信頼性の高い方法で再識別し、措置を講じて不正行為に再び使用されないようにすることができます。デバイスの呼び出しのデータを構成する 3 つの値には、独自の意味を定義できます。
- 最大 3 つの個別のフラグやブール値として使用できます。たとえば、デバイスでアカウントを作成したかしていないか、無料トライアルは利用済みかそうでないか、悪質な不正使用として認知されているかいないかなどを値で表すことができます。
- または、値のあらゆる状態を最大 8 つのカスタムラベルにまとめることもできます。たとえば、3 つの値がいずれも変更されていない場合にデフォルト状態を示す 1 つのラベルと、カスタムの意味を持つ 7 つのラベルを作成できます。これにより、定義した動作やアクションに基づいてすべてのデバイスを最大 8 つのグループにセグメント化できます。このシナリオでは、3 つの
writeDates
のうち直近で更新されたものが、最後にラベルを更新した日付となります。
デバイスのリコール データを使用する場合は、前提条件とその他の考慮事項にも注意してください。
最近のデバイスのアクティビティを使用して大規模な不正行為を検出する
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 によるデータ処理の仕組みに関する情報をご覧ください。