Android には、管理者がデバイスのセキュリティ対策を判断するために使用できる、さまざまなデバイス シグナルが用意されています。ゼロトラスト セキュリティ モデルでは、これらのシグナルを使用して、デバイスに企業情報へのアクセスを許可すべきかどうかを判断します。
特徴 | 説明 | 完全管理対象デバイス | 会社所有デバイスの仕事用プロファイル | 個人所有デバイス(BYOD)の仕事用プロファイル | 管理対象外デバイス |
---|---|---|---|---|---|
Play Integrity API | トラスト ブローカーは、次のシグナルを取得できます。 |
はい | はい | はい | はい |
セキュア ハードウェア表示 / キー構成証明 | トラスト ブローカーは、PKI 認証情報が生成され、安全なハードウェアに保存されていることを確認できます。 | はい | はい | はい | はい |
デバイス プロパティの証明書 | キー構成証明の一部として、デバイス プロパティを構成証明レコードの一部として含めることができます。 | はい | はい | はい | はい |
デバイスのセキュリティ パッチレベル | トラスト ブローカーで OS のセキュリティ パッチレベルを検証できます | はい | はい | はい | はい |
デバイスに保留中の OTA アップデートはありますか? | トラスト ブローカーは、保留中のデバイスの OS アップデートが利用可能であるかどうかを確認できます。 | はい | はい | はい | なし |
Mainline セキュリティ パッチレベル | トラスト ブローカーは、インストールされているメインライン トレインのセキュリティ パッチレベルを読み取ることができます。 | はい | はい | はい | はい |
登録固有の ID | 信頼ブローカーは、その企業に固有の一意のデバイス ID にアクセスできます。この ID は、仕事用プロファイルの再作成やデバイスを出荷時の設定にリセットしても保持されます。 | はい | はい | はい | なし |
管理の状態(およびアプリを管理する) | トラスト ブローカーはこれを使用して、デバイスが管理対象かどうかを判断できます | はい | はい | はい | なし |
ディスク暗号化 | トラスト ブローカーは、デバイスが暗号化されているかどうかを確認できます(Android 8 のサポートが必要な場合)。 | はい | はい | はい | はい |
OS バージョン | トラスト ブローカーは、デバイスの OS バージョンをチェックして、特定のバージョンを超えたことを確認できます。 | はい | はい | はい | はい |
アクセス ネットワーク状態(ネットワーク状態と Wi-Fi 状態) | トラスト ブローカーは、アクティブなネットワークの状態(モバイルと Wi-Fi)に関する情報を取得できます。 | はい | はい | はい | はい |
Wi-Fi 状態にアクセスする(Android 11 以前。Android 12 以降では、コールバックとオンデマンド アプローチの両方をサポート) | トラスト ブローカーはアクティブな Wi-Fi ネットワークに関する情報を取得できます | はい | はい | はい | はい |
プロキシ設定 | トラスト ブローカーは、現在のデフォルトの HTTP プロキシ設定に関する情報を取得できます。 | はい | はい | はい | はい |
画面ロックの品質チェック | トラスト ブローカーは、アクセス権を付与する前に、デバイスに特定の品質の画面ロックが設定されていることを確認できます。 | はい | はい | はい | はい |
開発者向けオプションが有効になっている | 開発者向けオプションが有効になっている場合、トラスト ブローカーは、デバイスをより広範な攻撃対象領域として識別できます。 | はい | はい | はい | はい |
DNS over TLS が有効か | トラスト ブローカーはこれを利用して、プライベート DNS モードを有効にすることができます。 | はい | はい | はい | はい |
SafetyNet セーフ ブラウジング | トラスト ブローカーは、特定の URL が Google によって既知の脅威に分類されているかどうかを判断できます。 | はい | はい | はい | はい |
外部メディアマウント | 外部ストレージがマウントされると、トラスト ブローカーに通知できます。 | はい | はい | はい | はい |
UsageStatsManager | トラスト ブローカーは個々のアプリの使用パターンを調査できる | はい | はい | はい | ○1 |
セキュリティ ロギング | トラスト ブローカーは、このデータをコンテキスト エンジンの一部として利用して、コンプライアンスを確保し、動作ベースのフィンガープリントを作成できます。 | はい | ○2 | ○2 | なし |
ネットワーク ロギング | トラスト ブローカーは、このデータをコンテキスト エンジンの一部として利用して、コンプライアンスを確保し、動作ベースのフィンガープリントを作成できます。 | はい | ○2 | ○2 | なし |
NetworkStatsManager | トラスト ブローカーは、特定の期間内のアプリのネットワーク使用状況をクエリできます。 | はい | はい | ○2 | ○1 |
パッケージの公開設定(デバイス上のすべてのアプリを一覧表示する) | トラスト ブローカーは、デバイスにインストールされているアプリを照会できる | はい | ○3 | ○3 | はい |
スマートフォンのステータスの読み取り | トラスト ブローカーは、モバイル ネットワーク情報、進行中の通話のステータス、デバイスに登録されている PhoneAccount のリストを取得できます。 | はい | はい | はい | はい |
デバイスの前回の再起動日時 | トラスト ブローカーはシステムの稼働時間を取得できます。 | はい | はい | はい | はい |
アカウントを取得する | トラスト ブローカーはこれを利用して、アカウント サービスのアカウントのリストにアクセスできます。 | はい | ○3 | ○3 | ○1 |
バッテリー残量の大きな変化をモニタリングする | トラスト ブローカーはバッテリー レベルの大きな変化を監視できる | はい | はい | はい | はい |
ロケーション(きめが細かい、粗いなど) | 信頼ブローカーはデバイスの物理的な場所にアクセスできます | はい | はい | ○1 | ○1 |
1 ユーザーの同意がある場合
2 仕事用プロファイルのみ
3 アクセスできるのは仕事用プロファイルの情報のみ
Mainline のバージョンを取得する
トラスト ブローカーは、com.google.android.modulemetadata
モジュールの PackageInfo にアクセスし、そこから versionName
を取得できます。
private fun mainlineVersion(context: Context): String? {
val moduleProvider = "com.google.android.modulemetadata"
return try {
val pm = context.packageManager
val packageInfo = pm.getPackageInfo(moduleProvider, 0)
packageInfo.versionName
} catch (e: PackageManager.NameNotFoundException) {
null
}
}
SimpleDateFormat
クラスを使用して、返された文字列を解析して Date
オブジェクトに変換できます。
private val VERSION_NAME_DATE_PATTERNS = Arrays.asList(
"yyyy-MM-dd",
"yyyy-MM"
)
private fun parseDateFromVersionName(text: String): Date? {
for (pattern in VERSION_NAME_DATE_PATTERNS) {
try {
val simpleDateFormat = SimpleDateFormat(
pattern,
Locale.getDefault()
)
simpleDateFormat.timeZone = TimeZone.getDefault()
return simpleDateFormat.parse(text)
} catch (e: ParseException) {
// ignore and try next pattern
}
}
return null
}
Android 11 以降では、Android のパッケージの公開設定を満たすために、AndroidManifest.xml
ファイルにクエリ宣言を追加する必要があります。
<manifest package="com.example.game"> <queries> <package android:name="com.google.android.modulemetadata" /> </queries> ... </manifest>
管理状態を取得する
トラスト ブローカーは、これらのメソッドを使用して、デバイスが管理モードかどうか、どの管理モードが有効になっているかを確認できます。
デバイス管理を確認する
デバイスが管理対象かどうかを確認するには、getActiveAdmins() を使用します。このメソッドが null
を返した場合、デバイスは管理対象外です。
完全管理対象デバイスかどうかを確認する
isDeviceOwnerApp()
を使用して、デバイスが完全管理対象かどうかを確認します。
会社所有デバイスの仕事用プロファイルを確認する
isOrganizationOwnedDeviceWithManagedProfile()
を使用して、デバイスが会社所有デバイスの仕事用プロファイル管理モードを使用しているかどうかを確認します。
個人所有デバイスの仕事用プロファイルを確認する
isProfileOwnerApp() を使用して、デバイスに仕事用プロファイルがあるかどうかを確認し、isOrganizationOwnedDeviceWithManagedProfile()
が false
を返すことを確認します。