Indicadores de confiança zero

O Android oferece vários sinais de dispositivos que os administradores podem usar para determinar a postura de segurança de um dispositivo. Em um modelo de segurança de confiança zero, esses indicadores são usados para avaliar se um dispositivo pode acessar informações corporativas.

Recurso Descrição Dispositivos totalmente gerenciados Perfil de trabalho em dispositivos corporativos Perfil de trabalho em dispositivos pessoais (BYOD) Dispositivos não gerenciados
API Play Integrity Um Trust agente pode recuperar os seguintes sinais:
  • Integridade do dispositivo
  • Integridade do app
  • Detalhes da licença do Google Play
  • Detalhes do ambiente, incluindo o novo veredito do Play Protect
  • Sim Sim Sim Sim
    Atestado de chave / hardware seguro presente Um intermediário de confiança pode verificar se as credenciais de ICP foram geradas e armazenadas em hardware seguro. Sim Sim Sim Sim
    Atestado de propriedades do dispositivo Como parte da confirmação de chaves, as propriedades do dispositivo podem ser incluídas como parte do registro do atestado Sim Sim Sim Sim
    Nível do patch de segurança do dispositivo Um intermediário de confiança pode validar o nível do patch de segurança do SO Sim Sim Sim Sim
    O dispositivo tem uma OTA pendente Um agente de confiança pode verificar se há uma atualização pendente do SO do dispositivo disponível Sim Sim Sim N/A
    Nível do patch de segurança principal Um agente de confiança pode ler o nível do patch de segurança dos trem principal Sim Sim Sim Sim
    ID específico da inscrição Um agente de confiança pode acessar um ID de dispositivo exclusivo específico para em uma empresa. Esse ID sobrevive à recriação do perfil de trabalho e à configuração original do dispositivo redefinir Sim Sim Sim N/A
    Estado de gerenciamento (e app de gerenciamento) Um intermediário de confiança pode usar isso para determinar se um dispositivo é gerenciado Sim Sim Sim N/A
    Criptografia de disco Um intermediário de confiança pode verificar se o dispositivo está criptografado (se o suporte ao Android 8 for necessário) Sim Sim Sim Sim
    Versão do SO Um agente de confiança pode verificar a versão do SO do dispositivo e confirmar se ela excede uma determinada versão. Sim Sim Sim Sim
    Acesso Estado da rede (estado da rede e do Wi-Fi) Um broker de confiança pode receber informações sobre o estado da rede ativa (celular e Wi-Fi) Sim Sim Sim Sim
    Acesse o estado do Wi-Fi (Android 11 e versões anteriores, o Android 12 e versões mais recentes oferecem suporte a um callback ou a uma abordagem sob demanda. Um broker de confiança pode receber informações sobre a rede Wi-Fi ativa Sim Sim Sim Sim
    Configurações de proxy Um agente de confiança pode conseguir informações sobre o HTTP padrão atual configurações de proxy. Sim Sim Sim Sim
    Tela bloquear a verificação de qualidade Um agente de confiança pode garantir que um dispositivo tenha uma determinada qualidade de bloqueio de tela configuradas antes de conceder acesso Sim Sim Sim Sim
    Opções do desenvolvedor ativadas Um agente de confiança pode identificar um dispositivo como tendo uma superfície de ataque mais ampla quando as opções do desenvolvedor estão ativadas. Sim Sim Sim Sim
    O DNS sobre TLS está ativado Um intermediário de confiança pode usar isso para garantir que o modo de DNS particular esteja ativado. Sim Sim Sim Sim
    Navegação segura do SafetyNet Um agente de confiança pode determinar se um URL específico foi classificadas pelo Google como uma ameaça conhecida. Sim Sim Sim Sim
    Externo Mídia montada Um agente de confiança pode ser notificado quando um armazenamento externo é montado Sim Sim Sim Sim
    UsageStatsManager Um agente de confiança pode estudar padrões de uso de apps individuais Sim Sim Sim Sim1
    Segurança geração de registros Um intermediário de confiança pode aproveitar esses dados como parte do mecanismo contextual para garantir a conformidade e criar uma impressão digital baseada no comportamento. Sim Sim2 Sim2 N/A
    Registro de rede Um agente de confiança pode usar esses dados como parte da análise Engine para garantir a conformidade e criar uma impressão digital baseada em comportamento Sim Sim2 Sim2 N/A
    NetworkStatsManager Um agente de confiança pode consultar o uso da rede do app em um determinado período intervalo Sim Sim Sim2 Sim1
    Pacote Visibilidade (lista de todos os apps no dispositivo) Um intermediário de confiança pode consultar quais apps estão instalados no dispositivo Sim Sim3 Sim3 Sim
    Leitura Estado do smartphone Um agente de confiança pode receber informações sobre a rede móvel, o status de chamadas, e uma lista de PhoneAccount registrados no dispositivo Sim Sim Sim Sim
    Quando o dispositivo foi reinicializado pela última vez Um agente de confiança pode conferir o tempo de atividade do sistema Sim Sim Sim Sim
    Acessar as Contas Um agente de confiança pode usar isso para acessar a lista de contas no o serviço de contas Sim Sim3 Sim3 Sim1
    Monitorar mudanças significativas no nível da bateria Um agente de confiança pode monitorar mudanças significativas no nível da bateria Sim Sim Sim Sim
    Local (Fino, Aproximado etc.) Um agente de confiança pode acessar o local físico do dispositivo Sim Sim Sim1 Sim1

    1 Com consentimento do usuário

    2 Somente perfil de trabalho

    3 Acesso limitado às informações do perfil de trabalho

    Um intermediário de confiança pode acessar o PackageInfo do módulo com.google.android.modulemetadata e extrair o 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
            }
    }
    

    Analise a string retornada em um objeto Date usando o 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
    }
    

    No Android 11 e versões mais recentes, é necessário adicionar uma declaração de consulta no o arquivo AndroidManifest.xml para satisfazer a visibilidade do pacote do Android:

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

    Um intermediário de confiança pode usar esses métodos para verificar se um dispositivo está no modo de gerenciamento e qual modo de gerenciamento está ativo.

    Verificar o gerenciamento de dispositivos

    Use getActiveAdmins() para verificar se um dispositivo está sob gerenciamento. Se esse O método retorna null, o dispositivo não é gerenciado.

    Verificar se há um dispositivo totalmente gerenciado

    Use isDeviceOwnerApp() para verificar se o dispositivo é totalmente gerenciado.

    Verificar o perfil de trabalho em um dispositivo da empresa

    Use isOrganizationOwnedDeviceWithManagedProfile() para verificar se um dispositivo está usando um modo de gerenciamento de perfil de trabalho para dispositivos corporativos.

    Verificar o perfil de trabalho em um dispositivo pessoal

    Use isProfileOwnerApp() para verificar se um app está sendo executado em um perfil de trabalho e confira se isOrganizationOwnedDeviceWithManagedProfile() retorna false.