Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. iOS SDK
Code

Asegurar Datos de iOS en Reposo: Protección de los Datos del Usuario

by
Length:LongLanguages:
This post is part of a series called Securing iOS Data at Rest.
Securing iOS Data at Rest: The Keychain

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

Este es el primero de tres artículos en la obtención de datos de usuario en reposo. En este post, vamos a empezar con los conceptos básicos de la protección de datos en iOS para que pueda aprender las mejores prácticas actuales para almacenar datos de forma segura con Swift.

Cualquier aplicación que guarda los datos del usuario tiene que cuidar de la seguridad y privacidad de los datos. Como hemos visto con las violaciones de datos recientes, no puede haber consecuencias muy graves por no proteger los datos almacenados de los usuarios. En este tutorial, aprenderá algunas de las mejores prácticas para proteger los datos de los usuarios.

Permisos

Antes de entrar en el almacenamiento de los datos personalizados, vamos a echar un vistazo a los datos que pueden ser compartidos por aplicaciones del sistema.

Para muchas de las versiones de iOS, se ha requerido para solicitar permisos de la aplicación de usar y almacenar algunos de los datos privados del usuario que es externo a la aplicación, por ejemplo, cuando el ahorro y la carga de imágenes a la biblioteca de fotos. A partir de IOS 10, cualquier API que accedan a datos privados del usuario requieren que se declare que el acceso antes de tiempo en su proyecto de info.plist archivo.

Hay muchos marcos que pueden acceder a los datos fuera de su aplicación, y cada marco tiene una clave de privacidad correspondiente.

  • Compartir Bluetooth: NSBluetoothPeripheralUsageDescription
  • Calendario: NSCalendarsUsageDescription
  • CallKit: NSVoIPUsageDescription
  • Cámara: NSCameraUsageDescription
  • Contactos: NSContactsUsageDescription
  • Salud: NSHealthShareUsageDescription, NSHealthUpdateUsageDescription
  • HomeKit: NSHomeKitUsageDescription
  • Ubicación: NSLocationAlwaysUsageDescription, NSLocationUsageDescription, NSLocationWhenInUseUsageDescription
  • Biblioteca multimedia: NSAppleMusicUsageDescription
  • Micrófono: NSMicrophoneUsageDescription
  • Movimiento: NSMotionUsageDescription
  • Fotos: NSPhotoLibraryUsageDescription
  • Recordatorios: NSRemindersUsageDescription
  • Reconocimiento de voz: NSSpeechRecognitionUsageDescription
  • Sirikit: NSSiriUsageDescription
  • Proveedor de TV: NSVideoSubscriberAccountUsageDescription

Por ejemplo, aquí está una entrada en el info.plist para permitir su aplicación para cargar y almacenar valores para el calendario.

Si una descripción de uso no se encuentra cuando la API intenta acceder a los datos, la aplicación simplemente estrellarse.

La API Protección de Datos 

Para cualquier datos de usuario que es interno a la aplicación, lo primero que debe pensar es si usted necesita para almacenar la información y qué datos es esencial para la aplicación. Mantener la mayor cantidad de esos datos esenciales en la memoria de trabajo en lugar de en el almacenamiento de archivos. Esto es especialmente importante para cualquier información de identificación personal.

Sin embargo, si debe almacenar datos, es una buena idea para permitir la protección de datos de Apple.

