Advertisement
  1. Code
  2. iOS

Cómo proteger una aplicación de iOS

by
Read Time:6 minsLanguages:

Spanish (Español) translation by Steven (you can also view the original English article)

La seguridad es un aspecto clave del desarrollo de software. Casi todas las aplicaciones móviles se ocupan de la información del usuario o se comunican con un servidor remoto. Aunque la seguridad ha mejorado dramáticamente en las últimas décadas, sigue siendo un tema muy debatido.

En este artículo, me gustaría destacar una serie de temas relacionados con la seguridad y el desarrollo móvil. En el camino, me refiero a una serie de mejores prácticas y sugerencias que pueden resultarte útiles para proteger las aplicaciones que haces.

Seguridad y privacidad

La seguridad es relativa. Las vulnerabilidades de seguridad se descubren y se revisan regularmente. Nada es perfecto. Dicho esto, hay varias cosas que puedes hacer para mejorar la seguridad de tus aplicaciones móviles. Un ladrón está menos tentado a entrar en un edificio rodeado por una cerca eléctrica que uno que no lo está.

Algunos desarrolladores pasan por alto el hecho de que los usuarios de sus aplicaciones les confían su información. Como desarrollador, eres responsable de mantener segura esa información. No importa cuál sea esa información. Si bien la información puede no parecer importante para ti, es importante para el usuario.

Apple toma muy en serio la seguridad y la privacidad. HealthKit es un buen ejemplo del compromiso de Apple de proteger la privacidad del usuario. El usuario decide a qué datos de salud tiene acceso una aplicación. Si bien la aplicación puede solicitar acceso a los datos de salud del usuario, HealthKit no le dice a qué datos tiene acceso. En otras palabras, Apple considera que el estado de autorización de una aplicación es información confidencial que no debería conocer.

1. Almacenamiento de datos

Si tu aplicación almacena datos

Antes de decidir cómo o dónde almacenar un dato en particular, debes preguntarte si debes almacenar esos datos en primer lugar. ¿Es posible, por ejemplo, mantener los datos en la memoria en lugar de escribirlos en el disco o enviarlos a un servidor remoto? Esto puede simplificar enormemente la arquitectura de tu aplicación y mejorar tu seguridad.

Dónde debes almacenar datos

Si decides que almacenar los datos localmente es tu única opción, debes decidir dónde planeas almacenar esos datos. Para información confidencial, como credenciales, el llavero es tu mejor opción. Esto solo es factible para pequeñas cantidades de datos a los que tu aplicación no necesita acceso frecuente.

¿Es necesario hacer una copia de seguridad de los datos en iCloud o iTunes? Si ese no es el caso, entonces puedes considerar almacenar los datos en el directorio Caches del sandbox de la aplicación. Este directorio no está respaldado en iCloud e iTunes. ¿Por qué es eso importante? Los datos que no existen no pueden verse comprometidos.

Llavero

El sistema predeterminado, accesible a través de la clase NSUserDefaults, es una forma rápida y conveniente de almacenar fragmentos de datos. Desafortunadamente, el sistema predeterminado a menudo es usado en exceso por los desarrolladores. Ocurre con demasiada frecuencia que la información confidencial, como credenciales y tokens de acceso, se almacena en el sistema predeterminado.

Una ubicación mucho mejor para almacenar pequeños fragmentos de información confidencial es el llavero del sistema. Como su nombre lo indica, fue diseñado teniendo en cuenta la seguridad y ha existido durante muchos, muchos años. Aunque el sistema operativo administra el llavero, de manera predeterminada, otras aplicaciones no tienen acceso a los elementos que tu aplicación almacena en el llavero.

Es cierto que la interfaz para acceder a los servicios de llavero es arcaica. Afortunadamente, hay varias bibliotecas excelentes que superan este obstáculo. Lockbox, por ejemplo, es una biblioteca liviana para interactuar con los servicios de llavero del sistema. La interfaz de Lockbox es fácil de usar y comprender.

Claves, Tokens, Credenciales

Es tentador almacenar claves, tokens e incluso credenciales en ubicaciones de fácil acceso, como en Info.plist o un archivo JSON en el paquete de tu aplicación. La verdad es que es un juego de niños extraer esa información de una aplicación descargada de la App Store. Al almacenar un token API para un servicio web en el Info.plist de tu aplicación, otros desarrolladores pueden encontrarlo y usarlo.

2. Redes

