Android proporciona una variedad de indicadores del dispositivo que los administradores pueden usar para determinar la postura de seguridad de un dispositivo. En un modelo de seguridad de confianza cero, estos indicadores se usan para evaluar si un dispositivo puede acceder a información corporativa.
Función | Descripción | Dispositivos completamente administrados | Perfil de trabajo en dispositivos de la empresa | Perfil de trabajo en dispositivos personales (BYOD) | Dispositivos no administrados |
---|---|---|---|---|---|
API de Play Integrity | Un agente de confianza puede recuperar los siguientes indicadores: |
Sí | Sí | Sí | Sí |
Hardware seguro presente / certificación de claves | Un agente de confianza puede verificar que sus credenciales de PKI se generaron y almacenaron en hardware seguro. | Sí | Sí | Sí | Sí |
Certificación de propiedades del dispositivo | Como parte de la certificación de claves, las propiedades del dispositivo se pueden incluir como parte del registro de certificación. | Sí | Sí | Sí | Sí |
Nivel del parche de seguridad del dispositivo | Un agente de confianza puede validar el nivel de parche de seguridad del SO | Sí | Sí | Sí | Sí |
¿El dispositivo tiene actualizaciones inalámbricas pendientes | Un agente de confianza puede verificar si hay una actualización pendiente del SO del dispositivo disponible. | Sí | Sí | Sí | N/A |
Nivel del parche de seguridad de la línea principal | Un agente de confianza puede leer el nivel de parche de seguridad para el tren de línea principal instalado. | Sí | Sí | Sí | Sí |
ID específico de inscripción | Un agente de confianza puede acceder a un ID de dispositivo único específico para esa empresa. Este ID se conserva después de la recreación del perfil de trabajo y del restablecimiento de la configuración de fábrica del dispositivo | Sí | Sí | Sí | N/A |
Estado de administración (y app administrada) | Un agente de confianza puede usar esta información para determinar si un dispositivo está administrado | Sí | Sí | Sí | N/A |
Encriptación de disco | Un agente de confianza puede verificar si el dispositivo está encriptado (si se necesita compatibilidad con Android 8) | Sí | Sí | Sí | Sí |
Versión del SO | Un agente de confianza puede verificar la versión del SO del dispositivo y confirmar que supera cierta versión. | Sí | Sí | Sí | Sí |
Estado de la red (estado de red y estado de Wi-Fi) | Un agente de confianza puede obtener información sobre el estado de la red activa (datos móviles y Wi-Fi). | Sí | Sí | Sí | Sí |
Acceder al estado de Wi-Fi (Android 11 y versiones anteriores, Android 12 y versiones posteriores admiten una devolución de llamada o un enfoque a pedido) | Un agente de confianza puede obtener información sobre la red Wi-Fi activa | Sí | Sí | Sí | Sí |
Configuración de proxy | Un agente de confianza puede obtener información sobre la configuración actual del proxy HTTP predeterminada. | Sí | Sí | Sí | Sí |
Verificación de calidad del bloqueo de pantalla | Un agente de confianza puede asegurarse de que un dispositivo tenga configurado un bloqueo de pantalla de cierta calidad antes de otorgar acceso. | Sí | Sí | Sí | Sí |
Opciones para desarrolladores habilitadas | Un agente de confianza puede identificar que un dispositivo tiene una superficie de ataque más amplia cuando se habilitan las opciones para desarrolladores | Sí | Sí | Sí | Sí |
¿El DNS por TLS está habilitado? | Un agente de confianza puede aprovechar esto para asegurarse de que el modo de DNS privado esté habilitado. | Sí | Sí | Sí | Sí |
Navegación segura de SafetyNet | Un agente de confianza puede determinar si Google clasificó una URL específica como una amenaza conocida. | Sí | Sí | Sí | Sí |
Externa mediante soportes multimedia | Se puede notificar a un agente de confianza cuando se activa un almacenamiento externo. | Sí | Sí | Sí | Sí |
UsageStatsManager | Un agente de confianza puede estudiar los patrones de uso de apps individuales | Sí | Sí | Sí | Sí1 |
Registro de seguridad | Un agente de confianza puede aprovechar estos datos como parte de su motor contextual para garantizar el cumplimiento y crear una huella digital basada en el comportamiento. | Sí | Sí2 | Sí2 | N/A |
Registro de red | Un agente de confianza puede aprovechar estos datos como parte de su motor contextual para garantizar el cumplimiento y crear una huella digital basada en el comportamiento. | Sí | Sí2 | Sí2 | N/A |
NetworkStatsManager | Un agente de confianza puede consultar el uso de red de la app en un intervalo de tiempo determinado. | Sí | Sí | Sí2 | Sí1 |
Visibilidad del paquete (Enumerar todas las apps en el dispositivo) | Un agente de confianza puede consultar qué apps están instaladas en el dispositivo | Sí | Sí3 | Sí3 | Sí |
Lee el estado del teléfono | Un agente de confianza puede obtener información de la red móvil, el estado de las llamadas en curso y una lista de PhoneAccount registradas en el dispositivo. | Sí | Sí | Sí | Sí |
Cuándo se reinició el dispositivo por última vez | Un agente de confianza puede obtener el tiempo de actividad del sistema | Sí | Sí | Sí | Sí |
Obtener cuentas | Un agente de confianza puede aprovechar esto para acceder a la lista de cuentas en el servicio de cuentas | Sí | Sí3 | Sí3 | Sí1 |
Cómo supervisar cambios significativos en el nivel de batería | Un agente de confianza puede supervisar cambios significativos en el nivel de batería | Sí | Sí | Sí | Sí |
Ubicación (Fin, gruesa, etcétera) | Un agente de confianza puede acceder a la ubicación física del dispositivo | Sí | Sí | Sí1 | Sí1 |
1 Con el consentimiento del usuario
2 Solo el perfil de trabajo
3 Acceso limitado a la información del perfil de trabajo
Recupera la versión de línea principal
Un agente de confianza puede acceder a PackageInfo para el módulo com.google.android.modulemetadata
y recuperar 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
}
}
Puedes analizar la string que se muestra en un objeto Date
mediante la clase 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
}
Recuerda que, en Android 11 y versiones posteriores, debes agregar una declaración de consulta en tu archivo AndroidManifest.xml
para cumplir con la visibilidad del paquete de Android:
<manifest package="com.example.game"> <queries> <package android:name="com.google.android.modulemetadata" /> </queries> ... </manifest>
Recupera el estado de administración
Un agente de confianza puede usar estos métodos para verificar si un dispositivo está en modo de administración y qué modo de administración está activo.
Comprueba la administración de dispositivos
Usa getActiveAdmins() para comprobar si un dispositivo está bajo administración. Si este método devuelve null
, el dispositivo no está administrado.
Cómo comprobar si hay un dispositivo completamente administrado
Usa isDeviceOwnerApp()
para comprobar si el dispositivo está completamente administrado.
Cómo buscar un perfil de trabajo en un dispositivo empresarial
Usa isOrganizationOwnedDeviceWithManagedProfile()
para comprobar si un dispositivo usa un modo de administración de perfiles de trabajo para dispositivos empresariales.
Cómo buscar un perfil de trabajo en un dispositivo personal
Usa isProfileOwnerApp() para comprobar si un dispositivo tiene un perfil de trabajo y verifica que isOrganizationOwnedDeviceWithManagedProfile()
muestre false
.