環境を保護する

Google は、アプリが安全で信頼できる環境で実行されているかどうかを検出するのに役立つ一連の API とサービスを提供しています。中心となるのは Play Integrity API です。この API は、リスクが潜んでいる可能性のある不正な操作を検出することで、操作が真正なものであるかどうかを確認するのに役立ちます。Play Integrity API では、アプリとデバイスの完全性に加えて、アクセスとアクセシビリティのリスクGoogle Play プロテクトデバイスの最近のアクティビティに関する情報も提供されるようになりました。不正対策をさらに強化するために、Android プラットフォームでは、アプリに関連する可能性のある特定のシナリオに対応した API を提供しています。

Play Integrity API

Play Integrity API の機能

Play Integrity API を使用すると、アプリが実行されているデバイスのセキュリティ状態を確認できます。これにより、適切なユーザーが機密情報にアクセスしていることを確認できます。

信頼できる環境で、操作やサーバー リクエストが正規のアプリバイナリから送信されたものかどうかを確認できます。

  • 正規のアプリバイナリ: Google Play で認識されている、改変されていないバイナリとやり取りしているかどうかを判断します。
  • 正規の Play インストール: 現在のユーザー アカウントにライセンスが付与されているかどうか(つまりユーザーが Google Play でアプリまたはゲームのインストールや支払いを行ったかどうか)を判断します。
  • 真正な Android デバイス: Google Play 開発者サービスを搭載した真正な Android デバイスでアプリが実行されているかどうかを判断します。
  • 既知のマルウェアが含まれていない: Google Play プロテクトがオンになっているか、危険なアプリのインストールがデバイスで検出されたかを判断します。
  • 他のアプリによるアクセス リスクが低い: 画面をキャプチャしたり、デバイスやアプリへの入力を制御したりする可能性のあるアプリが他に実行されているかどうかを判断します。

不正行為の軽減にどのように役立つか

ユーザーがアプリで重要な操作を行うと、Play Integrity API を呼び出すことができます。そうでない場合、アプリのバックエンド サーバーは、攻撃や詐欺への対処方法を決定できます。たとえば、ユーザーの追加確認を要求したり、機密性の高い機能へのアクセスを拒否したりできます。

Play Integrity API の判定フロー

アプリアクセスのリスク

アプリアクセス リスク シグナルは、アプリの実行時にデバイス上の他のアプリが画面を参照してキャプチャしたり、ユーザー補助権限を使用してアプリにアクセスしたりする可能性があるかどうかを評価するのに役立つように導入されました。検証済みのユーザー補助アプリは、これらの判定結果から自動的に除外されます。リクエスト元アプリはインストール済みのアプリを識別することがなく、判定結果はユーザー 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 プロテクトをオンにするか、先に有害なアプリを削除することを求めることができます。

Play プロテクトを有効にするダイアログ

playProtectVerdict の値は次のいずれかになります。

判定結果 説明 推奨される対応

NO_ISSUES

Play プロテクトはオンになっていますが、デバイスにおいてアプリの問題は検知されませんでした。

Play プロテクトがオンになっていて、問題は検出されていないため、ユーザーの操作は必要ありません。

NO_DATA

Play プロテクトはオンになっていますが、まだスキャンが実行されていません。デバイスまたは Google Play ストア アプリが最近リセットされた可能性があります。

Play プロテクトがオンになっていて、問題は検出されていないため、ユーザーの操作は必要ありません。

POSSIBLE_RISK

Play プロテクトがオフになっています。

Play プロテクトがオンになっていて、問題は検出されていないため、ユーザーの操作は必要ありません。

MEDIUM_RISK

Play プロテクトがオンになっており、有害な可能性があるアプリがデバイスにインストールされていることが検知されました。

リスク許容度に応じて、Play プロテクトを起動し、Play プロテクトの警告に対応するようユーザーに依頼できます。ユーザーがこれらの要件を満たすことができない場合は、サーバー アクションからブロックできます。

HIGH_RISK

Play プロテクトがオンになっており、危険なアプリがデバイスにインストールされていることが検知されました。

リスク許容度に応じて、Play プロテクトを起動し、Play プロテクトの警告に対応するようユーザーに依頼できます。ユーザーがこれらの要件を満たすことができない場合は、サーバー アクションからブロックできます。

UNEVALUATED

Play プロテクトの判定結果は評価されませんでした。

次のような原因が考えられます。

  • デバイスの信頼性が十分でない。
  • ゲームのみ: ユーザー アカウントが LICENSED ではない。

最近のデバイスのアクティビティ

最近のデバイスのアクティビティをオプトインすることもできます。これにより、過去 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 つの部分で構成されます。

  • 完全性トークン プロバイダを準備する(1 回限り)
  • 完全性トークンをリクエストする(オンデマンド)

オンデマンドで使用する

標準リクエストとクラシック リクエストについて詳しくは、Play Integrity のドキュメントをご覧ください。

実装

Play Integrity API を使用するには:

デフォルトでは、Play Integrity API はアプリごとに 1 日あたり最大 1 万件のリクエストを許可します。1 日あたりの最大リクエスト数の引き上げをご希望の場合は、こちらの手順に沿ってご対応ください。リクエストの 1 日あたりの上限を引き上げるには、アプリで Play Integrity API が正しく実装されており、他の配信チャネルに加えて Google Play でもアプリが利用できる必要があります。

Play Integrity API に関する注意事項

Automatic Integrity Protection(API >= 23)

Automatic Integrity Protection は、不正な改変や再配布という形で行われる完全性の侵害からアプリを保護する改ざん対策コード保護サービスです。データ接続がなくても機能し、テスト前のデベロッパーの作業やバックエンド サーバーとの統合は不要です。

不正行為の軽減にどのように役立つか

Automatic Integrity Protection を有効にすると、Google Play はアプリのコードにチェックを追加し、高度な難読化とリバース エンジニアリング対策の手法を使用して、これらのチェックを削除しにくくします。実行時に、保護機能はアプリが改ざんまたは再配布されたかどうかを確認します。

  • インストーラ チェックに失敗した場合、Google Play でアプリを入手するよう求めるメッセージがユーザーに表示されます。
  • 改変チェックに失敗した場合、アプリは実行されません

これにより、改変されたバージョンのアプリからユーザーを守ることができます。

実装

現時点では、Automatic Integrity Protection を利用できるのは一部の Google Play パートナーのみです。Google Play Console でこの機能が利用できない場合で、アクセスを希望される場合は、Google Play デベロッパー サポートにお問い合わせください。

自動保護は、リリースの作成時に有効にするか、[Google Play による保護] ページで有効にすることができます。Automatic Integrity Protection を使用するには、アプリで Google Play アプリ署名を使用する必要があります。

リリースを本番環境に昇格させる前に、保護されたアプリを必ずテストしてください

注意点

  • アプリの保護されていないバージョンを公開しない
  • 改ざん対策を組み合わせる際は注意する
  • 保護されたアプリを製品版としてリリースする前にテストする
  • クラッシュの増加がないか、通常どおりに統計情報をモニタリングする
  • アプリのクラッキングされたバージョンを Google Play に報告できます