Sécuriser les données iOS au repos: protéger les données de l’utilisateur

Ceci est le premier de trois articles sur la sécurisation des données utilisateur au repos. Dans cet article, nous commencerons par les bases de la protection des données sur iOS afin que vous puissiez découvrir les meilleures pratiques actuelles pour stocker des données en toute sécurité avec Swift.

Toute application qui enregistre les données de l’utilisateur doit veiller à la sécurité et à la confidentialité de ces données. Comme nous l’avons vu avec les violations de données récentes, le fait de ne pas protéger les données stockées de vos utilisateurs peut avoir des conséquences très graves. Dans ce didacticiel, vous découvrirez quelques bonnes pratiques pour protéger les données de vos utilisateurs.

Autorisations

Avant de commencer à stocker vos données personnalisées, examinons les données qui peuvent être partagées par les applications système.

Pour de nombreuses versions d’iOS, il a été nécessaire de demander des autorisations d’application pour utiliser et stocker certaines des données privées de l’utilisateur externes à l’application, par exemple lors de l’enregistrement et du chargement des images dans la bibliothèque de photos. À partir d’iOS 10, toutes les API qui accèdent aux données privées de l’utilisateur vous obligent à déclarer cet accès à l’avance dans votre projet. info.plist fichier.

Il existe de nombreux frameworks qui peuvent accéder aux données en dehors de votre application, et chaque framework a une clé de confidentialité correspondante.

  • Partage Bluetooth: NSBluetoothPeripheralUsageDescription
  • Calendrier: NSCalendarsUsageDescription
  • CallKit: NSVoIPUsageDescription
  • Caméra: NSCameraUsageDescription
  • Contacts: NSContactsUsageDescription
  • Santé: NSHealthShareUsageDescription, NSHealthUpdateUsageDescription
  • AccueilKit: NSHomeKitUsageDescription
  • Emplacement: NSLocationAlwaysUsageDescription, NSLocationUsageDescription, NSLocationWhenInUseUsageDescription
  • Médiathèque: NSAppleMusicUsageDescription
  • Microphone: NSMicrophoneUsageDescription
  • Mouvement: NSMotionUsageDescription
  • Photos: NSPhotoLibraryUsageDescription
  • Rappels: NSRemindersUsageDescription
  • Reconnaissance de la parole: NSSpeechRecognitionUsageDescription
  • SiriKit: NSSiriUsageDescription
  • Fournisseur de télévision: NSVideoSubscriberAccountUsageDescription

Par exemple, voici une entrée dans info.plist pour permettre à votre application de charger et de stocker des valeurs dans le calendrier.

Si une description d’utilisation est manquante lorsque l’API tente d’accéder aux données, l’application se bloque simplement.

L’API de protection des données

Pour toutes les données utilisateur internes à l’application, la première chose à considérer est de savoir si vous devez stocker les informations et quelles données sont essentielles à l’application. Conservez autant de ces données essentielles dans la mémoire de travail que dans le stockage de fichiers. Ceci est particulièrement important pour toute information personnellement identifiable.

Mais, si vous devez stocker des données, c’est une bonne idée d’activer la protection des données d’Apple.

La protection des données chiffre le contenu du conteneur de votre application. Il repose sur le fait que l’utilisateur possède un mot de passe, et donc la sécurité du cryptage est liée à la force du mot de passe. Avec Touch ID et le cryptage du système de fichiers mis à niveau introduit dans iOS 10.3, le système de protection des données a connu de nombreuses améliorations. Vous pouvez activer la protection des données dans votre application en activant Protection des données dans le Capacités section de votre fichier de projet. Cela met à jour votre profil d’approvisionnement et votre fichier de droits pour inclure la fonctionnalité de protection des données. La protection des données offre quatre niveaux de protection, décrits par le FileProtectionType structure:

  • none: pas de protection.
  • complete: les données ne sont pas accessibles tant que l’appareil est verrouillé. Il s’agit du paramètre recommandé pour la plupart des applications.
  • completeUnlessOpen: les données sont accessibles lorsque l’appareil est déverrouillé, et restent accessibles jusqu’à ce que le fichier soit fermé, même si l’utilisateur verrouille l’appareil. Des fichiers peuvent également être créés lorsque l’appareil est verrouillé. Cette option est utile lorsque vous devez ouvrir un fichier à traiter et que le processus se poursuive même si l’utilisateur met l’application en arrière-plan et verrouille l’appareil. Un exemple pourrait être un travail qui télécharge un fichier sur un serveur.
  • completeUntilFirstUserAuthentication: lorsque l’appareil est démarré, les fichiers ne sont pas accessibles tant que l’utilisateur n’a pas d’abord déverrouillé l’appareil. Après cela, les fichiers sont disponibles même lorsque l’appareil est à nouveau verrouillé. Cette option convient aux fichiers auxquels il est nécessaire d’accéder plus tard en arrière-plan lorsque le périphérique est verrouillé, par exemple pendant une tâche de récupération en arrière-plan.

