Presentación
Este curso enseña el conocimiento y las habilidades necesarias para crear de forma segura una aplicación móvil Android nativo, al tiempo que garantiza las comunicaciones de red seguras y servicios web back-end.
¿Qué se lleva el alumno?
Al finalizar el curso los alumnos podrán:
Describir los principios fundamentales de la seguridad de las aplicaciones
Describir el modelo de seguridad de los dispositivos Android
Describir las amenazas comunes a la seguridad de aplicaciones móviles
Desarrollar aplicaciones moderadamente complejas utilizando el SDK de Android
Describir el modelo de seguridad de servicios Web y vulnerabilidades
Implementar correctamente SSL / TLS para comunicaciones
Utilizar las funciones de seguridad del sistema operativo Android y APIs
Aplicar correctamente técnicas de codificación segura
Evitar la retención de inseguridad de los datos en la memoria
Describir las implementaciones comunes de criptografía como PKI
Las reglas del juego de cifrado para el almacenamiento y / o comunicaciones
Entender los permisos de control de acceso y de archivo
Endurecer una demanda contra el ataque a los niveles apropiados para el modelo de riesgo de la aplicación
¿A quién va dirigido?
Este curso está dirigido a aquellos individuos con al menos 24 meses de experiencia en el desarrollo de aplicaciones, así como la familiaridad sólido con Java, el SDK de Android, y los principios de desarrollo de aplicaciones seguras.
S31_CompTIA Mobile App Security+ for
Android
Temario
Módulo 1.0: Mobile Application Security, SDLC, y modelos Threat
Módulo 1.1: Identificar las razones de la importancia del desarrollo móvil seguro
EE.UU. Requisitos reglamentarios: PCI, HIPAA, FFIEC, FISMA
Los requisitos internacionales: E.U. privacidad
Los requerimientos del negocio
Las expectativas del consumidor (incluyendo la privacidad)
Los riesgos de seguridad que son únicos o superiores para móviles
Dispositivo Perdido / robado (acceso físico)
Untrusted redes Wi-Fi (ataque DNS, MITM)
Los usuarios que ejecutan OS modificado (jailbreak)
Ataques relacionados con la telefonía (SMiShing, MitMo, fraude telefónico)
Módulo 1.2: Comparación de la gravedad relativa de los problemas de seguridad.
Interfaces Web sin protección
La vulnerabilidad a la inyección de SQL
El almacenamiento de contraseñas, datos sensibles sin cifrado
Transmisión sin cifrado (TLS / SSL)
Módulo 1.3: Explicar un proceso de desarrollo seguro durante todo el desarrollo de aplicaciones.
Las pruebas de seguridad / revisión sobre la liberación (y durante el desarrollo)
Los requerimientos del negocio
Especificaciones
Análisis de riesgos de arquitectura / modelo Threat
La revisión de código
Automatizado
Manual
Llevar a cabo las pruebas de seguridad
Fuzzing
Funcionalidad de la seguridad
Validación dinámica
Prueba basada en el riesgo
Las pruebas de penetración
Tipos de documentación
Políticas de seguridad reguladoras o corporativas o requisitos de privacidad
Schedule on-going security tests post-OS upgrades
Módulo 1.4: Resumir las mejores prácticas de seguridad generales.
Sanitizing input, input validation
Contextually appropriate output escaping
Buenas consideraciones de diseño:
Lógica en aplicaciones
Almacenamiento de variables
Diseño de base de datos
Depuración
El manejo de errores
Almacenamiento seguro
Comunicaciones seguras
Autenticación y autorización
Gestión de sesiones
Garantizar la aplicación e integridad de datos
Security by design vs. Obscurity
Sandbox
Módulo 1.5: Identificar los principales riesgos arquitectónicos en las debilidades de una aplicación.
Construir un diagrama de la arquitectura de una aplicación (incluidos los servicios de back-end), junto con descripciones de cada componente
Establecer una comprensión profunda y completa de la aplicación y sus componentes
Romper la arquitectura en zonas de seguridad específicas para la consideración individual
Para cada zona, articular y enumerar cada uno de los siguientes:
¿Quién tiene acceso a la zona?
¿Qué podría motivar a alguien para atacar el sistema?
¿Qué haría un objetivo atacante, específicamente, en cada zona?
¿Cómo podía ser atacado cada objetivo? (Proceso STRIDE Referencia de Microsoft)
¿Cuál sería el impacto en el negocio de un ataque con éxito?
¿Qué remedio podría aplicarse para reducir la probabilidad de un ataque exitoso?
Recomendar y justificar remedios basados en sus correspondientes probabilidades y magnitud del impacto contra sus costos para el negocio
Módulo 2.0: Android SDK, APIs y características de seguridad Módulo 2.1: Resumir la arquitectura de seguridad de Android.
El sistema y el nivel de seguridad del kernel
Sandbox
Firma de aplicaciones
Propósito
Gestión de claves
Permisos
Módulo 2.2: Explicar el modelo de permisos de Android.
API Protegidas
Solicitud de permisos
Definición de permisos
El uso de firmas
Niveles de protección
Resumir la administración de dispositivos de API
Finalidad y uso apropiado
Dejar el control de acceso al usuario para los datos sensibles
Comenzar la actividad de los contactos para permitir al usuario seleccionar un contacto para el uso de la aplicación, en lugar de requerir permisos para acceder a cada contacto
Iniciar la aplicación de la cámara para que el usuario tome una fotografía para su uso en la aplicación sin necesidad de permisos de cámaras
Módulo 2.3: Describir una comunicación segura inter-proceso.
Componentes públicos y privados
Proteger el acceso a:
Servicios
Receptores de radiodifusión
Actividades
Los proveedores de contenido
Bases de datos
Acceder con seguridad a los componentes de terceros con IPC
Tipos de ataques
Confused deputy
Intento de sniffing
Intento de hijacking
Divulgación de datos
Módulo 2.4: Implementar características comunes seguras.
Web view
KeyChain
Módulo 3.0: Servicio Web y seguridad de la red
Módulo 3.1: Resumir los riesgos en la realización de las comunicaciones Web y de red.
Borrar la transmisión de texto de los datos
Man-in-the-middle
Ataque de proxy Celular (archivo de suministro)
Validación insuficiente de los certificados / cadena de certificados
Compromiso SSL
Secuestro de DNS
Módulo 3.2: Implementar una sesión SSL con validación.
Cifrado / confidencialidad de datos
Aspectos básicos de la criptografía de clave pública, empleado en SSL
La comprensión de las amenazas contra las que el cifrado SSL protege
Autenticación del servidor (básico)
¿Cómo se verifican los certificados de servidor? (por defecto CA comprobación de la cadena)
La comprensión de las amenazas contra las que la autenticación del servidor SSL protege
Autenticación del servidor (avanzado)
Verificadores de nombre de host personalizados
Personaliza la confianza (configuración de aplicaciones de sólo confiar en ciertas certs)
Utilizar certificados con firma para la autenticación del servidor
Autenticación del cliente
Explicar conceptos básicos de la mutua autenticación SSL
La comprensión de las amenazas contra las que la autenticación de cliente SSL protege
Implementar certificado de cliente en almacén de claves de la aplicación
Implementar certificado de cliente en almacén de claves del sistema
Configurar la aplicación para presentar certificados de cliente para su autenticación
Módulo 3.3: Distinguir las protecciones de seguridad de sonido para la autenticación.
Explicar pros / contras y poner en práctica técnicas de autenticación / aplicación de dispositivos
SSL Mutual-autenticación para la autenticación de dispositivos cliente
Claves de la API de servicios Web para la autenticación de la aplicación cliente
Explicar ventajas / desventajas y aplicar técnicas de autenticación de usuario
Almacenamiento / acceder a las credenciales de usuario mediante AccountManager
La autenticación implícita
Autenticación basada en token utilizando OAuth
Módulo 3.4: Explicar las amenazas y las protecciones comunes para los servicios Web.
Explicar la validación de entrada
Necesidad de validación de entrada
Ley de Postel
Positivo (lista blanca) vs negativo (lista negra) de validación
Pros / contras de validación de lista blanca
Pros / contras de validación de lista negra
Explicar cross site scripting (XSS)
XSS almacenado
XSS reflejado
Las estrategias de prevención de XSS
Explicar cross site request forgery (ataques CSRF)
Ataque CSRF principios generales
Login CSRF
Módulo 3.5: Describir la correcta aplicación de la seguridad de sesión.
Token altamente aleatorio
Expirar el tiempo de espera o de salida
Almacenar en memoria no en datos
Evitar el token de usuario estático
UDID deprecation
Módulo 4.0: La seguridad de datos y el cifrado de la Implementación Módulo 4.1: Explicar cómo encriptar y hashing works.
Criptografía simmetryc-keys y public-key
Funciones de un solo sentido (por ejemplo, los hashes)
¿Por qué es el salting de contraseñas necesario?
La generación de claves, ¿por qué 10.000 rounds es mejor que 2.000?
Seguridad por diseño vs oscuridad
Módulo 4.2: Resumir los métodos para proteger los datos almacenados.
Certificados
Permisos y derechos de acceso
Seguridad de base de datos
Contraseñas de bases de datos SQL fuertes
Sanitizing inputs (detener SQL injection)
Encryption
Módulo 4.3: Distinguir la correcta aplicación de cifrado en una aplicación Android.
El cifrado de la aplicación (cuando se habilita de nuevo)
¿Por qué el uso de GPG / OpenPGP podría ser mejor que su propia versión?
El uso de algún valor conocido como el MEID a los datos oscuros, ¿mejor que nada?
La ofuscación del código para detener a alguien, invertir el algoritmo que está usando
Cómo almacenar contraseñas y claves para que no puedan ser extraídos de la aplicación
Cómo cifrar o hash de datos almacenados en bases de datos SQL
Verificando si la encriptación dispositivo está habilitada
Módulo 4.4: Implementar la seguridad de datos utilizando el modelo de permisos de Android.
Crear un permiso personalizado para su aplicación
Proteger un servicio con los permisos correctos
Conceder permiso temporal para abrir un archivo descargado
Módulo 5.0: Endurecimiento de aplicaciones e ingeniería inversa Módulo 5.1: Explicar la ingeniería inversa.
Explicar qué es la ingeniería inversa
Explicar las "buenas" razones para aplicaciones de ingeniería inversa
Explique las "malas" razones para aplicaciones de ingeniería inversa
Naturaleza de las plataformas Android y Java y por qué la ingeniería inversa es fácil
Explicar las técnicas básicas de la ingeniería inversa y enfoques
Proceso / etapas
Componentes de APK (clases, dex, certificados, manifiestos, diseños, tarros, bibliotecas nativas, recursos / activos, etc)
El análisis estático
Análisis Strings / recursos
Desmontaje
Descompilación
Pros y contras
Análisis dinámico
Areneros
Observando las comunicaciones de red
Emulador de Android
Depuración en vivo
Pros y contras
Entender la ingeniería forward (código => javac => dx => classes.dx) para entender la ingeniería inversa
Herramientas de ingeniería inversa apktool, dex2jar, jd-gui
Módulo 5.2: Explicar las contramedidas de la ingeniería inversa.
ProGuard
Explicar qué es ProGuard
Explicar por qué ProGuard puede hacer la ingeniería inversa más difícil
Implementar una instalación predeterminada de ProGuard en un proyecto Android
Explicar por qué los métodos nativos pueden hacer más difícil la aplicación ProGuard
Explicar por qué reflexión puede hacer la aplicación ProGuard más difícil
Las diferentes opciones que se pueden configurar en una configuración ProGuard
Proporcionar un ejemplo donde se debe modificar la configuración por defecto ProGuard
Explicar cómo las bibliotecas nativas impactan sobre la ingeniería inversa
Filtración de información
Eliminar / reducir Logcat login info
Eliminar / reducir depurar código
Eliminar / reducir las fugas stacktrace
Excepciones de captura
Las cosas que se utilizan para depurar aplicaciones ayudarán a revertir las aplicaciones
Explicar por qué la ingeniería inversa puede hacer la recuperación de contraseñas estáticas fácil
Explicar cuál es la información, contenida en una aplicación, que se puede recuperar a través de la ingeniería inversa
Explicar las ventajas y desventajas entre el almacenamiento, derivación, y la facilidad de suministro de información secreta
Módulo 6.0: Codificación Secure Java
Módulo 6.1: Explicar la estructura del lenguaje Java y desarrollo orientado a objetos.
Clases, objetos, métodos, campos
El manejo de excepciones, try / catch
Paquetes
Módulo 6.2: Demostrar el manejo adecuado de la información sensible.
Purgar información sensible de excepciones y de la memoria después de su uso
Evitar ingresar información altamente sensible
Módulo 6.3: Explicar las mejores prácticas de codificación segura de Java.
Denominación correcta
Limitar la extensibilidad de las clases y métodos
Definir envolturas alrededor de los métodos nativos
Obtener referencia adecuada para el almacenamiento externo como una tarjeta SD
Aislar código relacionado