Android 提供多種裝置信號,可供管理員用來判斷裝置的安全防護機制。在零信任安全性模型中,這些信號可用於評估裝置是否應獲准存取公司資訊。
功能 | 說明 | 全代管裝置 | 公司擁有裝置上的工作資料夾 | 個人裝置上的工作資料夾 (自攜裝置) | 未管理的裝置 |
---|---|---|---|---|---|
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 網路的相關資訊 | 是 | 是 | 是 | 是 |
Proxy 設定 | 信任代管服務可取得目前預設 HTTP Proxy 設定的相關資訊。 | 是 | 是 | 是 | 是 |
螢幕鎖定品質檢查 | 信任代管服務可確保裝置在授予存取權之前,已設定特定品質的螢幕鎖定 | 是 | 是 | 是 | 是 |
已啟用開發人員選項 | 信任中介服務可在啟用開發人員選項時,將裝置視為具有更廣泛的攻擊途徑 | 是 | 是 | 是 | 是 |
是 已啟用 DNS over TLS 功能 | 信任代理程式可運用這項功能確保私人 DNS 模式已啟用 | 是 | 是 | 是 | 是 |
SafetyNet 安全瀏覽 | 信任中介服務可判斷 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
}
}
您可以使用Date
SimpleDateFormat
類別:
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 以上版本,您必須在 AndroidManifest.xml
檔案中新增查詢宣告,才能滿足 Android 的套件瀏覽權限:
<manifest package="com.example.game"> <queries> <package android:name="com.google.android.modulemetadata" /> </queries> ... </manifest>
擷取管理狀態
信任代理程式可以使用這些方法驗證裝置是否受到管理 模式以及已啟用的管理模式。
檢查裝置管理服務
使用 getActiveAdmins() 檢查裝置是否正在管理。如果這是
方法會傳回 null
,表示裝置未受管。
檢查是否為全代管裝置
使用 isDeviceOwnerApp()
檢查裝置是否為全代管裝置。
檢查公司裝置上的工作資料夾
使用 isOrganizationOwnedDeviceWithManagedProfile()
檢查裝置
使用公司裝置專用的工作資料夾管理模式
查看個人裝置上的工作資料夾
使用 isProfileOwnerApp()
檢查應用程式是否在工作設定檔中執行,並驗證 isOrganizationOwnedDeviceWithManagedProfile()
是否傳回 false
。