MASTG-KNOW-0102: Cópias de segurança
O iOS inclui recursos de backup automático que criam cópias dos dados armazenados no dispositivo. Você pode fazer backups do iOS a partir do seu computador host usando o iTunes (até o macOS Catalina) ou o Finder (a partir do macOS Catalina em diante), ou através do recurso de backup do iCloud. Em ambos os casos, o backup inclui quase todos os dados armazenados no dispositivo iOS, exceto informações altamente sensíveis, como dados do Apple Pay e configurações do Touch ID.
Como o iOS faz backup de aplicativos instalados e seus dados, uma preocupação óbvia é se dados sensíveis do usuário armazenados pelo aplicativo podem vazar inadvertidamente através do backup. Outra preocupação, embora menos óbvia, é se configurações sensíveis usadas para proteger dados ou restringir funcionalidades do aplicativo poderiam ser adulteradas para alterar o comportamento do app após restaurar um backup modificado. Ambas as preocupações são válidas, e essas vulnerabilidades provaram existir em um vasto número de aplicativos atualmente.
Como o Keychain é incluído no backup¶
Quando os usuários fazem backup de seu dispositivo iOS, os dados do Keychain também são incluídos no backup, mas os segredos no Keychain permanecem criptografados. As chaves de classe necessárias para descriptografar os dados do Keychain não estão incluídas no backup. Restaurar os dados do Keychain exige restaurar o backup para um dispositivo e desbloquear o dispositivo com o código de acesso do usuário.
Itens do Keychain para os quais o atributo kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly está definido só podem ser descriptografados se o backup for restaurado para o dispositivo de origem. Alguém tentando extrair esses dados do Keychain a partir do backup não conseguiria descriptografá-los sem acesso ao hardware criptográfico dentro do dispositivo original.
Uma ressalva ao usar o Keychain, no entanto, é que ele foi projetado apenas para armazenar pequenos fragmentos de dados do usuário ou notas curtas (de acordo com a documentação da Apple sobre Keychain Services). Isso significa que aplicativos com necessidades maiores de armazenamento seguro local (por exemplo, aplicativos de mensagem, etc.) devem criptografar os dados dentro do container do aplicativo, mas usar o Keychain para armazenar material de chave. Em casos onde configurações sensíveis (por exemplo, políticas de prevenção de perda de dados, políticas de senha, políticas de conformidade, etc.) devem permanecer não criptografadas dentro do container do aplicativo, você pode considerar armazenar um hash das políticas no Keychain para verificação de integridade. Sem uma verificação de integridade, essas configurações poderiam ser modificadas dentro de um backup e depois restauradas no dispositivo para alterar o comportamento do aplicativo (por exemplo, alterar endpoints remotos configurados) ou configurações de segurança (por exemplo, detecção de jailbreak, certificate pinning, tentativas máximas de login na UI, etc.).
Conclusão: Se dados sensíveis são tratados conforme recomendado anteriormente neste capítulo (por exemplo, armazenados no Keychain, com verificações de integridade com suporte do Keychain, ou criptografados com uma chave que está bloqueada dentro do Keychain), os backups não devem ser um problema de segurança.