En la wiki de flutter:
En Generalmente, las aplicaciones Flutter son eficientes por defecto, por lo que sólo necesita evitar los errores comunes para obtener un rendimiento excelente en lugar de tener que microoptimizar con herramientas de perfilado complicadas. Estas mejores recomendaciones te ayudarán a escribir la aplicación Flutter con el mayor rendimiento posible.
Se recomienda las siguientes lecturas:
- Flutter – Mejorando el rendimiento de una aplicación móvil
- Mejores prácticas de rendimiento
- App security best practices
En resumen
- Ofuscación del código
- Almacenamiento de datos
- Criptografía
- Protección de aplicaciones en tiempo de ejecución
- Permisos de las aplicación
Ofuscación del código
La ofuscación de código es el proceso de modificar un ejecutable para evitar que este sea fácilmente legible, sin este proceso el código fuente del apk puede es fácilmente legible por cualquier curioso. Un apk no es más que un archivo comprimido.
Se recomienda las siguientes lecturas:
El propósito de la ofuscación es reducir el tamaño de una aplicación acortando los nombres de las clases, métodos y campos, incrementando el nivel de dificultad en una inspección.
Para mejorar este proceso se recomienda usar herramientas como ProGuard.
Gracias a la Ofuscación de codigo disminuimos el riesgo de:
- Robo de propiedad intelectual: el código fuente debería ser leído unícamente por el autor o dueño del producto pero esto no siempre es así, y la lógica de programación, arquitectura, dominios etc., puede ser usados/consultados por un adversario que intentará tomar provecho de cada componente.
- Privacidad: Licenciamiento, lógica de activación o evasión de filtros.
- Explotación de vulnerabilidades: Un nuevo día revela una nueva vulnerabilidad en componentes o funciones que no se tuvieron en cuenta en el lanzamiento de la aplicación, éstas podrían ser encontradas por medio de un análisis de código estático y explotadas en tiempo de ejecución.
Almacenamiento de datos
Se recomienda las siguientes lecturas:
El problema de seguridad más común para una aplicación en Android es que otras aplicaciones puedan acceder a los datos que se guardaron en el dispositivo, toda la información sensible requiere métodos de protección adicionales, en Android existen tres formas fundamentales para guardar los datos:
2.1 Almacenamiento Interno: Por defecto, los archivos que se crean en el almacenamiento interno son accesibles únicamente por la aplicación.
Para proporcionar protección adicional para datos confidenciales, puede cifrar archivos locales utilizando la biblioteca de Seguridad. Esta librería proporciona una implementación de las mejores prácticas de seguridad relacionadas con la lectura y escritura de datos en reposo, La biblioteca utiliza el patrón del generador para proporcionar configuraciones predeterminadas seguras.
Para la gestión de claves, la biblioteca de seguridad utiliza un sistema de 2 partes para la administración de claves: un conjunto de claves que contiene una o más claves para cifrar un archivo o datos de preferencias compartidas. (Almacenadas en SharedPreferences) y una clave maestra que cifra todos los conjuntos de claves (Almacena en Android keystore system).
2.2 Almacenamiento Externo: Los archivos creados en almacenamiento externo, como las tarjetas SD, se pueden leer y escribir a nivel global. El archivo puede ser modificado o eliminado por el usuario o por cualquier aplicación.
Para leer y escribir archivos en el almacenamiento externo de una manera más segura, considere usar Security library,que proporciona la clase EncryptedFile.
2.3 Proveedor de Contenido: Los proveedores de contenido ofrecen un mecanismo de almacenamiento estructurado que puede limitarse a su propia aplicación o exportarse para permitir el acceso de otras aplicaciones, esto puede ser configurado a través del atributo: android:exported.
Recuerde tener presente el principio de menor privilegio.
Criptografía
Se recomienda las siguientes lecturas:
La criptografía también se puede utilizar para proteger los datos del usuario, Android tiene dos métodos para el cifrado del dispositivo:
- Cifrado basado en archivos: A partir de Android 7.0 se admite el cifrado basado en archivos (FBE), el cual permite cifrar diferentes archivos con diferentes claves que se pueden desbloquear de forma independiente.
- Utilizando el cifrado de disco: Este proceso codifica todos los datos del usuario en un dispositivo Android, utilizando claves de cifrado simétricas, todos los datos creados por el usuario se encriptan y se desencriptan automáticamente antes de enviarlo o leerlo en el disco.
Permisos de las aplicación
Se recomienda las siguientes lecturas:
Cómo solicitar permisos de la app
Las solicitudes para acceder a información confidencial, sólo deben realizarse cuando el acceso es necesario para el funcionamiento de su aplicación.
Android permite configurar los permisos de las aplicaciones, la aplicación debe publicar los permisos que requiere en la etiqueta del manifiesto de la aplicación.
Al trabajar con permisos en Android se recomienda seguir los siguientes principios:
- Sólo use los permisos necesarios para que su aplicación funcione.
- Verifique los permisos requeridos por las bibliotecas.
- Sea transparente (Tenga claro a qué está accediendo y porqué)
- Haga que el acceso al sistema sea explícitos e informativo.
Recuerde agregar los permisos requeridos para el correcto funcionamiento de la aplicación.
Protección de aplicaciones en tiempo de ejecución
Se recomienda las siguientes lecturas:
Herramientas como DexGuard protege las aplicaciones contra ataques en tiempo real, evitando que atacantes recopilen conocimiento sobre su comportamiento y lo modifiquen en tiempo de ejecución.
Implementa detección de herramientas de depuración, emuladores, dispositivos rooteados, marcos de ocultación de raíz y manipulación.