complete est le niveau par défaut. Pour éviter les plantages lorsque votre code tente d’accéder à des données verrouillées, vous pouvez vous inscrire aux notifications via UIApplicationProtectedDataDidBecomeAvailable et UIApplicationProtectedDataWillBecomeUnavailable pour savoir quand les données sont disponibles.

De plus, vous pouvez également vérifier le UIApplication.shared.isProtectedDataAvailable drapeau.

Une chose importante à garder à l’esprit lors de l’activation de la protection des données est que si vous utilisez des services d’arrière-plan tels que la récupération en arrière-plan, ce code peut avoir besoin d’accéder à vos données en arrière-plan lorsque l’appareil est verrouillé. Pour ces fichiers, vous devrez définir un niveau de protection de completeUntilFirstUserAuthentication. Vous pouvez contrôler le niveau de protection de chaque fichier individuellement lors de la création de fichiers et de répertoires à l’aide du FileManager classe.

Vous pouvez également définir le niveau de protection lorsque vous écrivez dans un fichier. le Data object a une méthode qui peut écrire ses données dans un fichier, et vous pouvez définir le niveau de protection lorsque vous appelez cette méthode.

Vous pouvez également définir le niveau de protection lors de la configuration de votre modèle Core Data.

En relation :  Le meilleur navigateur Web pour Amazon Fire TV Stick: Firefox vs Silk

Pour modifier le niveau de protection d’un fichier existant, utilisez ce qui suit:

Intégrité des données

Une partie de la protection de vos données stockées comprend la vérification de leur intégrité. Il est recommandé de ne pas faire confiance aveuglément aux données que vous chargez à partir du stockage; il peut avoir été modifié accidentellement ou par malveillance. le NSSecureCoding Le protocole peut être utilisé pour charger et enregistrer en toute sécurité vos objets de données à partir du stockage. Il s’assurera que les objets que vous chargez contiennent les données attendues. Si vous souhaitez enregistrer votre propre objet, vous pouvez vous conformer au protocole de codage sécurisé de votre classe.

La classe doit être héritée de NSObject. Ensuite, pour activer le codage sécurisé, remplacez le supportsSecureCoding méthode de protocole.

Si votre objet personnalisé est désérialisé avec init?(coder aDecoder: NSCoder), le decodeObject(forKey:) la méthode doit être remplacée par decodeObject(of:forKey:), ce qui garantit que les types d’objet corrects sont décompressés du stockage.

Si vous utilisez NSKeyedUnarchiver pour charger les données du stockage, assurez-vous de définir son requiresSecureCoding propriété.

L’activation du codage sécurisé pour vos opérations de sauvegarde vous évitera d’archiver accidentellement un objet qui ne respecte pas le protocole de codage sécurisé.

Au-delà NSSecureCoding, il est toujours bon de mettre en œuvre vos propres contrôles de validation des données lors du déballage d’une archive ou de la réception d’une entrée arbitraire en général.

Trails de données

Alors qu’iOS continue d’évoluer, il existe toujours de nouvelles fonctionnalités susceptibles de faire fuir les données stockées. À partir d’iOS 9, vous pouvez indexer votre contenu dans la recherche Spotlight, et sur iOS 10, vous pouvez exposer votre contenu à des widgets tels que le widget Aujourd’hui qui apparaît sur l’écran de verrouillage. Soyez prudent si vous souhaitez exposer votre contenu avec ces nouvelles fonctionnalités. Vous pourriez finir par en partager plus que prévu!

iOS 10 ajoute également une nouvelle fonctionnalité Handoff où vos données de table de montage copiées sont automatiquement partagées entre les appareils. Encore une fois, veillez à ne pas exposer les données sensibles de la table de montage à Handoff. Vous pouvez le faire en marquant le contenu sensible comme localOnly. Vous pouvez également définir une date et une heure d’expiration pour les données.

