Inicio / Blog / Desarrollo seguro de aplicaciones para dispositivos móviles

Desarrollo seguro de aplicaciones para dispositivos móviles

Publicado el 16/09/2014, por Asier Martínez (INCIBE)
Desarrollo seguro de aplicaciones para dispositivos móviles

Tal y como reflejan algunos datos, Android no es, ni mucho menos, una plataforma totalmente segura y se ha convertido en la más atacada por parte de los cibercriminales:

  • Según F-Secure, en el primer trimestre del 2014, 275 de las 277 familias nuevas identificadas correspondientes a malware para dispositivos móviles estaban enfocadas a Android.
  • Según Kaspersky, el 98,05% de la totalidad de muestras de malware para plataformas móviles identificado a lo largo del 2013 tenía como objetivo la plataforma Android.
  • RiskIQ confirmó que en los últimos dos años el malware en Google Play se ha incrementado casi en un 400%, situándose a finales del 2013 en un 12,7%.
  • TrendMicro informó de que actualmente existen más de 2,1 millones de amenazas para dispositivos Android.

Este hecho es debido principalmente a cinco factores:

  1. La ingente cantidad de dispositivos Android: Hay más de 900 millones.
  2. La mayoritaria elección por parte de los usuarios de Android como plataforma móvil.
  3. Como se puede comprobar en el sistema de seguimiento de incidencias o «Android Open Source Project - Issue Tracker», la plataforma tiene multitud de fallos. Del mismo modo, los controles de seguridad que incorpora no son 100% fiables, como reflejan las noticias:
    • Investigadores de BlueBox han descubierto un fallo de seguridad, apodado como Fake ID, el cual permitiría tomar el control de las apps instaladas y sus datos e incluso tomar el control del dispositivo entero.
    • Varios investigadores de seguridad de la Universidad de Indiana junto con Microsoft Research, han hecho público el documento «Upgrading Your Android, Elevating My Malware: Privilege Escalation Through Mobile OS Updating» en el que explican que las actualizaciones del Sistema Operativo Android abren la puerta al malware.
    • SophosLab identificó una vulnerabilidad que permite inyectar código malicioso en aplicaciones Android sin invalidar la firma digital.
    • El investigador Ibrahim Balic ha descubierto un nuevo fallo de seguridad que podría provocar que un dispositivo (smartphone y tablet) con sistema operativo Android quedase temporalmente inutilizable.
    • El investigador Daniel Divricean descubrió un fallo en Android que permitía la instalación de una aplicación en un dispositivo Android sin consentimiento expreso del usuario.
    • Existen una serie de vulnerabilidades como la conocida como «Master Key» que únicamente están solucionadas en la última versión de Android, lo que deja totalmente vulnerables a los usuarios del resto de versiones.
  4. La explotación de dichos fallos supone un gran beneficio económico con una mínima inversión. Se puede obtener gran cantidad de información confidencial como fotografías, emails, cuentas y contraseñas, SMS, grabaciones, etc. que posteriormente pueden ser vendidas en el mercado underground o «Deep Web» para robos de identidad, chantajes, etc. Así mismo, la suscripción a servicios SMS Premium reporta grandes ganancias a los ciberdelincuentes, o incluso la subcontratación de servicios característicos de una botnet como por ejemplo ataques de denegación de servicio, o mailings masivos pertenecientes a campañas de phishing.
  5. Los escasos controles de seguridad del servicio «Google Bouncer» a la hora de aceptar la publicación de nuevas aplicaciones en Google Play.

Todo esto provoca que los cibercriminales generen constantemente aplicaciones que buscan explotar tanto la inexperiencia y credulidad de los usuarios como los fallos de seguridad del propio sistema. Dichas aplicaciones, están orientadas principalmente a realizar las siguientes actividades:

  • Suscripción a servicios de tarificación especial «SMS Premium».
  • Descarga e instalación de aplicaciones no deseadas, principalmente provenientes de mercados alternativos o ubicaciones no oficiales.
  • Seguimiento de las ubicaciones del dispositivo y grabación del audio o video para monitorizar al usuario.
  • Monitorización de SMS provenientes de servicios bancarios.
  • Robo de información personal como contactos, imágenes, vídeos.
  • Simulando ser aplicaciones de utilidad cuando realmente no tienen ninguna, como los falsos antivirus.
  • Secuestro del dispositivo móvil.

