Indicadores de confianza cero

Android proporciona una variedad de indicadores de dispositivos 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 debería tener acceso información corporativa.

Función Descripción Dispositivos completamente administrados Perfil de trabajo en dispositivos empresariales Perfil de trabajo en dispositivos personales (BYOD) Dispositivos no administrados
Reproducir API de Integrity Una confianza corredor 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
  • Seguridad Hardware presente / Certificación de claves Un agente de confianza puede verificar que se generaron sus credenciales de PKI y se almacenan en hardware seguro
    Certificación de propiedades del dispositivo Como parte de la certificación de claves, las propiedades del dispositivo se pueden incluir del registro de certificación
    Dispositivo Nivel del parche de seguridad Un agente de confianza puede validar el nivel de parche de seguridad del SO
    Hace 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 principal Un agente de confianza puede leer el nivel de parche de seguridad del tren de línea principal instalado.
    Inscripción ID específico Un agente de confianza puede acceder a un ID de dispositivo único y específico . Este ID sobrevive a la recreación del perfil de trabajo y al restablecimiento de la configuración de fábrica del dispositivo. N/A
    Management State (y administración de la app) Un agente de confianza puede usar esto para determinar si un dispositivo está administrado N/A
    Disco encriptación 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 la supera una versión determinada
    Accede al estado de la red (estado de la 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 las 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 predeterminada actual del proxy HTTP.
    Pantalla control de calidad de la cerradura Un agente de confianza puede asegurarse de que un dispositivo tenga un bloqueo de pantalla de determinada calidad antes de otorgar el acceso
    Desarrollador opciones habilitadas Un agente de confianza puede identificar un dispositivo como que tiene una superficie de ataque más amplia cuando están habilitadas las opciones para desarrolladores.
    ¿Está habilitado el DNS a través de TLS? Un agente de confianza puede aprovechar esto para asegurarse de que el DNS privado está habilitado el modo
    SafetyNet Navegación segura Un agente de confianza puede determinar si Google clasificó una URL específica como una amenaza conocida.
    Uso externo montado en medios 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
    Seguridad registro Un agente de confianza puede aprovechar estos datos como parte de su para garantizar el cumplimiento y crear una huella digital basada en el comportamiento 2 2 N/A
    Red registro 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 una app en un período determinado intervalo 2 1
    Paquete Visibilidad (Enumera todas las apps en el dispositivo) Un agente de confianza puede consultar qué apps están instaladas en el dispositivo. 3 3
    Cómo leer el estado del teléfono Un agente de confianza puede obtener información de redes móviles, el estado de cualquier llamadas y una lista de PhoneAccount registrados 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 los cambios significativos en el nivel de batería Un agente de confianza puede supervisar cambios significativos en el nivel de batería.
    Ubicación (Fino, grueso, 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 en 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 desde allí el 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 cadena que se muestra en un objeto Date con el 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, para Android 11 y versiones posteriores, debes agregar una declaración de consulta en el archivo AndroidManifest.xml para satisfacer la visibilidad de paquetes 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á bajo administración y qué modo de administración está activo.

    Cómo verificar la administración de dispositivos

    Usa getActiveAdmins() para comprobar si se administra un dispositivo. Si esta El método muestra null, significa que el dispositivo no está administrado.

    Cómo verificar si un dispositivo está completamente administrado

    Usa isDeviceOwnerApp() para verificar si el dispositivo está completamente administrado.

    Cómo verificar si hay un perfil de trabajo en un dispositivo de la empresa

    Usa isOrganizationOwnedDeviceWithManagedProfile() para verificar si un dispositivo está usando un modo de administración del perfil de trabajo para dispositivos empresariales

    Cómo verificar el perfil de trabajo en un dispositivo de propiedad personal

    Usa isProfileOwnerApp() para verificar si una app se ejecuta dentro de un entorno de trabajo. y verifica que isOrganizationOwnedDeviceWithManagedProfile() devuelva false