Indicadores de postura de segurança

O Android oferece vários indicadores 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 mediador de confiança pode extrair os seguintes indicadores:
  • 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 do atestado de chave, as propriedades do dispositivo podem ser incluídas como parte do registro de 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 intermediário 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 intermediário de confiança pode ler o nível do patch de segurança do trem de linha principal instalado. Sim Sim Sim Sim
    ID específico da inscrição Um intermediário de confiança pode acessar um ID de dispositivo exclusivo específico para essa empresa. Esse ID sobrevive à recriação do perfil de trabalho e à redefinição do dispositivo para a configuração original. Sim Sim Sim N/A
    Estado de gerenciamento (e app de gerenciamento) Um broker 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 é superior a uma determinada versão Sim Sim Sim Sim
    Acesso ao estado da rede (estado da rede e estado do Wi-Fi) Um intermediário de confiança pode receber informações sobre o estado da rede ativa (celular e Wi-Fi) Sim Sim Sim Sim
    Acessar o estado do Wi-Fi (Android 11 e versões anteriores, o Android 12 e versões mais recentes oferecem suporte a uma abordagem callback ou 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 Trust broker pode receber informações sobre as configurações atuais do proxy HTTP padrão. Sim Sim Sim Sim
    Verificação de qualidade do bloqueio de tela Um intermediário de confiança pode garantir que um dispositivo tenha um bloqueio de tela de determinada qualidade configurado 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 DNS particular esteja ativado. Sim Sim Sim Sim
    Navegação segura do SafetyNet Um intermediário de confiança pode determinar se um URL específico foi classificado pelo Google como uma ameaça conhecida. Sim Sim Sim Sim
    Mídia externa montada Um agente de confiança pode ser notificado quando um armazenamento externo é montado Sim Sim Sim Sim
    UsageStatsManager Um Trust broker pode estudar os padrões de uso de apps individuais. Sim Sim Sim Sim1
    Registro de segurança 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 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
    NetworkStatsManager Um broker de confiança pode consultar o uso de rede do app em um determinado intervalo de tempo. Sim Sim Sim2 Sim1
    Visibilidade do pacote (listar todos os apps no dispositivo) Um broker de confiança pode consultar quais apps estão instalados no dispositivo Sim Sim3 Sim3 Sim
    Ler o estado do smartphone Um broker de confiança pode receber informações da rede móvel, o status de chamadas em andamento e uma lista de PhoneAccount registradas no dispositivo. Sim Sim Sim Sim
    Quando o dispositivo foi reiniciado pela última vez Um broker de confiança pode receber 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 serviço de contas. Sim Sim3 Sim3 Sim1
    Monitorar mudanças significativas no nível da bateria Um intermediário de confiança pode monitorar mudanças significativas no nível da bateria Sim Sim Sim Sim
    Localização (precisa, aproximada etc.) Um intermediário de confiança pode acessar a localização física 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
            }
    }
    

    É possível analisar a string retornada em um objeto Date usando a 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
    }
    

    Lembre-se de que, para o Android 11 e versões mais recentes, é necessário adicionar uma declaração de consulta no arquivo AndroidManifest.xml para atender à 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 método retornar null, o dispositivo não será gerenciado.

    Verificar se o 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.