En relación a la protección de los usuarios, INTECO ha desarrollado Conan Mobile, una herramienta especializada que analiza y comprueba el estado de seguridad de un dispositivo móvil y sus aplicaciones, mostrando soluciones a posibles riesgos a los que esté expuesto y proporcionando algunos consejos que ayuden a mejorar su seguridad.

Entendiendo que las vulnerabilidades y fallos de seguridad propios de las plataformas escapan al control de los desarrolladores de aplicaciones para dispositivos móviles, hay otros aspectos, como es el caso de la seguridad de las propias aplicaciones que éstos desarrollan, cuya responsabilidad sí que recae sobre ellos.

Existen diferentes metodologías cuya máxima es el «security by design» y que permiten evaluar la seguridad de las aplicaciones, como es el caso de OWASP u OASAM, e incluso desde Android establecen una serie de consejos a la hora de desarrollar una aplicación. Dichas metodologías tienen como objetivo identificar los peligros correspondientes a la seguridad de dispositivos móviles y proporcionar los controles necesarios en el desarrollo para reducir su impacto y la probabilidad de explotación de los mismos.

Estas metodologías, son independientes de la plataforma para la que se desarrolla la aplicación, por lo que aunque se haya justificado únicamente su utilización a la hora de desarrollar aplicaciones para Android, al ser la plataforma de uso mayoritario, es igualmente recomendable seguir las pautas y tener en cuenta los controles que indican a la hora de desarrollar para cualquier otra plataforma como iOS, Windows Phone o Blackberry, y más si cabe si se está desarrollando alguna aplicación que maneje información sensible.

A continuación, se indican los aspectos más relevantes de «OWASP Mobile Security Project» al ser la que tiene un uso más extendido. OWASP identifica los siguientes riesgos a la hora de desarrollar aplicaciones:

Top 10 riesgos identificados por OWASP

Todos estos riesgos pueden suponer un grave impacto, como por ejemplo:

  • Pérdida de información confidencial
  • Divulgación de credenciales
  • Violación de la privacidad
  • Integridad de los datos comprometida
  • Ataques «Man In The Middle»
  • Escalado de privilegios
  • Acceso no autorizado

Es por ello que, con el fin de mitigarlos, OWASP establece los siguientes controles y pautas a seguir durante el diseño:

