OWASP Mobile Top 10 2024 – Guía para abordar las vulnerabilidades más críticas en la seguridad de aplicaciones móviles
Las funciones intuitivas y las interfaces elegantes de las aplicaciones móviles son esenciales para ofrecer una alta experiencia de usuario y maximizar los ingresos de los desarrolladores. Sin embargo, detrás de las funciones atractivas y el diseño llamativo, la información personal de los usuarios puede quedar fácilmente expuesta. Si bien el lanzamiento exitoso de una aplicación y su funcionamiento continuo son importantes, mejorar la seguridad también es un recurso clave tanto para los desarrolladores como para los usuarios de la aplicación.
Sin embargo, un enfoque deficiente hacia la seguridad puede tener consecuencias desastrosas. Si se aplican medidas de seguridad móviles incorrectas a una aplicación, los usuarios pueden perder la confianza en el negocio. Para abordar este problema, la organización sin fines de lucro Open Worldwide Application Security Project (OWASP) proporciona diversas herramientas de código abierto gratuitas, documentos y recursos para ayudar a las organizaciones a fortalecer su postura de seguridad. Uno de los proyectos más conocidos es el OWASP Mobile Top 10, que desempeña un papel crucial en la concienciación sobre los riesgos de seguridad en aplicaciones.
A continuación, se presentan las 10 principales vulnerabilidades de aplicaciones móviles anunciadas por OWASP en 2024.
OWASP Mobile Top 10 2024
M1: Uso inadecuado de credenciales
M2: Seguridad insuficiente en la cadena de suministro
M3: Autenticación/Autorización insegura
M4: Validación insuficiente de entradas/salidas
M5: Comunicación insegura
M6: Controles de privacidad inadecuados
M7: Protección binaria insuficiente
M8: Configuración de seguridad incorrecta
M9: Almacenamiento de datos inseguro
M10: Criptografía insuficiente
Entonces, echemos un vistazo detallado al OWASP Mobile Top 10 2024.
(Extraído de https://owasp.org/www-project-mobile-top-10/)
1. Uso inadecuado de credenciales
El código y los scripts escritos por los desarrolladores a menudo requieren credenciales (como claves SSH y tokens de API) y contraseñas para acceder a diversos recursos e interactuar con otras aplicaciones y herramientas. Para ahorrar tiempo, los desarrolladores suelen incluir información confidencial directamente en el código. Cuando dichas credenciales se incrustan en el código fuente, esta información crítica queda expuesta a cualquier persona que tenga acceso al código.
Para gestionar las credenciales de forma segura, no se deben utilizar credenciales incrustadas en el código y es necesario aplicar las siguientes medidas de gestión.
2. Seguridad insuficiente en la cadena de suministro
Si la cadena de suministro de la aplicación móvil es vulnerable, los hackers pueden insertar código malicioso en la base de código o modificar el código durante el proceso de compilación para añadir puertas traseras, spyware u otro malware, lo que les permite robar datos, monitorear a los usuarios o controlar dispositivos móviles.
Estas amenazas surgen especialmente cuando se utilizan aplicaciones móviles desarrolladas por terceros o se depende de bibliotecas y componentes de terceros. Si los desarrolladores de aplicaciones no inspeccionan o actualizan adecuadamente los componentes de terceros, pueden quedar expuestos a este tipo de ataques.
- Medidas adecuadas
Implementar prácticas de codificación segura, revisión de código y pruebas a lo largo de todo el ciclo de desarrollo de la aplicación móvil para identificar y mitigar vulnerabilidades.
Garantizar procesos seguros de firma y distribución de aplicaciones para evitar que los atacantes firmen y distribuyan código malicioso.
Utilizar únicamente bibliotecas o componentes de terceros confiables y validados para reducir el riesgo de vulnerabilidades.
Establecer controles de seguridad para actualizaciones, parches y lanzamientos de la aplicación, evitando que los atacantes exploten vulnerabilidades en la app.
Monitorear y detectar incidentes de seguridad en la cadena de suministro mediante pruebas de seguridad, escaneos u otras técnicas que permitan identificar y responder a los incidentes de manera oportuna.
3. Autenticación/Autorización Insegura
Los hackers pueden explotar vulnerabilidades en los sistemas de autenticación o autorización para falsificar o eludir la autenticación en aplicaciones móviles. Si el sistema de autenticación es defectuoso o inexistente, los atacantes pueden ejecutar funciones móviles de forma anónima desde el servidor backend. Cuando no se puede verificar la identidad de los usuarios, no es posible detectar la fuente del ataque, lo que expone directamente al riesgo.
Para evaluar la seguridad de una aplicación móvil, es fundamental comprender la diferencia entre autenticación y autorización. La autenticación identifica a los individuos, mientras que la autorización verifica si tienen los permisos necesarios para realizar acciones específicas. A continuación, se presentan ejemplos de autenticación y autorización inseguras en aplicaciones móviles.
- Autenticación Insegura
- Ejecución anónima de API de backend
- Almacenamiento local de contraseñas o secretos compartidos
- Política de contraseñas débiles
- Uso de funciones como FaceID y TouchID
- Autorización Insegura
- Presencia de vulnerabilidades de Referencia Directa a Objetos Inseguros (IDOR)
- Endpoints ocultos
- Cuando la aplicación transmite roles y permisos de usuario al sistema backend
- Medidas adecuadas
Al migrar una aplicación web a móvil, los requisitos de autenticación deben alinearse correctamente.
Todas las solicitudes de autenticación deberían manejarse idealmente en el lado del servidor.
Si es necesario almacenar datos en el lado del cliente, los datos deben cifrarse utilizando claves de cifrado derivadas de manera segura a partir de las credenciales de inicio de sesión del usuario.
Se debe recomendar a los usuarios que no almacenen contraseñas en sus dispositivos.
El control de autenticación y autorización debe reforzarse en el servidor.
Al realizar verificaciones locales de autenticación o autorización en un entorno offline, se deben llevar a cabo controles de integridad locales para detectar modificaciones no autorizadas del código.
El sistema backend debe verificar de forma independiente los permisos y autorizaciones de los usuarios autenticados. Además, dado que se debe asumir que toda autenticación en el lado cliente puede ser vulnerada, se deben reforzar en la medida de lo posible las actividades de autenticación y autorización en el servidor.
4. Validación insuficiente de entradas/salidas
Si las aplicaciones móviles no validan adecuadamente los datos provenientes de fuentes externas, como la entrada del usuario o los datos de la red, pueden ser vulnerables a ataques especializados para el entorno móvil, como inyecciones SQL, inyecciones de comandos y ataques XSS. Los hackers pueden obtener acceso al sistema y ejecutar código no autorizado dentro de la aplicación o extraer datos sin permiso, lo que potencialmente les permitiría tomar control de las funciones de la aplicación y de todo el sistema móvil.
- Medidas adecuadas
Validación de entradas: Validar y sanitizar la entrada del usuario utilizando técnicas de validación estrictas. Implementar restricciones de longitud de entrada y rechazar datos inesperados o maliciosos.
Sanitización de salidas: Sanitizar adecuadamente los datos de salida para prevenir ataques de cross-site scripting (XSS). Usar técnicas de codificación de salida al mostrar o transmitir datos.
Validación específica por contexto: Realizar validación específica basada en el contexto de los datos (por ejemplo, cargas de archivos, consultas a bases de datos) para prevenir ataques como el traversal de rutas o inyecciones.
Comprobaciones de integridad de datos: Implementar comprobaciones de integridad de datos para detectar y prevenir la corrupción de datos o modificaciones no autorizadas.
Prácticas de codificación segura: Seguir prácticas de codificación segura, como el uso de consultas parametrizadas y declaraciones preparadas para prevenir inyecciones SQL.
Pruebas de seguridad regulares: Realizar evaluaciones de seguridad periódicas, incluyendo pruebas de penetración y revisiones de código, para identificar y abordar vulnerabilidades.
5. Comunicación insegura
Las aplicaciones móviles intercambian datos con uno o más servidores remotos. Típicamente, los dispositivos móviles utilizan diversas tecnologías de comunicación, como TCP/IP, WiFi, Bluetooth/Bluetooth-LE, NFC, audio, infrarrojos, GSM, 3G, SMS, etc., para transmitir datos. Sin embargo, si la red local es comprometida o si se inserta código malicioso en los dispositivos de red o en los dispositivos móviles, puede causar varios daños, como el secuestro de cuentas, el robo de identidad, la filtración de Información Personal Identificable (PII), entre otros.
Una característica particularmente destacable es el intercambio de datos sensibles (claves de cifrado, contraseñas, información personal del usuario, detalles de cuentas, tokens de sesión, documentos, metadatos, binarios, etc.) empaquetados para el intercambio entre dispositivos. En tales casos, existe el riesgo de que algunos datos sean interceptados.
- Medidas adecuadas
Aplicar SSL/TLS a los canales de transmisión de datos de las API de backend o servicios web en la aplicación móvil. Cuando la aplicación ejecuta rutinas a través de un navegador/webkit, describe entidades externas como empresas de análisis de terceros, redes sociales, etc., utilizando versiones SSL. Evitar sesiones SSL mixtas, ya que podrían exponer el ID de sesión del usuario.
Utilizar productos de cifrado estándar de la industria con longitudes de clave adecuadas. Usar certificados firmados por proveedores de CA confiables y no aceptar certificados no válidos (autofirmados, caducados, raíces no confiables, revocados, hosts incorrectos, etc.).
No transmitir datos sensibles a través de canales alternativos (por ejemplo, SMS, MMS o notificaciones). Si es posible, aplicar una capa de cifrado adicional antes de que los datos sensibles sean transmitidos a través del canal SSL. En caso de que se descubran vulnerabilidades en implementaciones futuras de SSL, los datos cifrados sirven como defensa secundaria contra brechas de confidencialidad. Durante el ciclo de desarrollo, en lugar de redefinir los métodos de verificación SSL para permitir certificados no confiables, use certificados autofirmados o una autoridad certificadora (CA) local de desarrollo.
6. Controles de privacidad inadecuados
Proteger la Información Personal Identificable (PII) implica salvaguardar datos como nombres, direcciones, detalles de tarjetas de crédito, correos electrónicos y direcciones IP, así como información sobre salud, religión, preferencias sexuales y opiniones políticas. Los hackers explotan esta información para suplantar a las víctimas con fines de fraude, hacer un mal uso de los datos de pago, amenazar a las víctimas con información sensible o destruir o manipular datos importantes de la víctima. Para obtener la PII, los hackers deben primero vulnerar otros niveles de seguridad como redes, sistemas de archivos o accesos a registros.
- Medidas adecuadas
Minimizar la cantidad de PII procesada.
No almacenar ni transmitir PII a menos que sea absolutamente necesario.
Los datos importantes están protegidos a través de autenticación y autorización adecuadas.
7. Protección binaria insuficiente
Los binarios de las aplicaciones pueden contener información crítica, como claves de API comerciales o secretos de cifrado codificados de forma estática. Además, el código dentro del binario puede tener un valor significativo por sí mismo debido a que contiene lógica comercial importante o modelos de IA preentrenados. Los hackers pueden manipular el binario de la aplicación no solo para recopilar información, sino también para obtener acceso gratuito a funciones de pago o, en el peor de los casos, modificar aplicaciones populares para redistribuirlas como aplicaciones que contienen código malicioso.
Todas las aplicaciones son vulnerables a ataques binarios. Los ataques binarios se vuelven particularmente graves si el binario contiene datos sensibles o algoritmos codificados dentro de él, o si la aplicación es muy popular. Aunque la ofuscación, la codificación encriptada de código nativo (en Android) u otras medidas similares pueden proteger la aplicación, nunca son defensas infalibles.
- Medidas adecuadas
Ingeniería inversa: Para prevenir la ingeniería inversa, los atacantes deben ser incapaces de entender el binario de la aplicación. Esto se puede lograr mediante técnicas de ofuscación de código y cifrado de código.
Eludir mecanismos de seguridad: Los hackers necesitan entender el flujo general de control de la aplicación para eludir las verificaciones de seguridad. Por lo tanto, el cifrado y la ofuscación pueden ser muy beneficiosos. Además, las verificaciones de seguridad locales deben reforzarse en el backend. Por ejemplo, los recursos necesarios para funciones protegidas deben descargarse solo si son verificados tanto localmente como en el backend. Finalmente, las verificaciones de integridad permiten detectar alteraciones en el código y detectar la redistribución y modificaciones de la aplicación.
8. Mala configuración de seguridad
Se refiere a la configuración incorrecta de ajustes de seguridad, permisos y controles en aplicaciones móviles, lo que puede llevar a accesos no autorizados. Por ejemplo, usar configuraciones predeterminadas sin revisar los ajustes de seguridad, permisos y credenciales predeterminadas, o utilizar canales de comunicación no cifrados, descuidar actualizaciones de seguridad o parches, configuraciones inseguras de rutas de proveedores de archivos, entre otros.
- Medidas adecuadas
Configuraciones predeterminadas seguras: Asegúrese de que los ajustes y configuraciones predeterminados estén adecuadamente asegurados y no expongan información sensible ni proporcionen permisos innecesarios.
Credenciales predeterminadas: Abstenerse de usar credenciales predeterminadas codificadas de forma estática.
Permisos inseguros: Evite almacenar archivos de la aplicación con permisos excesivamente permisivos, como lectura y/o escritura global.
Principio de menor privilegio: Solicite solo los permisos necesarios para el funcionamiento adecuado de la aplicación.
Configuración de red segura: Prohíba el tráfico en texto claro y utilice el pinning de certificados cuando sea posible.
Deshabilitar depuración: Desactive las características de depuración en la versión de producción de la aplicación.
Deshabilitar modo de respaldo (Android): Al deshabilitar el modo de respaldo en los dispositivos Android, evita que los datos de la aplicación se incluyan en la copia de seguridad del dispositivo, asegurando que los datos sensibles de la aplicación no se almacenen en la copia de seguridad del dispositivo.
Limitar la superficie de ataque de la aplicación: Exportar solo las actividades, proveedores de contenido y servicios que sean necesarios para ser exportados.
9. Almacenamiento de datos inseguro
Si los datos no se almacenan de forma segura, se exponen a diversos ataques de hackers, que van desde la extracción directa de datos hasta la interceptación de información sensible. Por lo tanto, el cifrado, los protocolos de transmisión seguros y las medidas de seguridad exhaustivas son esenciales para evitar que los hackers accedan fácilmente a datos sensibles.
Almacenamiento de datos inseguro
Falta de controles de acceso
Cifrado inadecuado
Exposición involuntaria de datos
Manejo deficiente de sesiones
Validación insuficiente de entradas
Mala configuración del almacenamiento en la nube
Vulnerabilidades en bibliotecas de terceros
Compartición involuntaria de datos
- Medidas adecuadas
Usar cifrado fuerte: Implemente algoritmos y prácticas de cifrado robustos para proteger los datos sensibles tanto en reposo como en tránsito. Utilice algoritmos de cifrado estándar de la industria y asegúrese de que las claves de cifrado se almacenen y gestionen de forma segura.
Transmisión de datos segura: Utilice protocolos de comunicación seguros (por ejemplo, HTTPS, SSL/TLS) para proteger los datos durante la transmisión entre la aplicación móvil y los servidores backend. Evite enviar datos sensibles a través de canales no seguros.
Implementar mecanismos de almacenamiento seguro: Almacene datos sensibles en ubicaciones de almacenamiento seguras que no sean accesibles para usuarios no autorizados. Use mecanismos de almacenamiento seguro específicos de la plataforma proporcionados por el sistema operativo móvil, como Keychain (iOS) o Keystore (Android).
Emplear controles de acceso adecuados: Implemente controles de acceso fuertes para restringir el acceso no autorizado a los datos sensibles. Autentique a los usuarios de forma segura, haga cumplir controles de acceso basados en roles y valide los permisos del usuario antes de conceder acceso a la información sensible.
Validar entradas y sanear datos: Implemente técnicas de validación de entradas y saneamiento de datos para prevenir ataques de inyección y garantizar que solo se almacenen datos válidos y esperados. Valide las entradas de los usuarios para mitigar el riesgo de inyección de código malicioso o filtración involuntaria de datos.
Aplicar gestión de sesiones segura: Implemente técnicas de gestión de sesiones seguras, como el uso de tokens de sesión generados aleatoriamente, establecer tiempos de espera de sesión adecuados y almacenar de manera segura los datos de la sesión tanto en el cliente como en el servidor.
Actualizar y parchear dependencias regularmente: Mantenga todas las bibliotecas, marcos y dependencias de terceros actualizados, ya que pueden contener vulnerabilidades de seguridad que podrían conducir a un almacenamiento de datos inseguro. Aplique regularmente parches de seguridad y actualizaciones proporcionados por los respectivos proveedores.
Mantenerse informado: Manténgase al tanto de las últimas amenazas y vulnerabilidades de seguridad en el panorama de aplicaciones móviles. Supervise foros de seguridad, avisos de seguridad y actualizaciones de plataformas móviles para garantizar la mitigación oportuna de riesgos emergentes.
10. Criptografía insuficiente
La falta de cifrado suficiente puede resultar en violaciones de datos, acceso no autorizado a cuentas de usuario, compromiso de la confidencialidad o falsificación o alteración de datos.
- Criptografía insuficiente
Algoritmos de cifrado débiles
Longitud de clave insuficiente
Gestión incorrecta de claves
Implementación defectuosa de cifrado
Almacenamiento inseguro de datos/claves de cifrado
Falta de capa de transporte segura
Validación y autenticación insuficientes
Falta de salting
- Medidas adecuadas
Utilizar algoritmos de cifrado fuertes: Implemente algoritmos de cifrado ampliamente aceptados y seguros, como AES (Estándar de Cifrado Avanzado), RSA (Rivest-Shamir-Adleman) o Criptografía de Curvas Elípticas (ECC). Manténgase actualizado con los estándares criptográficos actuales y evite algoritmos obsoletos o débiles.
Asegurar una longitud de clave suficiente: Seleccione claves de cifrado con una longitud adecuada para garantizar una fuerte resistencia criptográfica. Siga las recomendaciones de la industria para la longitud de las claves, considerando el algoritmo de cifrado específico que se esté utilizando.
Seguir prácticas de gestión segura de claves: Utilice técnicas seguras de gestión de claves, como el uso de cofres de claves o módulos de seguridad hardware (HSM) para almacenar las claves de cifrado de manera segura. Proteja las claves contra el acceso no autorizado, restringiendo el acceso solo al personal autorizado, cifrando las claves en reposo y utilizando mecanismos seguros de distribución de claves.
Implementar el cifrado correctamente: Implemente cuidadosamente los procesos de cifrado y descifrado en la aplicación móvil, adhiriéndose a bibliotecas y marcos criptográficos establecidos. Evite implementaciones personalizadas de cifrado, ya que son más propensas a errores y vulnerabilidades.
Almacenamiento seguro de claves de cifrado: Asegúrese de que las claves de cifrado se almacenen de manera segura en el dispositivo móvil. Evite almacenar las claves en texto claro o en ubicaciones fácilmente accesibles. Considere usar mecanismos de almacenamiento seguro proporcionados por el sistema operativo o utilizar opciones de almacenamiento seguro basadas en hardware.
Emplear capa de transporte segura: Utilice protocolos seguros de capa de transporte, como HTTPS (HTTP Seguro), para transmitir datos cifrados a través de redes. Implemente una validación adecuada de certificados y asegure los canales de comunicación entre la aplicación móvil y los sistemas backend.
Validar y autenticar: Implemente mecanismos de validación y autenticación sólidos para verificar la integridad y autenticidad de las partes involucradas en el proceso de cifrado. Realice una validación adecuada de certificados, firmas digitales u otros mecanismos utilizados para la autenticación.
Actualizar regularmente las medidas de seguridad: Manténgase informado sobre las actualizaciones de seguridad, parches y recomendaciones de bibliotecas criptográficas, marcos y proveedores de plataformas. Mantenga la aplicación móvil y los componentes criptográficos subyacentes actualizados para abordar cualquier vulnerabilidad o debilidad identificada.
Realizar pruebas de seguridad: Realice pruebas de seguridad exhaustivas, incluyendo evaluaciones de vulnerabilidad criptográfica, pruebas de penetración y revisiones de código. Identifique y remedie cualquier debilidad o vulnerabilidad descubierta durante el proceso de pruebas.
Seguir los estándares y mejores prácticas de la industria: Manténgase actualizado con los estándares y mejores prácticas relacionadas con la criptografía. Organizaciones como NIST (Instituto Nacional de Estándares y Tecnología) e IETF (Fuerza de Tarea de Ingeniería de Internet) proporcionan pautas y recomendaciones para prácticas criptográficas seguras.
Utilizar funciones de hash fuertes: Elija funciones de hash criptográficas ampliamente reconocidas y seguras, como SHA-256 o bcrypt. Estos algoritmos están diseñados para resistir ataques y proporcionar un alto nivel de seguridad.
Implementar salting: Siempre utilice una sal aleatoria fuerte cuando se realicen hashes de contraseñas. El salting agrega una capa adicional de seguridad al dificultar que los atacantes usen tablas precomputadas o tablas arcoíris para descifrar contraseñas.
Utilizar funciones de derivación de claves (KDF): Para el hashing de contraseñas, utilice funciones de derivación de claves como PBKDF2, bcrypt o scrypt. Estas funciones están diseñadas específicamente para derivar de manera segura claves criptográficas a partir de contraseñas y proporcionan características de seguridad adicionales, como recuentos de iteraciones para ralentizar los ataques de fuerza bruta.
Las aplicaciones móviles son vulnerables al abuso porque contienen una gran cantidad de datos sensibles, incluida la información personal. Por lo tanto, la Fundación OWASP se esfuerza por reducir los riesgos de seguridad o resolver problemas mediante la sensibilización de los desarrolladores sobre las vulnerabilidades de seguridad y proporcionando recursos para ayudar a prevenir incidentes de seguridad.
La empresa Lockin proporciona diversos métodos y servicios para servicios de seguridad de aplicaciones fuertes. Al ofrecer funciones de ofuscación de código fuente y cifrado a través del servicio de seguridad móvil LIAPP, LIAPP protege fuertemente las aplicaciones móviles de los análisis cifrando códigos importantes, como la ofuscación binaria y DEX y SO. Además, al proporcionar la función SSL Pinning, es posible verificar el certificado HTTPS utilizado por la aplicación durante la comunicación y prevenir el análisis de paquetes de red eludiendo la inspección de certificados.
Experimente LIKEY, un potente teclado de UN SOLO USO a través del servicio de teclado de seguridad móvil, donde los datos importantes del usuario se cifran utilizando una clave aleatoria única que se genera cada vez, protegiendo así de forma segura la entrada del usuario.
El equipo de LIAPP ofrece consultoría experta para las empresas que desean abordar las vulnerabilidades de seguridad en la lista de los 10 principales de OWASP Mobile.
Referencia: https://owasp.org/www-project-mobile-top-10
#OWASP #mobile_app_protector #android_mobile_app_protector #mobile_game_application_protection #Mobile_App_Security #Mobile_App_Security_Solution #Anti_Tampering #Obfuscation#Encryption #Binary Obfuscation #Detecting_Bypassing_Authentication #SecureKeypad #LIKEY #LIAPP #LIAPP