Android fornisce una serie di indicatori dei dispositivi che gli amministratori possono utilizzare per determinare la strategia di sicurezza di un dispositivo. In un modello di sicurezza Zero Trust, questi indicatori vengono utilizzati per valutare se un dispositivo deve essere autorizzato ad accedere alle informazioni aziendali.
Funzionalità | Descrizione | Dispositivi completamente gestiti | Profilo di lavoro sui dispositivi di proprietà dell'azienda | Profilo di lavoro su dispositivi di proprietà personale (BYOD) | Dispositivi non gestiti |
---|---|---|---|---|---|
API Play Integrity | Un broker di annunci può recuperare i seguenti indicatori:
|
Sì | Sì | Sì | Sì |
Hardware sicuro presente / Attestazione della chiave | Un broker di attendibilità può verificare che le credenziali PKI siano state generate e archiviate in hardware sicuro | Sì | Sì | Sì | Sì |
Attestazione di proprietà del dispositivo | Nell'ambito dell'attestazione delle chiavi, le proprietà del dispositivo possono essere incluse nel record di attestazione | Sì | Sì | Sì | Sì |
Livello patch di sicurezza del dispositivo | Un broker attendibile può convalidare il livello patch di sicurezza del sistema operativo | Sì | Sì | Sì | Sì |
Il dispositivo ha un aggiornamento OTA in attesa | Un intermediario di attendibilità può verificare se è disponibile un aggiornamento del sistema operativo del dispositivo in sospeso | Sì | Sì | Sì | N/D |
Livello patch di sicurezza della versione principale | Un broker attendibile può leggere il livello della patch di sicurezza per il train principale installato | Sì | Sì | Sì | Sì |
ID specifico per la registrazione | Un broker di attendibilità può accedere a un ID dispositivo univoco specifico per l'azienda. Questo ID rimane invariato dopo la ricreazione del profilo di lavoro e il ripristino dei dati di fabbrica del dispositivo. | Sì | Sì | Sì | N/D |
Stato di gestione (e app di gestione) | Un broker di attendibilità può utilizzarlo per determinare se un dispositivo è gestito | Sì | Sì | Sì | N/D |
Crittografia del disco | Un broker di attendibilità può verificare se il dispositivo è criptato (se è necessario il supporto di Android 8) | Sì | Sì | Sì | Sì |
Versione del sistema operativo | Un broker di attendibilità può controllare la versione del sistema operativo del dispositivo e confermare che supera una determinata versione | Sì | Sì | Sì | Sì |
Accedere allo stato della rete (stato della rete e stato del Wi-Fi) | Un broker di fiducia può ottenere informazioni sullo stato della rete attiva (rete mobile e Wi-Fi) | Sì | Sì | Sì | Sì |
Accedi allo stato del Wi-Fi (Android 11 e versioni precedenti, Android 12 e versioni successive supportano sia un richiamo sia un approccio on demand) | Un broker di attendibilità può ottenere informazioni sulla rete Wi-Fi attiva | Sì | Sì | Sì | Sì |
Impostazioni proxy | Un broker di attendibilità può ottenere informazioni sulle impostazioni predefinite del proxy HTTP. | Sì | Sì | Sì | Sì |
Controllo della qualità del blocco schermo | Un broker di attendibilità può assicurarsi che su un dispositivo sia configurato un blocco schermo di una determinata qualità prima di concedere l'accesso | Sì | Sì | Sì | Sì |
Opzioni sviluppatore attivate | Un broker di attendibilità può identificare un dispositivo come dotato di una superficie di attacco più ampia quando le opzioni sviluppatori sono attive | Sì | Sì | Sì | Sì |
DNS over TLS è attivo | Un broker di attendibilità può sfruttare questa funzionalità per assicurarsi che la modalità DNS privato sia abilitata | Sì | Sì | Sì | Sì |
SafetyNet Navigazione sicura | Un intermediario di attendibilità può determinare se un determinato URL è stato classificato da Google come una minaccia nota. | Sì | Sì | Sì | Sì |
Medio esterno montato | Un broker attendibilità può ricevere una notifica quando viene montato uno spazio di archiviazione esterno | Sì | Sì | Sì | Sì |
UsageStatsManager | Un broker di attendibilità può studiare i pattern di utilizzo delle singole app | Sì | Sì | Sì | Sì1 |
Logging sicurezza | Un broker di fiducia può sfruttare questi dati come parte del proprio motore contestuale per garantire la conformità e creare un'impronta basata sul comportamento | Sì | Sì2 | Sì2 | N/D |
Logging di rete | Un broker di fiducia può sfruttare questi dati come parte del proprio motore contestuale per garantire la conformità e creare un'impronta basata sul comportamento | Sì | Sì2 | Sì2 | N/D |
NetworkStatsManager | Un broker attendibile può eseguire query sull'utilizzo della rete dell'app in un determinato intervallo di tempo | Sì | Sì | Sì2 | Sì1 |
Visibilità del pacchetto (elenca tutte le app sul dispositivo) | Un broker attendibile può eseguire query sulle app installate sul dispositivo | Sì | Sì3 | Sì3 | Sì |
Leggi stato dello smartphone | Un broker di attendibilità può ottenere informazioni sulla rete mobile, lo stato di eventuali chiamate in corso e un elenco di PhoneAccount registrati sul dispositivo | Sì | Sì | Sì | Sì |
Data dell'ultimo riavvio del dispositivo | Un broker di trust può ottenere l'uptime del sistema | Sì | Sì | Sì | Sì |
Ricevi account | Un broker di attendibilità può sfruttare questa funzionalità per accedere all'elenco di account nel servizio Account | Sì | Sì3 | Sì3 | Sì1 |
Monitorare le variazioni significative del livello della batteria | Un broker di trust può monitorare variazioni significative del livello della batteria | Sì | Sì | Sì | Sì |
Posizione (Fine, Coarse e così via) | Un broker attendibile può accedere alla posizione fisica del dispositivo | Sì | Sì | Sì1 | Sì1 |
1 Con il consenso dell'utente
2 Solo profilo di lavoro
3 Accesso limitato alle informazioni del profilo di lavoro
Recupera la versione Mainline
Un broker di attendibilità può accedere a PackageInfo per il modulo com.google.android.modulemetadata
e recuperare da lì 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
}
}
Puoi analizzare la stringa restituita in un oggetto Date
utilizzando la classe
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
}
Ricorda che per Android 11 e versioni successive devi aggiungere una dichiarazione di query nel
file AndroidManifest.xml
per soddisfare la visibilità del pacchetto di Android:
<manifest package="com.example.game"> <queries> <package android:name="com.google.android.modulemetadata" /> </queries> ... </manifest>
Recuperare lo stato di gestione
Un broker di attendibilità può utilizzare questi metodi per verificare se un dispositivo è in modalità di gestione e quale modalità di gestione è attiva.
Verificare la gestione dei dispositivi
Utilizza getActiveAdmins() per verificare se un dispositivo è gestito. Se questo metodo restituisce null
, il dispositivo non è gestito.
Verificare la presenza di un dispositivo completamente gestito
Utilizza isDeviceOwnerApp()
per verificare se il dispositivo è completamente gestito.
Verificare la presenza del profilo di lavoro su un dispositivo di proprietà dell'azienda
Utilizza isOrganizationOwnedDeviceWithManagedProfile()
per controllare se un dispositivo utilizza una modalità di gestione del profilo di lavoro per i dispositivi di proprietà dell'azienda
Verificare la presenza del profilo di lavoro su un dispositivo di proprietà personale
Utilizza isProfileOwnerApp()
per verificare se un'app è in esecuzione in un profilo di lavoro e verifica che isOrganizationOwnedDeviceWithManagedProfile()
restituisca false
.