16. Seguridad del Software (Aplicación)
Este apartado complementa la seguridad del código, enfocándose en los mecanismos de autenticación, autorización y protección del aplicativo final Android en ejecución.
16.1 Objetivos
- Asegurar que solo usuarios válidos accedan a la app
- Proteger las sesiones, datos y recursos del usuario
- Integrar mecanismos de autenticación modernos
- Validar la integridad y procedencia de la app
16.2 Autenticación
- Usar OAuth 2.0 con tokens
accessyrefresh - Protocolo de intercambio vía HTTPS
- Uso de librerías seguras y estándar (ej: Firebase Auth, Auth0)
Authorization: Bearer {access_token}
- Validez corta para tokens (
15-30 min) - Renovación automática con
refreshToken - Almacenar en
EncryptedSharedPreferences
16.3 Inicio de sesión seguro
- Validación de credenciales en backend (no localmente)
- Activar autenticación biométrica:
val biometricPrompt = BiometricPrompt(...)
- Usar
Jetpack Biometricpara FaceID / Fingerprint - Mostrar errores genéricos, no revelar si fue usuario o contraseña
16.4 Gestión de sesión
- Cierre automático por inactividad
- Revocación remota de sesión si se detecta riesgo
- Validación de token en cada llamada backend
- Restricción a un solo dispositivo por usuario (opcional)
16.5 Protección en tiempo de ejecución
| Mecanismo | Descripción |
|---|---|
| Play Integrity API | Verifica si la app fue modificada o clonada |
| SafetyNet (legacy) | Validación de device y entorno |
| SSL Pinning (opcional) | Reforzar conexión HTTPS a un certificado específico |
| Root Detection | Prevenir ejecución en dispositivos comprometidos |
16.6 Control de acceso
- Usar roles y permisos desde backend (
user.role == "admin") - Validar en cada pantalla que el usuario tenga acceso autorizado
- Mostrar o esconder funcionalidades según perfil
16.7 Seguridad de endpoints
- Todos los endpoints deben ser HTTPS
- Validar tokens y permisos en backend
- Auditar llamadas por IP, user-agent y comportamiento
16.8 Registro seguro de eventos
- Registrar logins, fallos, cierres de sesión, cambios críticos
- No incluir datos sensibles en logs
- Enviar eventos a Firebase Analytics o backend centralizado
16.9 Recomendaciones
✅ Usar Jetpack Security, Biometric, Play Integrity
✅ Evitar hardcode de tokens, urls, claves
✅ Validar la app en dispositivos reales y con VPN / proxy
✅ Asegurar backend con autenticación fuerte y auditoría
✅ Revisar mensualmente librerías y CVEs activos
La seguridad del aplicativo final es el último bastión antes del usuario. Una app segura protege tanto la información como la reputación de la empresa, y debe ser validada como parte integral del proceso de desarrollo.