App Transport Security

La seguridad y la privacidad han estado en la agenda de Apple durante muchos años y, junto con otros jugadores importantes, Apple ha decidido liderar con el ejemplo. Durante la WWDC del año pasado, la compañía presentó App Transport Security.

Con App Transport Security, Apple tiene como objetivo mejorar la seguridad de sus plataformas y las aplicaciones que se ejecutan en ellas. No importa cuánto invierta Apple en proteger sus sistemas operativos, un sistema es tan seguro como su componente más débil y eso incluye aplicaciones de terceros.

App Transport Security exige que las aplicaciones envíen solicitudes de red a través de una conexión segura. Si App Transport Security está habilitado para una aplicación, las solicitudes de red se envían a través de HTTPS de forma predeterminada. Apple enfatiza su compromiso con la seguridad y la privacidad al habilitar automáticamente App Transport Security para aplicaciones creadas con Xcode 7.

Puedes leer más sobre App Transport Security en Envato Tuts+. Si bien es fácil deshabilitar App Transport Security, ten en cuenta que uno de los objetivos de App Transport Security es hacer que los desarrolladores consideren el comportamiento de red de sus aplicaciones.

Con quién estoy hablando

Prácticamente todas las aplicaciones móviles usan la red. Esto significa que las personas con malas intenciones se centran en gran medida en este aspecto de la seguridad de las aplicaciones. La creación de redes es un asunto complejo y las aplicaciones se basan en una gran cantidad de tecnologías para obtener los datos que les interesan.

Como desarrollador, es clave que te adhieras a una serie de mejores prácticas. Ya hablamos sobre App Transport Security y las reglas que impone esta nueva tecnología. Sin embargo, no se detiene allí. También es posible que desees buscar temas más avanzados, como la fijación de certificados para asegurarte de que el servidor con el que se comunica tu aplicación no sea fraudulento. Las bibliotecas modernas, como Alamofire, lo hacen mucho más fácil.

3. Información sensible

Datos de usuario

La mayoría de las aplicaciones usan o almacenan información confidencial del usuario. Los dispositivos móviles tienen acceso a una amplia gama de información del usuario que a menudo es de naturaleza personal y sensible, como la ubicación, la libreta de direcciones y la información de salud.

Como mencioné anteriormente en este artículo, la primera pregunta que debes hacerte es si necesitas acceder a esta información y, lo que es más importante, si necesitas almacenar esa información.

Si puedes acceder a la información que necesitas a través de un framework nativo, como HealthKit, entonces no es necesario duplicar y almacenar esa información. Por ejemplo, Apple rechazará las aplicaciones que almacenan la información de salud del usuario en iCloud.

Mantenerlo en local

Suponiendo que necesitas almacenar información confidencial, considera si esa información debe mantenerse de manera local. ¿Es necesario enviar información confidencial a un servidor remoto?

El almacenamiento de información confidencial viene con una advertencia. Si el servidor en el que estás almacenando información confidencial se ve comprometido, puedes ser responsable de exponer esa información a otras partes.

Credenciales

La seguridad en línea ha evolucionado enormemente en las últimas décadas. Los protocolos de autenticación, como OAuth, han hecho que la comunicación con los servicios web sea más segura y transparente.

Si tu aplicación necesita hablar con un servidor seguro, considera cómo tu aplicación gestiona tus credenciales. ¿Los guarda en la memoria o los almacena en el disco? Si le pides al usuario un nombre de usuario y la contraseña para obtener un token de acceso, está bien almacenar ese token de acceso. ¿Pero también debes almacenar el nombre de usuario y la contraseña? La respuesta es no en la mayoría de las situaciones.

Para las aplicaciones que manejan datos muy confidenciales, como información financiera o de salud, incluso puede ser mejor mantener el token de acceso en la memoria, no almacenarlo en el disco. Mantenerlo en la memoria lo hace mucho más seguro, lo que hace que tu aplicación sea mucho menos riesgosa. Lo más probable es que el token de acceso tenga una vida útil corta de todos modos.

Conclusión

La seguridad de una aplicación es un aspecto fundamental del desarrollo de software. Considera a qué datos tiene acceso tu aplicación y si debes almacenar esa información. Si decides almacenar información confidencial, ten en cuenta los consejos anteriores y las mejores prácticas. Asegúrate de tratar la información del usuario con respeto. Si bien la información puede no parecerte importante, es importante para el usuario.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.