48 votes

Meilleures pratiques pour la sécurité des applications iOS

En réfléchissant à la sécurité des applications iPhone/iPad, je constate qu'il y en a une :

  • Des outils de piratage largement disponibles permettent d'accéder au système de fichiers.
  • Interception du réseau, attaque des hommes au milieu

\==> menace de vol de données

et aussi :

  • Disponibilité d'outils de piratage permettant de partager librement une application payante avec des amis/la communauté (vu dans Cydia)
  • Disponibilité d'outils de piratage permettant d'obtenir des achats in app sans payer (vu dans Cydia, et entendu dire que cela ne fonctionne avec aucune application)

\==> Menace de perte de revenus

Donc, je me pose la question #1 Quelles sont les meilleures pratiques pour obtenir une meilleure sécurité dans une application iOS ? Aussi, #2 quelles sont les meilleures façons de réduire les pertes de revenus et de minimiser l'exposition au piratage informatique ? ?

pour #1 J'ai vu des diapositives de la WWDC sur la sécurité. 1 2 3 4 + documents sur la pomme

et je peux dire qu'entre ces meilleures pratiques, il y en a :

  • Utilisation d'API offrant une protection des données (comme NSFileManager avec l'attribut NSFileProtectionKey)
  • Utilisation du trousseau de clés
  • Protection des données sensibles avec SSL et utilisation de certificats

pour #2 Je pense que l'utilisation d'un modèle économique basé sur une application gratuite, puis l'achat in app avec vérification des reçus en magasin peut être le modèle avec une perte de revenus minimale.

Quelles sont vos meilleures pratiques en matière de sécurité, et la meilleure façon de minimiser les risques de piratage des applications ?

71voto

Rob Napier Points 92148

1 Quelles sont les meilleures pratiques pour obtenir une meilleure sécurité dans une application iOS ?

La sécurité appropriée des données dépend fortement de la nature de l'information. S'agit-il d'une information à long terme ou à court terme ? S'agit-il d'un identifiant général qui peut être utilisé pour ouvrir d'autres choses, ou d'une seule donnée ? La perte potentielle est-elle d'ordre privé, financier ou sécuritaire ? Déterminer les protections appropriées nécessite un cas spécifique et n'a pas de réponse générale. Mais vous demandez les meilleures pratiques et il en existe plusieurs. Aucune d'entre elles n'est parfaite ou incassable. Mais ce sont des bonnes pratiques. En voici quelques-unes :

  • Stockez les informations sensibles dans le trousseau de clés
  • Régler la protection des données sur NSFileProtectionComplete dans la mesure du possible.
  • Ne stockez pas de données sensibles dont vous n'avez pas réellement besoin, ou pour une durée supérieure à celle dont vous avez besoin.
  • Stockez des jetons d'authentification spécifiques à l'application plutôt que des mots de passe.
  • Utilisez HTTPS pour vérifier le serveur que vous contactez. N'acceptez jamais un certificat non valide ou non fiable.
  • Lors de la connexion à votre propre serveur, validez que le service présente un certificat qui vous ont signé, et pas seulement "un certificat de confiance".

Il ne s'agit là que d'une poignée d'approches, mais elles donnent le ton :

  • Utilisez les API intégrées pour stocker des objets. Comme Apple améliore la sécurité, vous en bénéficiez gratuitement.
  • Évitez de stocker des informations sensibles et réduisez au minimum la sensibilité de celles que vous stockez.
  • Vérifiez les services avec lesquels vous communiquez.

2 quels sont les meilleurs moyens de réduire les pertes de revenus et de minimiser l'exposition au piratage ?

Ce point a été discuté à de nombreuses reprises sur le SO. Cette réponse comprend des liens vers plusieurs des autres discussions :

Cryptage sécurisé https pour les applications iPhone vers les pages web

En bref, il faut se préoccuper de ses clients, pas de ses non-clients. De nombreux pirates ne vous paieront jamais, au grand jamais. Vous feriez mieux de consacrer votre temps et votre argent à aider vos clients réels à vouloir vous payer, et à leur faciliter la tâche. Concentrez-vous sur le fait de gagner plus d'argent plutôt que de vous protéger de l'argent que vous ne pourrez jamais avoir. N'essayez jamais, au grand jamais, de contrarier un client qui paie en essayant de punir un client qui ne paie pas. La vengeance est un jeu de dupes et un gaspillage de ressources.

Il existe deux grands moyens d'éviter le piratage :

  • Ne pas publier.
  • Publier des déchets dont personne ne veut.

Vous pouvez prendre certaines mesures de base qui valent la peine, comme on dit, pour que les gens honnêtes restent honnêtes (certaines sont abordées dans les diverses discussions liées). Mais ne passez pas des nuits blanches à vous inquiéter de la façon de déjouer les pirates. Réveillez-vous en vous préoccupant de savoir comment étonner vos clients.

Et n'oubliez jamais : Apple dépense plus d'argent que la plupart d'entre nous n'en ont jamais vu dans leur vie pour sécuriser l'iPhone. Et pourtant il est jailbreaké. Pensez à ce que votre budget va vous permettre de réaliser.

0 votes

Merci pour cette réponse. Le problème avec le point 2 est que parfois nous pouvons utiliser un service tiers payant, de sorte qu'il est important de réduire l'exposition au piratage en raison des coûts supplémentaires qu'il entraînera.

5 votes

