Android では、管理者がさまざまなデバイス シグナルを使用して、 デバイスのセキュリティ対策を判断します。ゼロトラスト セキュリティ モデルでは、これらのシグナルを使用して、デバイスに企業情報へのアクセスを許可するかどうかを評価します。
機能 | 説明 | 完全管理対象デバイス | 会社所有デバイスの仕事用プロファイル | 個人所有デバイス(BYOD)の仕事用プロファイル | 管理対象外のデバイス |
---|---|---|---|---|---|
プレイ Integrity API | 信頼
ブローカーは、次のシグナルを取得できます。
<ph type="x-smartling-placeholder"> |
○ | ○ | ○ | ○ |
安全なハードウェアの存在 / キーの証明書 | トラスト ブローカーは、PKI 認証情報が生成され、安全なハードウェアに保存されていることを確認できます。 | ○ | ○ | ○ | ○ |
デバイス プロパティの証明 | キー構成証明の一部として、デバイス プロパティをキー構成証明の一部として 構成証明レコードの | ○ | ○ | ○ | ○ |
デバイスのセキュリティ パッチレベル | 信頼ブローカーは OS セキュリティ パッチレベルを検証できます | ○ | ○ | ○ | ○ |
デバイスに保留中の OTA があるか | 信頼ブローカーは、保留中のデバイス OS アップデートがあるかどうかを確認できます。 | ○ | ○ | ○ | なし |
Mainline セキュリティ パッチレベル | 信頼ブローカーは、インストールされている Mainline トレインのセキュリティ パッチレベルを読み取ることができます。 | ○ | ○ | ○ | ○ |
登録固有の ID | トラスト ブローカーは、そのデバイス固有のデバイス ID にアクセスできます。 できます。この ID は仕事用プロファイルの再作成やデバイス ファクトリーの後も保持されます リセット | ○ | ○ | ○ | なし |
管理状態(およびアプリの管理) | トラスト ブローカーはこの情報を使用して、デバイスが管理対象かどうかを判断できます。 | ○ | ○ | ○ | なし |
ディスク暗号化 | デバイスが暗号化されているかどうかをトラスト ブローカーでチェックできる(Android 8 のサポートが必要な場合) | ○ | ○ | ○ | ○ |
OS バージョン | トラスト ブローカーは、デバイスの OS バージョンをチェックし、バージョンを上回っていることを確認できます。 特定のバージョンを | ○ | ○ | ○ | ○ |
アクセス ネットワークの状態(ネットワークの状態と Wi-Fi の状態) | 信頼ブローカーは、アクティブなネットワークの状態(モバイルと Wi-Fi)に関する情報を取得できます。 | ○ | ○ | ○ | ○ |
Wi-Fi の状態へのアクセス(Android Android 11 以前、Android 12 以降ではコールバックとオンデマンド アプローチの両方をサポートしています)。 | 信頼ブローカーは、アクティブな Wi-Fi ネットワークに関する情報を取得できます | ○ | ○ | ○ | ○ |
プロキシ設定 | トラスト ブローカーは、現在のデフォルトの HTTP できます。 | ○ | ○ | ○ | ○ |
画面ロックの品質チェック | 信頼ブローカーは、アクセスを許可する前に、デバイスに一定の品質の画面ロックが設定されていることを確認できます。 | ○ | ○ | ○ | ○ |
開発者向けオプションが有効になっている | 開発者向けオプションが有効になっているデバイスは、攻撃対象領域が広いデバイスとして信頼ブローカーによって識別される | ○ | ○ | ○ | ○ |
次に一致 DNS over TLS が有効 | 信頼ブローカーは、これを利用してプライベート DNS モードが有効になっていることを確認できます。 | ○ | ○ | ○ | ○ |
SafetyNet セーフ ブラウジング | トラスト ブローカーは、特定の URL が 既知の脅威に分類されます。 | ○ | ○ | ○ | ○ |
外部メディアがマウントされている | 外部ストレージがマウントされるとトラスト ブローカーに通知が届く | ○ | ○ | ○ | ○ |
UsageStatsManager | 信頼ブローカーは個々のアプリの使用パターンを調査できる | ○ | ○ | ○ | ○1 |
セキュリティ ロギング | トラスト ブローカーは、コンテキスト情報の一部としてこのデータを コンプライアンスを確保し、行動ベースのフィンガープリントを作成します。 | ○ | ○2 | ○2 | なし |
ネットワーク ロギング | トラスト ブローカーは、コンテキスト情報の一部としてこのデータを コンプライアンスを確保し、行動ベースのフィンガープリントを作成します。 | ○ | ○2 | ○2 | なし |
NetworkStatsManager | Trust ブローカーは、一定期間内のアプリのネットワーク使用状況をクエリできる インターバル | ○ | ○ | ○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
。