Indicadores de confianza cero

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:
  • Integridad del dispositivo
  • Integridad de la app
  • Detalles de la licencia de Play
  • Detalles del entorno, incluido el nuevo veredicto de Play Protect
  • 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.
    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.
    Nivel del parche de seguridad del dispositivo Un agente de confianza puede validar el nivel de parche de seguridad del SO
    ¿El dispositivo tiene actualizaciones inalámbricas pendientes Un agente de confianza puede verificar si hay una actualización pendiente del SO del dispositivo disponible. 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.
    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 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 N/A
    Encriptación de disco Un agente de confianza puede verificar si el dispositivo está encriptado (si se necesita compatibilidad con Android 8)
    Versión del SO Un agente de confianza puede verificar la versión del SO del dispositivo y confirmar que supera cierta versión.
    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).
    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
    Configuración de proxy Un agente de confianza puede obtener información sobre la configuración actual del proxy HTTP predeterminada.
    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.
    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
    ¿El DNS por TLS está habilitado? Un agente de confianza puede aprovechar esto para asegurarse de que el modo de DNS privado esté habilitado.
    Navegación segura de SafetyNet Un agente de confianza puede determinar si Google clasificó una URL específica como una amenaza conocida.
    Externa mediante soportes multimedia Se puede notificar a un agente de confianza cuando se activa un almacenamiento externo.
    UsageStatsManager Un agente de confianza puede estudiar los patrones de uso de apps individuales 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. 2 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. 2 2 N/A
    NetworkStatsManager Un agente de confianza puede consultar el uso de red de la app en un intervalo de tiempo determinado. 2 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 3 3
    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.
    Cuándo se reinició el dispositivo por última vez Un agente de confianza puede obtener el tiempo de actividad del sistema
    Obtener cuentas Un agente de confianza puede aprovechar esto para acceder a la lista de cuentas en el servicio de cuentas 3 3 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
    Ubicación (Fin, gruesa, etcétera) Un agente de confianza puede acceder a la ubicación física del dispositivo 1 1

    1 Con el consentimiento del usuario

    2 Solo el perfil de trabajo

    3 Acceso limitado a la información del perfil de trabajo

    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>
    

    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.