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:
|
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
Recuperar versão Mainline
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>
Recuperar o estado de gerenciamento
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
.