Signaux de stratégie de sécurité

Android fournit divers signaux d'appareil que les administrateurs peuvent utiliser pour déterminer la posture de sécurité d'un appareil. Dans un modèle de sécurité zéro confiance, ces signaux sont utilisés pour évaluer si un appareil doit être autorisé à accéder aux informations de l'entreprise.

Fonctionnalité Description Appareils entièrement gérés Profil professionnel sur les appareils détenus par l'entreprise Profil professionnel sur les appareils personnels (BYOD) Appareils non gérés
API Play Integrity Un broker de confiance peut récupérer les signaux suivants :
  • Intégrité de l'appareil
  • Intégrité de l'application
  • Détails de la licence Play
  • Détails de l'environnement, y compris la nouvelle évaluation Play Protect
  • Oui Oui Oui Oui
    Présence de matériel sécurisé / Attestation de clé Un courtier de confiance peut vérifier que ses identifiants PKI ont été générés et stockés sur du matériel sécurisé. Oui Oui Oui Oui
    Attestation de propriété de l'appareil Dans le cadre de l'attestation de clé, les propriétés de l'appareil peuvent être incluses dans l'enregistrement d'attestation. Oui Oui Oui Oui
    Niveau du correctif de sécurité de l'appareil Un courtier de confiance peut valider le niveau du correctif de sécurité de l'OS Oui Oui Oui Oui
    L'appareil dispose-t-il d'une mise à jour OTA en attente ? Un courtier de confiance peut vérifier si une mise à jour de l'OS de l'appareil est disponible. Oui Oui Oui N/A
    Niveau du correctif de sécurité principal Un courtier de confiance peut lire le niveau du correctif de sécurité pour le train principal installé. Oui Oui Oui Oui
    ID spécifique à l'inscription Un courtier de confiance peut accéder à un ID d'appareil unique propre à cette entreprise. Cet ID est conservé après la recréation du profil professionnel et le rétablissement de la configuration d'usine de l'appareil. Oui Oui Oui N/A
    État de gestion (et application de gestion) Un courtier de confiance peut l'utiliser pour déterminer si un appareil est géré. Oui Oui Oui N/A
    Chiffrement de disque Un courtier de confiance peut vérifier si l'appareil est chiffré (si la prise en charge d'Android 8 est nécessaire). Oui Oui Oui Oui
    Version de l'OS Un courtier de confiance peut vérifier la version du système d'exploitation de l'appareil et confirmer qu'elle dépasse une certaine version. Oui Oui Oui Oui
    Accès à l'état du réseau (état du réseau et état du Wi-Fi) Un courtier de confiance peut obtenir des informations sur l'état du réseau actif (réseau mobile et Wi-Fi). Oui Oui Oui Oui
    Accéder à l'état du Wi-Fi (Android 11 et versions antérieures, Android 12 et versions ultérieures acceptent à la fois un appel de rappel ou une approche à la demande) Un courtier de confiance peut obtenir des informations sur le réseau Wi-Fi actif. Oui Oui Oui Oui
    Paramètres du proxy Un courtier de confiance peut obtenir des informations sur les paramètres de proxy HTTP par défaut actuels. Oui Oui Oui Oui
    Vérification de la qualité du verrouillage de l'écran Un courtier de confiance peut s'assurer qu'un appareil dispose d'un verrouillage de l'écran de qualité avant d'accorder l'accès. Oui Oui Oui Oui
    Options pour les développeurs activées Un courtier de confiance peut identifier un appareil comme ayant une surface d'attaque plus large lorsque les options pour les développeurs sont activées. Oui Oui Oui Oui
    DNS over TLS est-il activé ? Un courtier de confiance peut s'en servir pour s'assurer que le mode DNS privé est activé. Oui Oui Oui Oui
    Navigation sécurisée SafetyNet Un courtier de confiance peut déterminer si une URL particulière a été classée par Google comme menace connue. Oui Oui Oui Oui
    Support de média externe Un courtier de confiance peut être averti lorsqu'un espace de stockage externe est installé. Oui Oui Oui Oui
    UsageStatsManager Un courtier de confiance peut étudier les habitudes d'utilisation de chaque application. Oui Oui Oui Oui1
    Journalisation de la sécurité Un courtier de confiance peut exploiter ces données dans son moteur contextuel pour garantir la conformité et créer une empreinte basée sur le comportement. Oui Oui2 Oui2 N/A
    Journalisation réseau Un courtier de confiance peut exploiter ces données dans son moteur contextuel pour garantir la conformité et créer une empreinte basée sur le comportement. Oui Oui2 Oui2 N/A
    NetworkStatsManager Un courtier de confiance peut interroger l'utilisation du réseau de l'application dans un intervalle de temps donné. Oui Oui Oui2 Oui1
    Visibilité des packages (liste de toutes les applications sur l'appareil) Un courtier de confiance peut interroger les applications installées sur l'appareil Oui Oui3 Oui3 Oui
    Lire l'état du téléphone Un courtier de confiance peut obtenir des informations sur le réseau mobile, l'état des appels en cours et une liste des PhoneAccount enregistrés sur l'appareil. Oui Oui Oui Oui
    Date et heure du dernier redémarrage de l'appareil Un courtier de confiance peut obtenir la disponibilité du système Oui Oui Oui Oui
    Obtenir des comptes Un courtier de confiance peut s'en servir pour accéder à la liste des comptes dans le service des comptes. Oui Oui3 Oui3 Oui1
    Surveiller les changements importants du niveau de la batterie Un courtier de confiance peut surveiller les changements importants du niveau de la batterie Oui Oui Oui Oui
    Position (précise, approximative, etc.) Un courtier de confiance peut accéder à l'emplacement physique de l'appareil Oui Oui Oui1 Oui1

    1 Avec le consentement de l'utilisateur

    2 Profil professionnel uniquement

    3 Accès limité aux informations du profil professionnel

    Un courtier de confiance peut accéder à PackageInfo pour le module com.google.android.modulemetadata et y récupérer le 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
            }
    }
    

    Vous pouvez analyser la chaîne renvoyée dans un objet Date à l'aide de 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
    }
    

    N'oubliez pas que pour Android 11 et versions ultérieures, vous devez ajouter une déclaration de requête dans votre fichier AndroidManifest.xml pour répondre à la visibilité des packages d'Android:

    <manifest package="com.example.game">
        <queries>
            <package android:name="com.google.android.modulemetadata" />
        </queries>
        ...
    </manifest>

    Un courtier de confiance peut utiliser ces méthodes pour vérifier si un appareil est en mode de gestion et quel mode de gestion est actif.

    Vérifier la gestion des appareils

    Utilisez getActiveAdmins() pour vérifier si un appareil est géré. Si cette méthode renvoie null, l'appareil n'est pas géré.

    Vérifier si l'appareil est entièrement géré

    Utilisez isDeviceOwnerApp() pour vérifier si l'appareil est entièrement géré.

    Vérifier la présence d'un profil professionnel sur un appareil détenu par l'entreprise

    Utilisez isOrganizationOwnedDeviceWithManagedProfile() pour vérifier si un appareil utilise un mode de gestion de profil professionnel pour les appareils détenus par l'entreprise.

    Vérifier la présence d'un profil professionnel sur un appareil personnel

    Utilisez isProfileOwnerApp() pour vérifier si une application s'exécute dans un profil professionnel et vérifiez que isOrganizationOwnedDeviceWithManagedProfile() renvoie false.