Meilleures pratiques pour la security des applications iOS

En pensant à la security des applications iPhone / iPad, je peux remarquer qu'il y a:

  • Des outils de piratage largement disponibles permettent l'access au système de files
  • Interception de réseau, les hommes dans l'attaque du milieu

==> menace de vol de données

et aussi:

  • Disponibilité d'outils de piratage qui permettent de partager librement une application payante avec des amis / communauté (vu dans Cydia)
  • Disponibilité d'outils de piratage qui permettent d'get des achats dans l'application sans payer (vu dans Cydia, et entendu que cela ne fonctionne pas avec n'importe quelle application)

==> Menace de perte de revenus

Donc, je me request # 1 quelles sont les meilleures pratiques pour get une meilleure security dans l'application iOS? Aussi, # 2 quels sont les meilleurs moyens de réduire la perte de revenus et de minimiser l'exposition au piratage ?

pour # 1, j'ai vu quelques diapositives WWDC sur la security 1 2 3 4 + apple docs

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

  • Utilisation d'API offrant une protection des données (comme NSFileManager avec l'atsortingbut NSFileProtectionKey)
  • Utilisation de Keychain
  • Protéger datatables sensibles avec SSL et utiliser des certificates

Pour # 2, je pense que l'utilisation d'un model d'entreprise basé sur une application gratuite, puis l'in app purchase avec la vérification des recettes du magasin peut être le model avec une perte de revenu minimum.

Quelles sont vos meilleures pratiques en matière de security et quel est le meilleur moyen de minimiser les risques de piratage?

# 1 quelles sont les meilleures pratiques pour get une meilleure security dans l'application iOS?

La security appropriée des données dépend fortement de la nature de l'information. Est-ce que c'est une vie longue ou courte? Est-ce un titre de compétence général qui peut être utilisé pour ouvrir d'autres choses, ou une seule donnée? La perte potentielle de vie privée, financière ou de security? Déterminer les protections appropriées nécessite un cas spécifique et n'a pas de réponse générale. Mais vous requestz des bonnes pratiques et il y en a plusieurs. Aucun d'entre eux n'est parfait ou incassable. Mais ce sont les meilleures pratiques. Voici quelques-uns:

  • Stocker des informations sensibles dans Keychain
  • Définissez Data Protection sur NSFileProtectionComplete mesure du possible.
  • Ne stockez pas datatables sensibles dont vous n'avez pas réellement besoin, ou pour plus longtime que nécessaire.
  • Stockez les jetons d'authentification spécifiques à l'application plutôt que les passwords.
  • Utilisez HTTPS pour vérifier le server que vous contactez. N'acceptez jamais un certificate non valide ou non approuvé.
  • Lorsque vous vous connectez à votre propre server, validez que le service présente un certificate que vous avez signé, pas seulement un «certificate de confiance».

Ceci est juste une poignée d'approches, mais ils définissent le ton de base:

  • Utilisez les API embeddedes pour stocker les éléments. Comme Apple améliore la security, vous obtenez les avantages gratuitement.
  • Évitez de stocker des informations sensibles et minimisez la sensibilité de ce que vous stockez.
  • Vérifiez les services avec lesquels vous communiquez.

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

Cela a été discuté à plusieurs resockets sur SO. Cette réponse inclut des liens vers plusieurs autres discussions:

Cryptage https sécurisé pour l'application iPhone sur la page Web

La réponse courte est: s'inquiéter de vos clients, pas de vos non-clients. De nombreux pirates ne vous paieront jamais de l'argent, alors votre time et votre argent seront mieux dépensés en aidant vos clients à vous payer et en leur facilitant le travail. Concentrez-vous sur faire plus d'argent plutôt que de vous protéger contre de l'argent que vous ne pourriez jamais avoir. Ne jamais, jamais, cocher un client payant dans vos efforts pour châtier un client non-payant. La vengeance est un jeu de meunier et un gaspillage de ressources.

Il y a deux façons d'éviter le piratage:

  • Ne pas publier.
  • Publier indésirable que personne ne veut.

Il y a des choses de base que vous pouvez faire qui en valent la peine, comme on dit, pour garder les gens honnêtes honnêtes (certains sont discutés dans les différentes discussions liées). Mais ne restz pas éveillés des nuits à vous inquiéter de la façon de contrecarrer les pirates. Lie éveillé s'inquiéter de la façon d'étonner vos clients.

Et callbackez-vous toujours: Apple dépense plus d'argent que la plupart d'entre nous ont jamais vu dans nos vies en essayant de sécuriser l'iPhone. Pourtant, c'est jailbreaké. Pensez à ce que votre budget va réaliser.

Lorsque l'attaquant obtient un access physique à l'appareil (par exemple le vol), il peut presque tout faire. Notez qu'il est très facile de lire les files d'application. L'appareil volé peut être jailbreaké facilement et l'attaquant peut même accéder aux files protégés.

Mon conseil pour stocker des données sensibles sur l'appareil:

  1. ne le faites pas s'ils peuvent être stockés sur un server sécurisé
  2. utilisez votre propre chiffrement, décryptez lorsque l'user est connecté, supprimez le file déchiffré quand il se déconnecte ou après un certain time, l'application est en arrière-plan.
  3. chaque mot de passe et key de chiffrement doivent être stockés dans le trousseau.

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

1 Quelles sont les meilleures pratiques pour get une meilleure security dans l'application iOS?

  1. Stocker des informations sensibles dans un format crypté dans Keychain.
    • Lors de l'access physique au périphérique, datatables du trousseau peuvent être facilement sauvegardées.
  2. Définissez la class de protection des données appropriée (NSFileProtectionComplete préférable).
  3. Utilisez toujours un encryption personnalisé avec l'API embeddede pour stocker datatables.
    • Même si les hackers trouvent des failles dans l'API embeddede, votre application est sécurisée.
  4. Écrase datatables stockées temporaires avant la suppression.
    • Les techniques médico-légales peuvent être utilisées pour récupérer datatables supprimées.
  5. Utilisez HTTPS et l'épinglage des certificates. N'acceptez jamais de certificates non approuvés.
  6. Stockez les files plist, sqlite, etc … importants dans le dossier Library / caches.
    • Les files stockés dans le dossier caches ne sont pas sauvegardés avec iTunes.
  7. Construisez toujours l'application avec le dernier XCode.
    • Ajoute la prise en charge uniquement pour les derniers chiffrements SSL

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

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

  1. Empêcher l'application de s'exécuter sur les appareils Jailbroken (pensez à deux fois, vous risquez de perdre des clients valides)
    • Ajouter du code qui détecte l'existence de Jailbreak
  2. Empêcher l'application de se connecter aux débogueurs
    • Les applications téléchargées à partir de l'AppStore sont cryptées. Les débogueurs sont utilisés pour déchiffrer et parsingr l'application. Ajoutez du code qui détecte les débogueurs.

Cela varie vraiment en fonction de ce que vous faites. En ce qui concerne l'access à une API, tout ce que vous devez faire est de hacher et / ou de saler les informations de l'user puis sauvegarder les informations dans le trousseau (vous pouvez append une security supplémentaire en chiffrant les passwords avant de les introduire dans le trousseau. mieux vaut ne pas utiliser NSUserDefaults car datatables qui y sont inputs sont stockées dans un file .txt sur le système de files de l'iPhone, qui, comme vous l'avez dit, est accessible aux pirates informatiques.