Vous ne ferez jamais disparaître ce problème ; votre véritable objectif est de faire en sorte que les pertes représentent un pourcentage acceptable du chiffre d'affaires net. Considérez-le comme un vol à l'étalage et traitez-le en conséquence. (Si le Kwiki-Mart s'assurait que personne ne puisse voler à l'étalage, personne ne voudrait y faire ses courses). Ceci dit, pour aider à résoudre ce problème, si possible, liez vos revenus aux personnes plutôt qu'aux appareils. Ensuite, authentifiez la personne, pas le logiciel. Ensuite, surveillez les comportements inappropriés des utilisateurs et fermez les comptes. C'est en gros le modèle WoW. Mais ne dépensez jamais plus pour la mise en application que pour les pertes réelles.

2 votes

Une autre note complémentaire ici : Il y a le danger d'un DoS financier contre vous avec ce genre de situations. Quelqu'un inonde intentionnellement votre système afin de vous faire dépenser de l'argent sans limite. La première chose à faire est de travailler avec votre fournisseur tiers pour atténuer ce risque. Au minimum, en mettant une sorte de plafond sur vos dommages en cas d'utilisation malveillante. Parlez-en avec eux ; vous leur client. Au-delà de cela, je recommande des protections normales contre les attaques DoS. Recherchez les inondations provenant d'une source unique et coupez-les si elles dépassent des limites raisonnables (et bippez quelqu'un), etc.

7voto

Sulthan Points 23360

Lorsque l'attaquant obtient un accès physique à l'appareil (par exemple, en cas de vol), il peut faire presque n'importe quoi. Notez qu'il est très facile de lire les fichiers d'application. Un appareil volé peut être facilement jailbreaké et l'attaquant peut accéder même aux fichiers protégés.

Mon conseil pour le stockage de données sensibles sur l'appareil :

  1. ne le faites pas s'ils peuvent être stockés sur un serveur sécurisé
  2. utiliser votre propre cryptage, décrypter lorsque l'utilisateur est connecté, supprimer le fichier décrypté lorsqu'il se déconnecte ou après un certain temps où l'application est en arrière-plan.
  3. chaque mot de passe et clé de cryptage doit être stocké dans le trousseau.

5voto

satishb3 Points 51

Rob Napier a mentionné de bons points. Mais pour le rendre plus sûr,

1 Quelles sont les meilleures pratiques pour obtenir une meilleure sécurité dans une application iOS ?

  1. Stockez les informations sensibles au format crypté dans le trousseau de clés.
    • En cas d'accès physique à l'appareil, les données du trousseau peuvent être vidées facilement.
  2. Définissez la classe de protection des données appropriée (NSFileProtectionComplete de préférence).
  3. Utilisez toujours un cryptage personnalisé et une API intégrée pour stocker les données.
    • Même si les pirates trouvent des failles dans l'API intégrée, votre application est sécurisée.
  4. Surécriture des données stockées temporairement avant leur suppression.
    • Des techniques médico-légales peuvent être utilisées pour récupérer les données supprimées.
  5. Utilisez HTTPS et l'épinglage des certificats. N'acceptez jamais de certificats non fiables.
  6. Stockez les fichiers plist, sqlite, etc... importants dans le dossier Library/caches.
    • Les fichiers stockés dans le dossier des caches ne sont pas sauvegardés avec iTunes.
  7. Construisez toujours l'application avec la dernière version de XCode.
    • Ajout d'un support uniquement pour les derniers Ciphers SSL

2 Quelles sont les meilleures façons de réduire les pertes de revenus et de minimiser l'exposition au piratage ?

Il n'est peut-être pas possible d'arrêter le piratage, mais nous pouvons le rendre plus difficile.

  1. Empêcher l'application de fonctionner sur les appareils Jailbroken (réfléchissez-y à deux fois, vous risquez de perdre des clients valides).
    • Ajouter un code qui détecte l'existence de Jailbreak
  2. Empêcher l'application de s'attacher aux débogueurs
    • Les applications téléchargées depuis l'AppStore sont cryptées. Les débogueurs sont utilisés pour décrypter et analyser l'application. Ajoutez du code qui détecte les débogueurs.

2 votes

"Les données du trousseau peuvent être vidées facilement" Pas sans le PIN/passphrase de l'utilisateur.

2voto

max_ Points 7970

Cela varie vraiment en fonction de ce que vous faites. Pour ce qui est de l'accès à une API, il suffit de hacher et/ou de saler les informations relatives à l'utilisateur, puis de les enregistrer (si nécessaire) dans le trousseau (vous pouvez ajouter une sécurité supplémentaire en cryptant les mots de passe avant de les placer dans le trousseau). Il est préférable de ne pas utiliser NSUserDefaults car les données saisies sont stockées dans un fichier .txt sur le système de fichiers de l'iPhone, qui, comme vous l'avez dit, peut être accessible aux pirates.

0 votes

Peut seulement be accessed by hackers si votre téléphone est volé, j'ai raison ? :)

0voto

kadar Points 51

En ajouter d'autres pour améliorer la sécurité de l'application

  • N'envoyez pas de paramètres en utilisant HTTP GET mais plutôt HTTP POST.
  • Vous pouvez utiliser l'épinglage SSL pour éviter les attaques MITM.
  • Supprimez tous les journaux de la source avant de passer en production.
  • Ne codez pas en dur les clés de chiffrement dans l'application elle-même, il est préférable de les conserver à distance.
  • Lorsque vous faites une demande, utilisez toujours la dernière version de SSL (TLSv1.2).
  • Si votre application comporte des WebViews, faites attention à l'injection de liens. Si vous n'attendez aucune URL autre que HTTP dans la WebView, vérifiez toutes les URL de redirection avec le préfixe "http" afin que le site Web chargé ne permette pas l'ouverture d'autres liens.
  • Vous pouvez choisir d'autoriser ou de bloquer les extensions de clavier, car elles écoutent toutes vos frappes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X