4. Seguridad del Software
Esta sección define las mejores prácticas y lineamientos para garantizar que las aplicaciones móviles desarrolladas en la organización cumplan con los más altos estándares de seguridad, tanto en el código fuente como en su operación en producción.
4.1 Principios generales de seguridad
- Seguridad por diseño desde la fase de arquitectura.
- Validación de entradas (inputs) del usuario.
- Evitar almacenamiento innecesario de datos sensibles.
- Minimizar permisos solicitados al sistema.
- Uso de comunicación segura (HTTPS, certificados válidos).
- Prevención de ingeniería inversa y ataques de modificación.
4.2 Seguridad de acceso y autenticación
Autenticación recomendada
- OAuth 2.0 como estándar de autenticación.
- Autenticación basada en token JWT.
- Almacenamiento seguro de tokens con
EncryptedSharedPreferences.
val sharedPrefs = EncryptedSharedPreferences.create(
"secure_prefs",
masterKeyAlias,
context,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
Flujos de autenticación seguros
- Tiempo de expiración corto para tokens.
- Revalidación periódica del usuario.
- Cierre de sesión remoto ante riesgo.
- MFA o autenticación biométrica si es necesario.
4.3 Seguridad en comunicación
- Usar HTTPS obligatorio con HSTS (Strict Transport Security).
- Validación de certificados con pinning (SSL Pinning) si aplica.
- Validar host de servidor al usar Retrofit/OkHttp.
val client = OkHttpClient.Builder()
.hostnameVerifier { hostname, session -> hostname == "api.alpura.com" }
.build()
4.4 Protección del código fuente
- Activar Proguard y R8 para ofuscar clases, métodos y nombres:
-keep class com.alpura.** { *; }
-dontwarn com.alpura.**
- No incluir archivos sensibles en el APK.
- No almacenar llaves API en el código.
4.5 Almacenamiento seguro de datos
- No guardar contraseñas ni tokens en texto plano.
- Usar
EncryptedSharedPreferencesoJetpack Security. - Base de datos local cifrada si contiene información crítica.
4.6 Análisis de vulnerabilidades
- Validar seguridad del código con:
- Checkmarx (estático)
- MobSF (análisis de APK y AAB)
- SonarQube con reglas de seguridad activas
- Integrar análisis de seguridad al pipeline de CI/CD.
4.7 Integridad de la aplicación
- Activar Play Integrity API para verificar que la app no fue manipulada.
- Verificar firma del APK en tiempo de ejecución (opcional).
- Validar la versión y entorno antes de realizar operaciones críticas.
4.8 Seguridad en Firebase
- Limitar accesos con roles y permisos (IAM).
- Reglas estrictas en Firestore y Storage.
- Usar App Check para prevenir acceso fraudulento.
4.9 Registro de actividad y trazabilidad
- Utilizar Firebase Analytics y Crashlytics para eventos y errores.
- No registrar datos sensibles o identificables en logs.
- Auditar sesiones, inicios y cierres del usuario.
4.10 Buenas prácticas generales
✅ Cifrar datos sensibles.
✅ No exponer APIs privadas en la app.
✅ Validar tokens en backend siempre.
✅ Evitar strings sensibles en strings.xml.
✅ Separar lógica de seguridad en un módulo o clase utilitaria.
✅ Revisar y actualizar dependencias vulnerables regularmente.
La seguridad no debe ser una capa adicional sino una práctica transversal a lo largo del ciclo de desarrollo. Esta guía asegura un entorno robusto para proteger los datos de los usuarios, la integridad del sistema y la reputación de la organización.