Protección de datos encripta el contenido del recipiente de su aplicación. Se basa en que el usuario tenga un código de acceso, y por lo tanto la seguridad de la encriptación está ligado a la fuerza de la clave de acceso. Con ID Touch y el cifrado del sistema de archivos mejorado introducido en IOS 10.3, el sistema de protección de datos ha tenido muchas mejoras. Puede activar la protección de datos a través de su aplicación mediante la activación de la Protección de Datos en la Capacidades sección de su archivo de proyecto. Esto actualiza el archivo de perfil y los derechos de aprovisionamiento para incluir la capacidad de protección de datos. Protección de datos ofrece cuatro niveles de protección, representados por el FileProtectionType estructura:

  • none : ninguna protección.
  • complete : datos no son accesibles mientras el dispositivo está bloqueado. Esta es la configuración recomendada para la mayoría de aplicaciones.
  • completeUnlessOpen : los datos son accesibles cuando el dispositivo está desbloqueado, y sigue siendo accesibles hasta que se cierra el archivo, incluso si el usuario bloquea el dispositivo. Los archivos también pueden ser creados cuando el dispositivo está bloqueado. Esta opción es buena para cuando se necesita para abrir un archivo para procesar y tienen el proceso continuará incluso si el usuario pone la aplicación en el fondo y bloquea el dispositivo. Un ejemplo podría ser un trabajo que carga un archivo a un servidor.
  • completeUntilFirstUserAuthentication : cuando se inicia el dispositivo, los archivos no son accesibles hasta que el primer usuario desbloquea el dispositivo. Después de eso, los archivos están disponibles incluso cuando el dispositivo está bloqueado de nuevo La opción es buena para los archivos que necesitan ser visitada en algún momento más adelante en segundo plano cuando el dispositivo está bloqueado, como por ejemplo durante un fondo recuperan trabajo.

complete es el nivel predeterminado. Para evitar accidentes cuando el código intenta tener acceso a datos que está bloqueados, puede registrarse para las notificaciones a través de UIApplicationProtectedDataDidBecomeAvailable y UIApplicationProtectedDataWillBecomeUnavailable cuando los datos están disponibles.

Además, también puede ver la bandera de UIApplication.shared.isProtectedDataAvailable.

Una cosa importante a tener en cuenta cuando la habilitación de la protección de datos es que si utilizas los servicios de fondo como fetch de fondo, que el código puede necesitar acceso a sus datos en el fondo cuando el dispositivo está bloqueado. Los archivos, necesitará establecer un nivel de protección de completeUntilFirstUserAuthentication. Usted puede controlar el nivel de protección de cada archivo individualmente al crear archivos y directorios utilizando la clase FileManager.

También puede establecer el nivel de protección cuando se escribe en un archivo. El objeto de data tiene un método que puede escribir sus datos en un archivo, y puede establecer el nivel de protección cuando se llama a este método.

También puede establecer el nivel de protección cuando se configura el modelo de base de datos.

Para cambiar el nivel de protección de un archivo existente, utilice lo siguiente:

Integridad de los Datos

Parte de la protección de datos almacenados incluye la comprobación de su integridad. Es aconsejable no confiar ciegamente en los datos que se están cargando de almacenamiento; se puede haber sido accidental o maliciosamente modificado. El protocolo de NSSecureCoding puede utilizarse con seguridad cargar y guardar los objetos de datos de almacenamiento de información. Hará que los objetos que se carga contienen los datos esperados. Si va a guardar su propio objeto, puede cumplir con el protocolo de codificación seguro dentro de su clase.

La clase debe ser hereda de NSObject. Luego, para activar la codificación segura, reemplace el método de protocolo de supportsSecureCoding.

¿Si se deserializa el objeto personalizado con init? (codificador aDecoder: NSCoder), el método de decodeObject(forKey:) debe ser reemplazado con decodeObject(of:forKey:), que se cerciora de que los tipos de objeto correcto son desempaquetados desde almacenamiento de información.

Si usas NSKeyedUnarchiver para cargar los datos desde almacenamiento de información, asegúrese de establecer la propiedad requiresSecureCoding.

Torneado de codificación segura para tu ahorro operaciones le impedirá archivo accidentalmente un objeto que no se adhiere al Protocolo de codificación seguro.

Más allá de NSSecureCoding, siempre es bueno poner en práctica sus propias comprobaciones de validación de datos al descomprimir cualquier archivo o recibir cualquier entrada arbitraria en general.

Rutas de Datos

Como iOS sigue evolucionando, siempre hay novedades que tienen el potencial de perder los datos almacenados. A partir de iOS 9, usted puede tener su contenido indexada en la búsqueda de Spotlight y en iOS 10 puede exponer su contenido widgets como el Widget hoy que aparece en la pantalla de bloqueo. Tenga cuidado si desea exponer su contenido con estas nuevas características. ¡Usted podría terminar compartiendo más de lo previsto!