Controles de seguridad de OWASP

  • Identificar y proteger los datos sensibles «Identify and Protect Sensitive Data» - Es preferible almacenar la información sensible en el lado del servidor, al ser los dispositivos móviles elementos susceptibles de ser sustraídos o extraviados. En el caso de almacenar dicha información en el terminal, será necesario cifrarla, y si es posible, habilitar los mecanismos necesarios para poder eliminarla remotamente, en el caso de que sea necesario.

    Existen otra serie de pautas importantes a tener en cuenta, referentes a este control:

    • Establecer restricciones de acceso a la información sensible en base a diferentes aspectos como la geolocalización.­
    • Asumir que el almacenamiento compartido es inseguro.­­
    • Establecer algún mecanismo de eliminación periódica de la información sensible, con el fin de que ésta no quede almacenada indefinidamente.­­
    • Recopilar únicamente aquella información que sea estrictamente necesaria para el funcionamiento de la aplicación.
  • Manejar de forma segura las credenciales del usuario «Handle Password Credentials Securely» - En este control se indican las siguientes pautas a seguir:­
    • Nunca almacenar las contraseñas en texto plano.­­­
    • Si es posible utilizar tokens, como OAuth, en vez de contraseñas y hacer que éstos expiren.­­
    • Comprobar la entropía de las contraseñas.­­
    • Evitar que las credenciales sean visibles en la cache o en los logs.­­
    • No almacenar ninguna contraseña hardcodeada en el código.
  • Asegurar que los datos sensibles son protegidos al transmitirlos «Ensure Sensitive Data is Protected in Transit» - Es importante asumir que el medio a través del cual se transmite la información no es seguro. Es por ello que es fundamental establecer algún canal de comunicación segura como SSL/TLS, asegurando de este modo la confidencialidad y la integridad de la información. Así mismo, se deben utilizar algoritmos de cifrado de una contrastada robustez, y utilizar certificados firmados por autoridades certificadoras confiables, manteniendo en todo momento la cadena de validación.
  • Implementar de forma correcta la autorización, autenticación y manejo de sesiones «Implement User Authentication/Authorization and Session Management Correctly» - En este control se indican las siguientes pautas a seguir:­
    • Solicitar credenciales robustas.­­­
    • Asegurar una gestión correcta de las sesiones, implementando los protocolos adecuados.­­
    • Establecer diferentes controles de seguridad como la geolocalización.­­
    • Establecer controles de seguridad adicionales a la hora de acceder a información sensible.
  • Mantener la seguridad con el backend «Keep the Backend APIs (Services) and the Platform (Server) Secure»­
    • Se debe analizar periódicamente el backend en busca de vulnerabilidades.­­­
    • Mantener el servidor completamente actualizado.­­
    • Establecer los mecanismos necesarios para que en el caso de que el servidor se vea afectado por un incidente, se pueda llevar a cabo un análisis forense.­­
    • Utilizar medidas para prevenir ataques de denegación de servicio.
  • Integración de datos segura con otros servicios y aplicaciones «Secure data integration with third party services and applications» - En el caso de utilizar código o librerías de terceros es importante testear su seguridad, no dando por hecho que no suponen un riesgo. Es por ello, que es preferible elegir código y librerías de terceros con una fiabilidad contrastada y un mantenimiento continuo. Este hecho, es especialmente importante en el caso de las librerías de monetización que como ha quedado demostrado suponen un grave riesgo para la privacidad de los usuarios.
  • Prestar atención específica a la recogida y almacenamiento del consentimiento para la recogida y utilización de información de los usuarios «Pay Specific Attention to the Collection and Storage of Consent for the Collection and Use of the User’s Data»­
    • Crear una política de privacidad que cubra la utilización de información personal.­­­
    • Tener en cuenta que la normativa para la recolección de información puede ser distinta, dependiendo del país.­­
    • Auditar los mecanismos de comunicación en busca de posibles fugas de información.
  • Implementar controles para prevenir el acceso no autorizado a recursos de pago «Implement Controls to Prevent Unauthorised Access to Paid-for Resources»­
    • Mantener registros de acceso a los recursos de pago y protegerlos de accesos no autorizados.­­­
    • Comprobar patrones de utilización anómalos en los recursos de pago.­­
    • Informar y obtener el consentimiento por parte del usuario en el caso de que la aplicación le vaya a generar algún gasto.
  • Asegurar la distribución segura y el suministro de las aplicaciones móviles «Ensure Secure Distribution/Provisioning of Mobile Applications»­
    • No distribuir las aplicaciones a través de repositorios inseguros.­­­
    • Las aplicaciones deben estar diseñadas para aceptar actualizaciones de seguridad.­­
    • Establecer canales para que los usuarios pueden reportar fallos de seguridad.
  • Revisar cuidadosamente cualquier código de error en la ejecución «Carefully Check any Runtime Interpretation of Code for Errors»

Existen otra serie de puntos a tener en cuenta a la hora de desarrollar una aplicación y que pueden ser identificados como un código de conducta de buenas prácticas:

  • Validar todas las entradas de información.
  • Minimizar las líneas de código y su complejidad.
  • Utilizar analizadores estáticos de código y «fuzzers» para buscar fallos de seguridad.
  • Utilizar funciones seguras con el fin de prevenir desbordamientos de búfer, etc.
  • Ejecutar las aplicaciones con el mínimo nivel de privilegios.

Es posible consultar la información completa correspondiente a los controles de seguridad de «OWASP Mobile Security Project» accediendo al siguiente enlace o en el documento elaborado por la ENISA «Smartphone Secure Development Guidelines».

Etiquetas: