Auditorías de seguridad de apps Android
El mundo en el que vivimos evoluciona constantemente, al igual que los avances tecnológicos, siendo los dispositivos móviles uno de los más destacados en los últimos tiempos. Según Google, en 2021 ya había más de 3.000 millones de dispositivos con sistema operativo Android en el mundo.
Ante la gran demanda, cada día se desarrollan, instalan y utilizan miles de nuevas aplicaciones en dispositivos, tanto personales, como corporativos, que utilizan datos de usuarios. Algunos de estos datos, son de carácter sensible, como es el caso de las aplicaciones bancarias o de pago, las aplicaciones médicas o de salud, o incluso aplicaciones dirigidas a la educación o formación de los menores. Es por esto que las aplicaciones móviles (o apps) necesitan ser sometidas a auditorías de seguridad desde su diseño.
Las auditorías de seguridad son una herramienta esencial dentro del ciclo de desarrollo de una app, y sirven para identificar vulnerabilidades y corregirlas antes de que los ciberdelincuentes puedan aprovecharlas. Pero también nos ayudan a cumplir con la legislación, como en el caso de RGPD para el cumplimiento de las regulaciones de protección de datos; o la normativa, como en el caso de PCI DSS, estándar de seguridad de datos para la industria de tarjeta de pago, por citar unos ejemplos.
Tanto aquellos que tengan interés o curiosidad personal, como los que formen parte de un equipo de desarrollo de aplicaciones o se dediquen a la auditoría de sistemas, encontrarán en este artículo recursos interesantes para desplegar un pequeño laboratorio de auditoría Android y mejorar su habilidades en este campo, con las metodologías y herramientas existentes.
Principales amenazas
Las aplicaciones móviles en general, y de Android en particular, están sujetas a una serie de amenazas. Las 10 principales, están recogidas en el proyecto OWASP Mobile Top 10:
- Uso inadecuado de la plataforma: se refiere a la falta de cumplimiento con las medidas de seguridad disponibles en la plataforma, como los permisos y servicios de contraseñas, así como el abuso de cualquier API expuesta.
- Almacenamiento inseguro de los datos: e que podría permitir el acceso no autorizado a la información almacenada si las bases de datos, los registros de log, las cookies almacenadas,o los medios físicos de almacenamiento.
- Comunicación insegura: incluye la utilización de protocolos de enlace inseguros, como versiones declaradas obsoletas de protocolos, especialmente los de cifrado (como SSL), o simplemente el uso de canales sin cifrar.
- Autenticación insegura: incluye problemas como la falta de identificación adecuada del usuario, el uso de contraseñas débiles o inseguras, debilidades en el manejo de sesiones, como la falta de cierre de sesión u otros mecanismos de evasión o suplantación de sesión.
- Cifrado insuficiente: que puede permitir el acceso a la información por parte de un atacante físico o a través de un malware que actúe en su nombre.
- Autorización insegura: se refiere a problemas en el proceso de autorización que permiten a un atacante acceder a recursos o funciones a las que no deberían tener acceso, mediante ataques automatizados.
- Calidad del código en el lado del cliente: La falta de buenas prácticas en el desarrollo del código, como la falta de control de errores y la mala implementación de las funciones de seguridad, pueden permitir desbordamientos de búfer u otras vulnerabilidades.
- Modificación del código: la modificación del código se refiere a cualquier cambio realizado en el código de la aplicación por parte de un atacante, incluyendo el binario o recursos locales, para modificar el comportamiento de la app. También son habituales los ataques de phishing que busquen engañar al usuario para instalar una aplicación maliciosa.
- Ingeniería inversa: En el caso de aplicaciones móviles, la ingeniería inversa puede ser utilizada para analizar el código fuente, bibliotecas, algoritmos para identificar vulnerabilidades, comprender cómo funciona la aplicación, o para obtener información sobre los servidores backend conectados.
- Funcionalidad extraña: las funciones creadas para el desarrollo o el depurado de las aplicaciones que no se deshabilitan o eliminan (puertas traseras, controles de seguridad deshabilitados, o cuentas privilegiadas) pueden permitir a los atacantes tomar control de las aplicaciones y sus datos.
Metodología de test OWASP(MAS)
OWASP Mobile Application Security (MAS) es un proyecto creado por OWASP para ayudar a los desarrolladores y profesionales de seguridad a comprender y mitigar los riesgos particulares de seguridad asociados con las aplicaciones móviles. El proyecto también incluye un checklist para ayudar a las organizaciones a probar la seguridad de sus aplicaciones móviles. Este checklist cubre los siguientes dominios:
- Arquitectura, diseño y modelado de amenazas: Se revisan aspectos estructurales de la aplicación para asegurar que sean seguros por diseño.
- Privacidad y almacenamiento de datos: Se analiza la protección de los datos sensibles, como las credenciales de usuario y la gestión de la información privada.
- Criptografía: Se evalúa que se siguen los estándares y protocolos vigentes de cifrado para proteger la información sensible.
- Autenticación y gestión de sesión: Se revisa si se siguen algunos requisitos básicos para gestionar las cuentas y sesiones del usuario.
- Comunicación de red: Se comprueba que se proteja la confidencialidad e integridad en los intercambios de información entre la app y los endpoints de servicio.
- Interacción de plataforma: Se evalúa la seguridad en el uso de APIs y componentes.
- Calidad de código y configuración de compilación: Se analiza la aplicación de prácticas de desarrollo seguro y el uso de las opciones de seguridad adecuadas en las opciones de compilación.
- Resiliencia: Se revisa si la aplicación cuenta con medidas específicas para resistir frente a determinados ataques del lado del cliente, por ejemplo mediante mecanismos de detección u ofuscación.
- Extracto del checklist de OWASP para verificar los requisitos de seguridad móvil. Fuente -
Herramientas para el test de seguridad de las apps
Los requisitos de seguridad vistos en la sección anterior pueden evaluarse desde dos puntos de vista complementarios:
- Análisis estático: Las pruebas estáticas persiguen analizar la seguridad de la aplicación a partir de diferentes artefactos como el código fuente, el código decompilado, el objeto binario o sus ficheros asociados, sin necesidad de ejecutar la aplicación. A través del uso de determinados metadatos, llamadas a funciones, o de la secuencia de instrucciones que plantea el flujo del programa, se pueden identificar posibles vulnerabilidades. Podemos encontrar herramientas open-source o con versión gratuita como:
- Mara: un framework que permite el análisis de apps. Entre otras cosas permite hacer desensablado y decompilado de apks, desofuscación, análisis de cadenas, extracción de permisos, etc.
- APK Analyzer: ofrece gran cantidad de información sobre las aplicaciones instaladas y archivos APK, como permisos, actividades, certificados, firmas, etc.
- JAADAS: Realiza análisis estáticos de los IPC para encontrar vulnerabilidades en aplicaciones de Android, construida sobre Soot y Scala.
- Análisis dinámico: estas pruebas tienen como objetivo observar el comportamiento de la aplicación tras someterla a condiciones particulares. Se requiere, por tanto, que la aplicación esté en funcionamiento, para que el evaluador pueda interaccionar con ella. Para ello, podemos encontrar herramientas como:
- Drozer: permite buscar vulnerabilidades de seguridad en aplicaciones interactuando con la máquina virtual Dalvik, los puntos finales IPC de otras aplicaciones y el sistema operativo subyacente.
- Burpsuite: funciona como un proxy web. Permite capturar y manipular el tráfico web entre un cliente y un servidor, resultando muy útil para auditar la seguridad de las comunicaciones de la app.
- Inspeckage: herramienta desarrollada para ofrecer análisis dinámico de aplicaciones Android. Al aplicar hooks a las funciones de la API de Android, ayuda a comprender qué está haciendo una aplicación de Android en tiempo de ejecución.
También existen herramientas híbridas que permiten realizar análisis estático y dinámico. Por ejemplo, este es el caso de Mobile Security Framework (MobSF).
Aplicaciones de test vulnerables
La forma más interesante y atractiva de ejercitar la metodología y herramientas mencionadas, desde el punto de vista técnico, es mediante aplicaciones de test vulnerables, es decir, aquellas diseñadas con el propósito del poder ser analizadas, ya que incluyen vulnerabilidades intencionadas. A continuación, proponemos algunas:
- InsecureShop: Es una tienda online vulnerable para Android. La mayoría de las vulnerabilidades se pueden explotar en un dispositivo no rooteado. La aplicación no utiliza ninguna API. Abarca un total de 19 vulnerabilidades.
- AndroGoat: Esta es la primera aplicación vulnerable desarrollada con Kotlin. Esta aplicación cubre 24 vulnerabilidades diferentes.
- InsecureBank V2: Es una apk con un servidor de backend escrito en Python. Esta aplicación cubre 25 vulnerabilidades diferentes.
- Crackmes: Dentro del proyecto MAS, del que ya hemos hablado en la sección de metodología, se propone una serie de apps Android vulnerables orientadas al CTF. Se estructura en 4 niveles de dificultad.
Conclusiones
Las nuevas tecnologías traen consigo nuevos riesgos para la seguridad y la tecnología móvil no es una excepción. A pesar de los avances constantes en la seguridad de los sistemas operativos Android, gran parte de la seguridad de las apps sigue recayendo en las capacidades de los desarrolladores para diseñar, implementar y mantener aplicaciones robustas y libres de vulnerabilidades.
En este artículo hemos visto que la validación de la seguridad en aspectos cruciales de las apps, como el almacenamiento de datos, la comunicación entre aplicaciones, el uso adecuado de API criptográficas, o la comunicación de red segura, pasa por incluir puntos de auditoría dentro del ciclo de vida de las mismas. Mediante la aplicación de las buenas metodologías, herramientas y recursos en estos test de seguridad, estaremos limitando los riesgos de nuestros usuarios de aplicaciones móviles Android.