Google は、アプリが安全で信頼できる環境で実行されているかどうかを検出するための一連の API とサービスを提供しています。その中心となるのが Play Integrity API です。この API は、リスクが潜んでいる可能性のある不正なインタラクションを検出し、インタラクションが真正なものであることを確認するのに役立ちます。Play Integrity API では、アプリとデバイスの完全性に加えて、アクセスとユーザー補助のリスク、Google Play プロテクト、最近のデバイスのアクティビティに関する情報も提供するようになりました。Android プラットフォームでは、不正防止戦略をさらに強化するために、アプリに関連する可能性のある特定のシナリオ向けの API を提供しています。
Play Integrity API
Play Integrity API を使用すると、アプリが実行されているデバイスのセキュリティ状態を確認できます。これにより、適切なユーザーが機密情報にアクセスしていることがわかります。
これにより、インタラクションとサーバー リクエストが信頼できる環境の真正なアプリバイナリから送信されていることを確認できます。
- 正規のアプリバイナリ: Google Play で認識されている、改変されていないバイナリとやり取りしているかどうかを判断します。
- 正規の Play インストール: 現在のユーザー アカウントにライセンスが付与されているかどうか(つまり、ユーザーが Google Play でアプリやゲームのインストールや支払いを行ったかどうか)を判断します。
- 真正な Android デバイス: Google Play 開発者サービスを搭載した真正な Android デバイスでアプリが実行されているかどうかを判断します。
- 既知のマルウェアが含まれていない: Google Play プロテクトがオンになっているか、危険なアプリのインストールがデバイスで検出されたかを判断します。
- 他のアプリによるアクセスのリスクが低い: 画面をキャプチャしたり、デバイスやアプリへの入力を制御したりする可能性のある他のアプリが実行されているかどうかを判断します。
不正行為の軽減にどのように役立つか
ユーザーがアプリ内で重要な操作を行ったときに、Play Integrity API を呼び出すことができます。そうでない場合、アプリのバックエンド サーバーは、攻撃や不正行為からどのように防御するかを決定できます。たとえば、追加のユーザー確認を要求したり、機密性の高い機能へのアクセスを拒否したりできます。
アプリアクセスのリスク
アプリアクセス リスクのシグナルは、アプリの実行中にデバイス上の他のアプリが画面を表示してキャプチャする可能性や、ユーザー補助権限を使用してアプリにアクセスする可能性があるかどうかを評価するために導入されました。検証済みのユーザー補助アプリは、これらの判定結果から自動的に除外されます。アプリアクセス リスクは、リクエスト元のアプリはインストール済みのアプリの ID を取得せず、判定結果がユーザー ID またはデバイス ID にリンクされないため、デベロッパーはユーザーのプライバシーを保護しながらアプリを保護できます。
この協力的な取り組みのおかげで、お客様をより効果的に保護するための、より詳細な分析情報を取得するために必要なシグナルを得ることができます。
- Nubank、早期アクセス パートナー
アプリアクセス リスクにはさまざまなリスクレベルがあります。
- 応答のキャプチャとは、画面をキャプチャできる他のアプリが実行されていることを意味します。
- 応答を制御するとは、デバイスを制御できる他のアプリが実行されていることを意味します。そのため、これらのアプリは画面のキャプチャとアプリへの入力の制御の両方を行うことができます。
アプリアクセス リスクは現在、公開ベータ版で提供されており、今後数か月以内に一般提供される予定です。
アプリアクセス リスクの適用
アプリやゲームで、Play Integrity API で保護する価値の高いアクションや機密性の高いアクションを特定します。これにより、アクセスを完全に拒否する必要がなくなります。可能であれば、価値の高いアクションを許可する前に、リスクの高いトラフィックを検証します。たとえば、アプリアクセス リスクにより、画面をキャプチャする可能性のあるアプリが実行されていることが示されている場合は、保護したい機能の実行を許可する前に、画面をキャプチャできるアプリを無効にするかアンインストールするようユーザーに求めます。
次の表に、判定結果の例を示します。
アプリアクセス リスク判定結果のレスポンス例 | 解釈 |
---|---|
appsDetected: ["KNOWN_INSTALLED"]
|
Google Play で認識された、またはデバイスのメーカーによってシステム パーティションにプリロードされているアプリのみが存在します。キャプチャ、制御、オーバーレイの判定結果につながる実行中のアプリはありません。 |
appsDetected: ["KNOWN_INSTALLED", "UNKNOWN_INSTALLED", "UNKNOWN_CAPTURING"]
|
Google Play によってインストールされたアプリ、またはデバイスのメーカーによってシステム パーティションにプリロードされたアプリがあります。 実行中の他のアプリがあり、画面の表示や他の入出力のキャプチャに使用できる権限が有効になっている。 |
appsDetected: ["KNOWN_INSTALLED", "KNOWN_CAPTURING", "UNKNOWN_INSTALLED", "UNKNOWN_CONTROLLING"]
|
画面の表示や他の入出力のキャプチャに使用できる権限が有効になっている Play またはシステムが実行されている。デバイスの制御やアプリへの入力の直接制御に使用できる権限が有効になっている実行中の他のアプリもあります。 |
appAccessRiskVerdict: {}
|
要件が満たされていないため、アプリアクセス リスクは評価されませんでした。(たとえば、デバイスの信頼性が十分ではなかった場合など)。 |
Play プロテクト シグナル
Play プロテクト シグナルは、Play プロテクトがオンになっているかどうかや、既知の有害なアプリがデバイスにインストールされていることが検知されたかどうかをアプリに通知します。
environmentDetails:{
playProtectVerdict: "NO_ISSUES"
}
アプリやユーザーのデータに対してマルウェアが特に懸念される場合は、この判定結果を確認し、続行する前に Play プロテクトを有効にするか有害なアプリを削除するようユーザーに依頼できます。
playProtectVerdict
の値は次のいずれかになります。
判定結果 | 解説 | 推奨される対処方法 |
---|---|---|
|
Play プロテクトはオンになっていますが、デバイスにおいてアプリの問題は検知されませんでした。 |
Play プロテクトがオンになっていて、問題は検出されていないため、ユーザーの操作は必要ありません。 |
|
Play プロテクトはオンになっていますが、まだスキャンが実行されていません。デバイスまたは Play ストア アプリが最近リセットされた可能性があります。 |
Play プロテクトがオンになっていて、問題は検出されていないため、ユーザーの操作は必要ありません。 |
|
Play プロテクトがオフになっています。 |
Play プロテクトがオンになっていて、問題は検出されていないため、ユーザーの操作は必要ありません。 |
|
Play プロテクトがオンになっており、有害な可能性があるアプリがデバイスにインストールされていることが検知されました。 |
リスク許容度に応じて、Play プロテクトを起動し、Play プロテクトの警告に対応するようユーザーに依頼できます。ユーザーがこれらの要件を満たせない場合は、サーバー アクションからユーザーをブロックできます。 |
|
Play プロテクトがオンになっており、危険なアプリがデバイスにインストールされていることが検知されました。 |
リスク許容度に応じて、Play プロテクトを起動し、Play プロテクトの警告に対応するようユーザーに依頼できます。ユーザーがこれらの要件を満たせない場合は、サーバー アクションからユーザーをブロックできます。 |
|
Play プロテクトの判定結果は評価されませんでした。 次のような原因が考えられます。
|
最近のデバイスのアクティビティ
最近のデバイスのアクティビティをオプトインすることもできます。これにより、過去 1 時間にアプリが特定のデバイスで完全性トークンをリクエストした回数を確認できます。最近のデバイスのアクティビティを使用すると、アクティブな攻撃を示している可能性がある、予期せぬ高頻度のデバイスからアプリを保護できます。一般的なデバイスにインストールされたアプリが 1 時間ごとに完全性トークンをリクエストする回数の予測に基づいて、最近のデバイスのアクティビティ レベルをどの程度信頼するかを決定できます。
recentDeviceActivity
を受け取ることをオプトインした場合、deviceIntegrity
フィールドには以下の 2 つの値が含まれます。
deviceIntegrity: {
deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"]
recentDeviceActivity: {
// "LEVEL_2" is one of several possible values.
deviceActivityLevel: "LEVEL_2"
}
}
まず、データを確認して、すべてのデバイスでのアプリの一般的なデバイス アクティビティ レベルを確認する必要があります。これにより、デバイスが大量のリクエストを行ったときのアプリの応答方法を決定できます。アクティビティがやや高い場合は、ユーザーに後でもう一度試すように求めることをおすすめします。アクティビティが非常に多い場合は、より厳格な適用措置を取ることをおすすめします。
標準リクエストとクラシック リクエスト
Play Integrity の実装の一環として、2 種類のリクエストを考慮することが重要です。レスポンスを最短にするには、通常は標準リクエストを使用します。デバイス証明書レコードに対して新しく生成されたリクエストが必要な場合は、クラシック リクエストを使用します。
クラシック リクエスト |
標準リクエスト |
---|---|
リクエストはより時間がかかるため、頻度を下げる必要があります。 たとえば、価値の高いアクションや機密性の高いアクションが真正なものかどうかを確認するための 1 回限りのアクティビティです。 あまり使用しない。 |
リクエストは低レイテンシであり、オンデマンドで使用できます。 標準リクエストは以下の 2 つの部分で構成されます。
オンデマンドで使用できます。 |
標準リクエストとクラシック リクエストの詳細については、Play Integrity のドキュメントをお読みください。
実装
Play Integrity API の使用を開始するには:
- Google Play Console で Play Integrity API レスポンスを有効にして、Google Cloud プロジェクトにリンクします。
- アプリに Play Integrity API を統合します。
- 判定結果の処理方法を決定します。
デフォルトでは、Play Integrity API はアプリごとに 1 日あたり最大 10, 000 件のリクエストを許可します。1 日あたりの最大リクエスト数を引き上げるには、こちらの手順に従ってください。リクエストの 1 日あたりの上限を引き上げるには、アプリに Play Integrity API を正しく実装し、他の配信チャネルに加えて Google Play で利用できる必要があります。
Play Integrity API に関する注意事項
- Play Integrity API レスポンスのエラーを適切に処理することが重要です。エラーコードに基づいて、再試行と適用の方法に関するこちらのガイドに従ってください。
- Play Integrity API には、レスポンス用のテストツールが用意されています。
- デバイスの完全性の結果を確認するには、こちらの手順に沿ってください。
- Play Integrity API の使用に関するおすすめの方法については、セキュリティに関する考慮事項をご覧ください。
Automatic Integrity Protection(API >= 23)
Automatic Integrity Protection は、不正な変更や再配布という形で行われる完全性の侵害からアプリを保護する改ざん対策コード保護サービスです。データ接続がなくても動作し、テスト前のデベロッパーの作業やバックエンド サーバーの統合も必要ありません。
不正行為の軽減にどのように役立つか
Automatic Integrity Protection を有効にすると、Google Play によってアプリのコードにチェックが追加され、高度な難読化やリバース エンジニアリング対策の手法によってチェックの削除が困難になります。この保護機能は、実行時にアプリが改ざんまたは再配布されたかどうかを確認します。
- インストーラ チェックに失敗した場合、Google Play でアプリを入手するよう求めるメッセージがユーザーに表示されます。
- 改変チェックに失敗した場合、アプリは実行されません。
これにより、アプリの改変版からユーザーを保護できます。
実装
現時点では、Automatic Integrity Protection は一部の Play パートナーのみご利用いただけます。お使いの Google Play Console でこの機能を使用できず、利用を希望される場合は、Google Play デベロッパー サポートにお問い合わせください。
保護は、リリースの作成時に有効にするか、[アプリの完全性] ページ([リリース] > [アプリの完全性])で有効にできます。Automatic Integrity Protection では、アプリで Play アプリ署名を使用する必要があります。
製品版にリリースをプロモートする前に、保護されたアプリを必ずテストしてください。
注意点
- アプリの保護されていないバージョンをリリースしない
- 改ざん対策を組み合わせる際は注意する
- 保護されたアプリを製品版としてリリースする前にテストする
- クラッシュが増加していないか、通常どおり統計情報をモニタリングします。
- アプリのクラッキングされたバージョンを Google Play に報告できます