Architecture, Design and Threat Modeling Requirements
ID MSTG-ID
1.1 MSTG-ARCH-1
1.2 MSTG-ARCH-2
1.3 MSTG-ARCH-3
1.4 MSTG-ARCH-4
1.5 MSTG-ARCH-5
1.6 MSTG-ARCH-6
1.7 MSTG-ARCH-7
1.8 MSTG-ARCH-8
1.9 MSTG-ARCH-9
1.10 MSTG-ARCH-10
1.11 MSTG-ARCH-11
1.12 MSTG-ARCH-12
Data Storage and Privacy Requirements
ID MSTG-ID
2.1 MSTG-STORAGE-1
2.2 MSTG-STORAGE-2
2.3 MSTG-STORAGE-3
2.4 MSTG-STORAGE-4
2.5 MSTG-STORAGE-5
2.6 MSTG-STORAGE-6
2.7 MSTG-STORAGE-7
2.8 MSTG-STORAGE-8
2.9 MSTG-STORAGE-9
2.10 MSTG-STORAGE-10
2.11 MSTG-STORAGE-11
2.12 MSTG-STORAGE-12
2.13 MSTG-STORAGE-13
2.14 MSTG-STORAGE-14
2.15 MSTG-STORAGE-15
Cryptography Requirements
ID MSTG-ID
3.1 MSTG-CRYPTO-1
3.2 MSTG-CRYPTO-2
3.3 MSTG-CRYPTO-3
3.4 MSTG-CRYPTO-4
3.5 MSTG-CRYPTO-5
3.6 MSTG-CRYPTO-6
Authentication and Session Management Requirements
ID MSTG-ID
4.1 MSTG-AUTH-1
4.2 MSTG-AUTH-2
4.3 MSTG-AUTH-3
4.4 MSTG-AUTH-4
4.5 MSTG-AUTH-5
4.6 MSTG-AUTH-6
4.7 MSTG-AUTH-7
4.8 MSTG-AUTH-8
4.9 MSTG-AUTH-9
4.10 MSTG-AUTH-10
4.11 MSTG-AUTH-11
4.12 MSTG-AUTH-12
Network Communication Requirements
ID MSTG-ID
5.1 MSTG-NETWORK-1
5.2 MSTG-NETWORK-2
5.3 MSTG-NETWORK-3
5.4 MSTG-NETWORK-4
5.5 MSTG-NETWORK-5
5.6 MSTG-NETWORK-6
Platform Interaction Requirements
ID MSTG-ID
6.1 MSTG-PLATFORM-1
6.2 MSTG-PLATFORM-2
6.3 MSTG-PLATFORM-3
6.4 MSTG-PLATFORM-4
6.5 MSTG-PLATFORM-5
6.6 MSTG-PLATFORM-6
6.7 MSTG-PLATFORM-7
6.8 MSTG-PLATFORM-8
6.9 MSTG-PLATFORM-9
6.10 MSTG-PLATFORM-10
6.11 MSTG-PLATFORM-11
Code Quality and Build Setting Requirements
ID MSTG-ID
7.1 MSTG-CODE-1
7.2 MSTG-CODE-2
7.3 MSTG-CODE-3
7.4 MSTG-CODE-4
7.5 MSTG-CODE-5
7.6 MSTG-CODE-6
7.7 MSTG-CODE-7
7.8 MSTG-CODE-8
7.9 MSTG-CODE-9
Resilience Requirements
ID MSTG-ID
8.1 MSTG-RESILIENCE-1
8.2 MSTG-RESILIENCE-2
8.3 MSTG-RESILIENCE-3
8.4 MSTG-RESILIENCE-4
8.5 MSTG-RESILIENCE-5
8.6 MSTG-RESILIENCE-6
8.7 MSTG-RESILIENCE-7
8.8 MSTG-RESILIENCE-8
8.9 MSTG-RESILIENCE-9
8.10 MSTG-RESILIENCE-10
8.11 MSTG-RESILIENCE-11
8.12 MSTG-RESILIENCE-12
8.13 MSTG-RESILIENCE-13
Mobile Application Security Verification
Standard
OWASP MSTG v1.4.0 (commit: b04750a)
OWASP MASVS v1.4.2 (commit: 2a8b582)
and Threat Modeling Requirements
Detailed Verification Requirement L1 L2
Todos los componentes se encuentran identificados y asegurar que son necesarios.
Los controles de seguridad nunca se aplican sólo en el cliente, sino que también en los respectivos
servidores.
Se definió una arquitectura de alto nivel para la aplicación y los servicios y se incluyeron controles
de seguridad en la misma.
Se identificó claramente la información considerada sensible en el contexto de la aplicación móvil.
Todos los componentes de la aplicación están definidos en términos de la lógica de negocio o las
funciones de seguridad que proveen.
Se realizó un modelado de amenazas para la aplicación móvil y los servicios en el que se definieron
las mismas y sus contramedidas.
Todos los controles de seguridad poseen una implementados centralizada.
Existe una política explícita sobre el uso de claves criptográficas (si se usan) a través de todo su
ciclo de vida. Idealmente siguiendo un estándar de gestión de claves como el NIST SP 800-57.
Existe un mecanismo para forzar las actualizaciones de la aplicación móvil.
La implementación de medidas de seguridad es una parte esencial durante todo el ciclo de vida del
desarrollo de software de la aplicación.
Existe una política de divualgación responsable y es llevada a cabo adecuadamente.
La aplicación debería de cumplir con las leyes y regulaciones de privacidad.
vacy Requirements
Detailed Verification Requirement L1 L2
Las funcionalidades de almacenamiento de credenciales del sistema deben de ser utilizadas para
almacenar información sensible, tal como información personal, credenciales de usuario o claves
criptográficas.
No se debe almacenar información sensible fuera del contenedor de la aplicación o del
almacenamiento de credenciales del sistema.
No se escribe información sensible en los registros (logs) de la aplicación.
No se comparte información sensible con servicios externos salvo que sea una necesidad de la
arquitectura.
Se desactiva la caché del teclado en los campos de texto que contienen información sensible.
No se expone información sensible mediante mecanismos de comunicación entre procesos (IPC).
No se expone información sensible como contraseñas y números de tarjetas de crédito a través de la
interfaz o capturas de pantalla.
No se incluye información sensible en las copias de seguridad generadas por el sistema operativo.
La aplicación elimina toda información sensible de la vista cuando la aplicación pasa a un segundo
plano.
La aplicación no conserva ninguna información sensible en memoria más de lo necesario y la
memoria se limpia trás su uso.
La aplicación obliga a que exista una política mínima de seguridad en el dispositivo, como que el
usuario deba configurar un código de acceso.
La aplicación educa al usuario acerca de los tipos de información personal que procesa y de las
mejores prácticas en seguridad que el usuario debería seguir al utilizar la aplicación.
No se guarda ningún tipo de información sensible de forma local en el dispositivo móvil. En su
lugar, esa información debería ser obtenida desde un sistema remoto sólo cuando es necesario y
únicamente residir en memoria.
En caso de ser necesario guardar información sensible de forma local, ésta debe de ser cifrada
usando una clave derivada del hardware de almacenamiento seguro, el cual debe requerir
autenticación previa.
El almacenamiento local de la aplicación debe de ser borrado trás un número excesivo de intentos
fallidos de autenticación.
rements
Detailed Verification Requirement L1 L2
La aplicación no depende únicamente de criptografía simétrica cuyas claves se encuentran
directamente en el código fuente de la misma.
La aplicación utiliza implementaciones de criptografía probadas.
La aplicación utiliza primitivas de seguridad que son apropiadas para el caso particular y su
configuración y parámetros siguen las mejores prácticas de la industria.
La aplicación no utiliza protocolos o algoritmos criptográficos ampliamente considerados obsoletos
para su uso en seguridad.
La aplicación no reutiliza una misma clave criptográfica para varios propósitos.
Los valores aleatorios son generados utilizando un generador de números aleatorios
suficientemente seguro.
ession Management Requirements
Detailed Verification Requirement L1 L2
Si la aplicación provee acceso a un servicio remoto, un mecanismo aceptable de autenticación
como usuario y contraseña es realizado en el servidor remoto.
Si se utiliza la gestión de sesión por estado, el servidor remoto usa tokens de acceso aleatorios para
autenticar los pedidos del cliente sin requerir el envío de las credenciales del usuario en cada uno.
Si se utiliza la autenticación basada en tokens sin estado, el servidor proporciona un token que se
ha firmado utilizando un algoritmo seguro.
Cuando el usuario cierra sesión se termina la sesión también en el servidor.
Existe una política de contraseñas y es aplicada en el servidor.
El servidor implementa mecanismos, cuando credenciales de autenticación son ingresadas una
cantidad excesiva de veces.
Las sesiones y los tokens de acceso expiran luego de un tiempo predefinido de inactividad.
La autenticación biométrica, si la hay, no está asociada a eventos (p. ej. usando una API que
simplemente retorna "true" o "false"), sino basada en el desbloqueo del keychain/keystore
(almacenamiento seguro).
El sistema remoto implementa un mecanismo de segundo factor de autenticación (2FA) y lo
impone consistentemente.
Para realizar transacciones críticas se requiere una autenticación adicional (step-up).
La aplicación informa al usuario acerca de todas las actividades sensibles en su cuenta. El usuario
es capaz de ver una lista de los dispositivos conectados, información contextual (dirección IP,
localización, etc.), y es capaz de bloquear ciertos dispositivos.
Los modelos de autorización deberían de ser definidos e impuestos por el sistema remoto.
tion Requirements
Detailed Verification Requirement L1 L2
La información es enviada cifrada utilizando TLS. El canal seguro es usado consistentemente en la
aplicación.
Las configuraciones del protocolo TLS siguen las mejores prácticas de la industria, o lo hacen lo
mejor posible en caso de que el sistema operativo del dispositivo no soporte los estándares
recomendados.
La aplicación verifica el certificado X.509 del sistema remoto al establecer el canal seguro y sólo
se aceptan certificados firmados por una CA de confianza.
La aplicación utiliza su propio almacén de certificados o realiza _pinning_ del certificado o la clave
pública del servidor. Bajo ningún concepto establecerá conexiones con servidores que ofrecen otros
certificados o claves, incluso si están firmados por una CA de confianza.
La aplicación no depende de un único canal de comunicaciones inseguro (email o SMS) para
operaciones críticas como registro de usuarios o recuperación de cuentas.
La aplicación sólo depende de bibliotecas de conectividad y seguridad actualizadas.
Requirements
Detailed Verification Requirement L1 L2
La aplicación requiere la cantidad de permisos mínimamente necesaria.
Todo dato ingresado por el usuario o cualquier fuente externa debe ser validado y, si es necesario,
saneado. Esto incluye información recibida por la UI o mecanismos IPC como los Intents, URLs y
datos provenientes de la red.
La aplicación no expone ninguna funcionalidad sensible a través esquemas de URL salvo que
dichos mecanismos estén debidamente protegidos.
La aplicación no expone ninguna funcionalidad sensible a través de mecanismos IPC salvo que
dichos mecanismos estén debidamente protegidos.
JavaScript se encuentra deshabilitado en los WebViews salvo que sea necesario.
Las WebViews se configuran para permitir el mínimo de los esquemas (idealmente, sólo https).
Esquemas peligrosos como file, tel y app-id están deshabilitados.
Si objetos nativos son expuestos en WebViews, debe verificarse que cualquier componente
JavaScript se carga exclusivamente desde el contenedor de la aplicación.
La serialización de objetos, si se realiza, debe implementarse utilizando API seguras.
La aplicación se protege contra ataques de tipo screen overlay. (sólo Android)
La caché, el almacenamiento y los recursos cargados (JavaScript, etc.) de las WebViews deben de
borrarse antes de destruir la WebView.
Verificar que la aplicación impide el uso de teclados de terceros siempre que se introduzca
información sensible. (sólo iOS)
ild Setting Requirements
Detailed Verification Requirement L1 L2
La aplicación es firmada y provista con un certificado válido, cuya clave privada está debidamente
protegida.
La aplicación fue publicada en modo release y con las configuraciones apropiadas para el mismo
(por ejemplo, non-debuggable).
Los símbolos de depuración fueron eliminados de los binarios nativos.
Cualquier código de depuración y/o de asistencia al desarrollador (p. ej. código de test, backdoors,
configuraciones ocultas) debe ser eliminado. La aplicación no hace logs detallados de errores ni de
mensajes de depuración.
Todos los componentes de terceros se encuentran identificados y revisados en cuanto a
vulnerabilidades conocidas.
La aplicación captura y gestiona debidamente las posibles excepciones.
Los controles de seguridad deniegan el acceso por defecto.
En código no administrado, la memoria es solicitada, utilizada y liberada de manera correcta.
Las funcionalidades de seguridad gratuitas de las herramientas, tales como minificación del byte-
code, protección de la pila, soporte PIE y conteo automático de referencias, se encuentran
activadas.
nts
Detailed Verification Requirement L1 L2
La aplicación detecta y responde a la presencia de un dispositivo rooteado, ya sea alertando al
usuario o finalizando la ejecución de la aplicación.
La aplicación impide la depuración o detecta y responde a la misma. Se deben cubrir todos los
protocolos de depuración.
La aplicación detecta y responde a cualquier modificación de ejecutables y datos críticos de la
propia aplicación.
La aplicación detecta la presencia de herramientas de ingeniería inversa o frameworks comunmente
utilizados.
La aplicación detecta y responde a ser ejecutada en un emulador.
La aplicación detecta y responde ante modificaciones de código o datos en su propio espacio de
memoria.
La aplicación implementa múltiples mecanismos de detección para los puntos del 8.1 al 8.6. Nótese
que, a mayor cantidad y diversidad de mecanismos usados, mayor será la resistencia.
Los mecanismos de detección provocan distintos tipos de respuestas, incluyendo respuestas
retardadas y silenciosas.
La ofuscación se aplica a las defensas del programa, lo que a su vez impide la desofuscación
mediante análisis dinámico.
La aplicación implementa un “enlace al dispositivo” utilizando una huella del dispositivo derivado
de varias propiedades únicas al mismo.
Todos los archivos ejecutables y bibliotecas correspondientes a la aplicación se encuentran
cifrados, o bien los segmentos importantes de código se encuentran cifrados o "empaquetados"
(packed). De este modo cualquier análisis estático trivial no revelará código o datos importantes.
Si el objetivo de la ofuscación es proteger código propietario, debe utilizarse un esquema de
ofuscación apropiado para la tarea particular y robusto contra métodos de desofuscación manual y
automatizada, considerando la investigación actual publicada. La eficacia del esquema de
ofuscación debe verificarse mediante pruebas manuales. Nótese que, siempre que sea posible, las
características de aislamiento basadas en hardware son preferibles a la ofuscación.
A modo de defensa en profundidad, además de incluir un refuerzo (hardening) sólido de la
comunicación, puede implementarse el cifrado de datos (payloads) a nivel de aplicación como
medida adicional contra ataques de eavesdropping.
R Android iOS Status
Test Case N/A
Test Case N/A
Test Case Test Case
R Android iOS Status
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
R Android iOS Status
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case N/A
Test Case Test Case
Test Case Test Case
R Android iOS Status
Test Case N/A
Test Case Test Case
R Android iOS Status
N/A Test Case
Test Case Test Case
Test Case Test Case
Test Case N/A
R Android iOS Status
Test Case Test Case
Test Case N/A
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case N/A
R Android iOS Status
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case N/A
Test Case Test Case
Test Case Test Case
R Android iOS Status
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case Test Case
Test Case N/A
Test Case Test Case
Test Case Test Case
N/A Test Case
About the Project
The OWASP Mobile Security Testing Guide is an OWASP flagship project led by Carlos Holguera and Sven Schle
https://owasp.org/www-project-mobile-security-testing-guide/
The OWASP MASVS (Mobile Application Security Verification Standard) is a standard that establishes the securit
https://github.com/OWASP/owasp-mstg/
The OWASP MSTG (Mobile Security Testing Guide) is a comprehensive manual for mobile app security testing an
listed in the MASVS.
https://github.com/OWASP/owasp-masvs/
Feedback
If you have any comments or suggestions, please post them on our GitHub Discussions.
https://github.com/OWASP/owasp-mstg/discussions/categories/ideas
Licence
Copyright © 2022 The OWASP Foundation. This work is licensed under a Creative Commons Attribution-ShareAl
others the license terms of this work.
https://github.com/OWASP/owasp-mstg/blob/master/License.md
Mobile Application Security Verification
Standard
OWASP MSTG v1.4.0 (commit: b04750a)
OWASP MASVS v1.4.2 (commit: 2a8b582)
Testing Guide is an OWASP flagship project led by Carlos Holguera and Sven Schleier which defines the industry standard for mobile appl
ct-mobile-security-testing-guide/
Application Security Verification Standard) is a standard that establishes the security requirements for mobile app security.
ecurity Testing Guide) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes
uggestions, please post them on our GitHub Discussions.
wasp-mstg/discussions/categories/ideas
P Foundation. This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. For any reuse or distribut
work.
wasp-mstg/blob/master/License.md
y standard for mobile application security.
p security.
cribes technical processes for verifying the controls
For any reuse or distribution, you must make clear to