iOS 10 también agrega una nueva característica de entrega donde sus mesa de trabajo datos copiados automáticamente se compartieron entre los dispositivos. Una vez más, tenga cuidado de no exponer datos sensibles en la mesa de trabajo para entrega. Puede hacer esto marcando el contenido sensible como localOnly. También puede establecer una fecha de caducidad y tiempo para los datos.

Archivos que se guardan en el almacenamiento del dispositivo pueden automáticamente Haz copia de seguridad, en iTunes o iCloud. A pesar de copias de seguridad pueden ser codificados, es una buena idea para excluir los archivos sensibles que ni siquiera es necesario dejar el aparato. Esto puede hacerse estableciendo el indicador isExcludedFromBackup en el archivo.

La animación que sucede al poner una aplicación en segundo plano se logra tomar una captura de pantalla de la aplicación que luego utiliza para la animación de iOS. Cuando usted mira la lista de aplicaciones abiertas en el conmutador de la aplicación, esta captura de pantalla se utiliza allí también. La captura de pantalla se almacena en el dispositivo.

Es una buena idea para ocultar cualquier vistas revelar datos sensibles para que los datos no es capturados en la pantalla. Para ello, establecer una notificación cuando la aplicación se va al fondo y establecer la propiedad ocultada de los elementos de interfaz de usuario que desea excluir. Ocultará antes de que iOS captura la pantalla. Entonces cuando viene al primer plano, puede mostrar los elementos de la interfaz de usuario.

Eliminar las notificaciones cuando desaparece de la vista.

Su aplicación también tiene una caché de teclado para texto de los campos que ha permitido a auto corregir. Texto que el usuario escribe, junto con palabras recién aprendidas, se almacenan en la caché de modo que es posible recuperar varias palabras que el usuario ha introducido previamente en la aplicación. La única manera de desactivar el caché de teclado es desactivar la opción auto-correcta.

Debe marcar campos de contraseña como entrada de texto seguro. Asegure texto campos no mostrar la contraseña o utilizar la caché de teclado.

Depurar los registros se guardan en un archivo y se pudo recuperar para producción de estructuras de su aplicación. Incluso cuando eres codificación y depuración de su aplicación, asegúrese de no registrar información confidencial como las contraseñas y claves en la consola. Podría olvidar a eliminar esa información de los registros antes de enviar el código a la app store! Durante la depuración, es más seguro en su lugar usar un punto de interrupción para ver variables sensibles.

Conexiones de red pueden también conseguir en memoria caché para almacenamiento. Puede encontrar más información sobre eliminación y desactivación de la caché de la red en el artículo Comunicaciones de Seguridad  en iOS.

Destrucción de Datos

Usted puede saber ya que cuando se elimina un archivo en una computadora, a menudo el mismo archivo no se elimina; se elimina sólo la referencia para el archivo. Para eliminar realmente el archivo, puede sobrescribir el archivo con datos aleatorios antes de retirarlo.

El interruptor para unidades de estado sólido ha hecho difícil garantizar los datos ha sido destruidos, y la mejor forma para borrar con seguridad datos está abierta a debate. Sin embargo, este tutorial no sería completo sin un ejemplo de cómo eliminar datos del almacenamiento de información. Debido a algunos otros debates sobre el Swift optimizer, y porque queremos garantizar que cada byte del archivo es realmente se sobrescriban, estamos implementando esta función en C.

La siguiente aplicación puede ir dentro de un archivo .c. Usted tendrá que agregar la definición de la función o el archivo que contiene la función en su cabecera de puente para poder utilizar la función de Swift. Entonces puede llamar a esta función antes de lugares donde se usan métodos de removeFile de FileManager. Tal vez puede aplicar las mejores prácticas descritas en este y los próximos tutoriales sobre una actualización de la aplicación. Entonces podría limpiar los anteriores datos sin protección durante la migración.

Conclusión

En este artículo, han aprendido acerca de los permisos de configuración para los datos que su aplicación tiene acceso, como así también la forma para asegurar la integridad y protección de archivos básico. También vimos algunas maneras de que los datos del usuario podrían ser filtrados accidentalmente desde tu aplicación. Los usuarios depositan su confianza en ti para proteger sus datos. Después de estas mejores prácticas le ayudarán a devolver esa confianza.

Mientras estás aquí, revisa algunos de nuestros otros posts sobre desarrollo de aplicaciones iOS!


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.