MASTG-TEST-0079: Testando Persistência de Objetos
Visão Geral¶
Análise Estática¶
Todas as diferentes variações de persistência de objetos compartilham as seguintes preocupações:
- Se você usar persistência de objetos para armazenar informações sensíveis no dispositivo, certifique-se de que os dados estejam criptografados: seja no nível do banco de dados, ou especificamente no nível do valor.
- Precisa garantir a integridade das informações? Use um mecanismo HMAC ou assine as informações armazenadas. Sempre verifique o HMAC/assinatura antes de processar as informações reais armazenadas nos objetos.
- Certifique-se de que as chaves usadas nas duas noções acima estejam armazenadas com segurança no KeyChain e bem protegidas. Consulte o capítulo "Armazenamento de Dados no iOS)" para mais detalhes.
- Garanta que os dados dentro do objeto desserializado sejam cuidadosamente validados antes de serem usados ativamente (por exemplo, que não seja possível explorar a lógica de negócios/aplicação).
- Não use mecanismos de persistência que utilizam Runtime Reference para serializar/desserializar objetos em aplicações de alto risco, pois o atacante pode manipular as etapas para executar lógica de negócios por meio desse mecanismo (consulte o capítulo "Defesas Anti-Engenharia Reversa no iOS)" para mais detalhes).
- Observe que no Swift 2 e versões posteriores, um Mirror pode ser usado para ler partes de um objeto, mas não pode ser usado para escrever no objeto.
Análise Dinâmica¶
Existem várias maneiras de realizar a análise dinâmica:
- Para a persistência real: Use as técnicas descritas no capítulo "Armazenamento de Dados no iOS".
- Para a serialização em si: Use uma compilação de depuração ou use Frida / objection para ver como os métodos de serialização são tratados (por exemplo, se o aplicativo falha ou se informações extras podem ser extraídas enriquecendo os objetos).