Les fichiers enregistrés sur le stockage de l’appareil peuvent être automatiquement sauvegardés, soit dans iTunes, soit dans iCloud. Même si les sauvegardes peuvent être chiffrées, il est judicieux d’exclure tous les fichiers sensibles qui n’ont même pas besoin de quitter l’appareil. Cela peut être fait en réglant le isExcludedFromBackup drapeau sur le fichier.

L’animation qui se produit lors de la mise en arrière-plan d’une application est réalisée par iOS en prenant une capture d’écran de votre application qu’il utilise ensuite pour l’animation. Lorsque vous regardez la liste des applications ouvertes sur le sélecteur d’applications, cette capture d’écran est également utilisée. La capture d’écran est stockée sur l’appareil.

En relation :  Comment construire votre propre tablette Android avec Raspberry Pi

C’est une bonne idée de masquer toutes les vues révélant des données sensibles afin que les données ne soient pas capturées dans la capture d’écran. Pour ce faire, configurez une notification lorsque l’application passe en arrière-plan et définissez la propriété masquée pour les éléments d’interface utilisateur que vous souhaitez exclure. Ils seront masqués avant qu’iOS ne capture l’écran. Ensuite, lorsque vous arrivez au premier plan, vous pouvez afficher les éléments de l’interface utilisateur.

Supprimez vos notifications lorsque la vue disparaît.

Votre application dispose également d’un cache clavier pour les champs de texte sur lesquels la correction automatique est activée. Le texte que l’utilisateur tape, ainsi que les mots nouvellement appris, sont stockés dans le cache afin qu’il soit possible de récupérer divers mots que l’utilisateur a précédemment saisis dans votre application. La seule façon de désactiver le cache du clavier est de désactiver l’option de correction automatique.

Vous devez marquer les champs de mot de passe comme saisie de texte sécurisée. Les champs de texte sécurisés n’affichent pas le mot de passe et n’utilisent pas le cache du clavier.

Les journaux de débogage sont enregistrés dans un fichier et peuvent être récupérés pour les versions de production de votre application. Même lorsque vous codez et déboguez votre application, assurez-vous de ne pas consigner les informations sensibles telles que les mots de passe et les clés dans la console. Vous pourriez oublier de supprimer ces informations des journaux avant de soumettre votre code à l’App Store! Lors du débogage, il est plus sûr d’utiliser un point d’arrêt pour afficher les variables sensibles.

Les connexions réseau peuvent également être mises en cache dans le stockage. Vous trouverez plus d’informations sur la suppression et la désactivation du cache réseau dans l’article Sécurisation des communications sur iOS.

Détruire des données

Vous savez peut-être déjà que lorsqu’un fichier sur un ordinateur est supprimé, souvent le fichier lui-même n’est pas supprimé; seule la référence du fichier est supprimée. Pour supprimer réellement le fichier, vous pouvez écraser le fichier avec des données aléatoires avant de le supprimer.

Le passage aux disques SSD a rendu difficile la garantie de la destruction des données, et la meilleure façon de supprimer les données en toute sécurité est sujette à débat. Cependant, ce didacticiel ne serait pas complet sans un exemple de suppression des données du stockage. En raison d’autres débats sur l’optimiseur Swift, et parce que nous espérons garantir que chaque octet du fichier est réellement écrasé, nous implémentons cette fonction en C.

L’implémentation ci-dessous peut aller dans un fichier .c. Vous devrez ajouter la définition de fonction ou le fichier qui contient la fonction dans votre en-tête de pontage afin d’utiliser la fonction de Swift. Vous pouvez alors appeler cette fonction juste avant les endroits où vous utilisez FileManagerde removeFile méthodes. Vous voudrez peut-être mettre en œuvre les meilleures pratiques décrites dans ce didacticiel et les prochains didacticiels sur une mise à jour d’application. Vous pouvez ensuite effacer les données non protégées précédentes pendant la migration.

Conclusion

Dans cet article, vous avez appris à définir des autorisations pour les données auxquelles votre application a accès, ainsi qu’à garantir la protection et l’intégrité de base des fichiers. Nous avons également examiné certaines façons dont les données utilisateur pourraient être divulguées accidentellement depuis votre application. Vos utilisateurs vous font confiance pour protéger leurs données. Suivre ces meilleures pratiques vous aidera à rembourser cette confiance.

Pendant que vous êtes ici, consultez certains de nos autres articles sur le développement d’applications iOS!

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.