Première règle de sécurité des applications: Toute machine à laquelle un attaquant sans restriction physique ou électronique d'accès appartient maintenant à votre attaquant, indépendamment de l'endroit où il est réellement ou ce que vous avez payé pour cela.
Deuxième règle d'application de la sécurité: Tout logiciel qui laisse les limites physiques à l'intérieur de laquelle un attaquant ne peut pas pénétrer appartient désormais à votre agresseur, peu importe combien de temps vous avez passé à coder ça.
Troisième règle: Toute information qui laisse ces mêmes limites physiques qu'un attaquant ne peut pas pénétrer appartient désormais à votre agresseur, peu importe combien il est utile de vous.
Les fondements de la technologie de l'information de sécurité sont basées sur ces trois principes fondamentaux; la seule véritable sécurité de l'ordinateur est le seul enfermé dans un coffre, à l'intérieur d'une cage de Farraday, à l'intérieur d'une cage en acier. Il y a des ordinateurs qui passent la plupart de leur durée de vie soit juste cet état; une fois par an (ou moins), ils génèrent les clés privées des autorités de certification racine approuvées (devant une foule de témoins, avec des caméras d'enregistrement pour chaque pouce de la pièce dans laquelle ils se trouvent).
Maintenant, la plupart des ordinateurs ne sont pas utilisés dans ces types de milieux; ils sont physiquement dehors dans l'ouvert, connecté à Internet sur un réseau sans fil station de radio. En bref, ils sont vulnérables, de même que leur logiciel. Ils sont, par conséquent, de ne pas être digne de confiance. Il y a certaines choses que les ordinateurs et leurs logiciels doivent savoir ou faire pour être utile, mais des précautions doivent être prises pour s'assurer qu'ils ne peuvent jamais savoir ou faire assez pour causer des dommages (au moins pas de dommages permanents à l'extérieur des limites de la machine seule).
Vous saviez déjà tout cela; c'est pourquoi vous êtes en essayant de protéger le code de votre application. Mais, c'est là le premier problème; l'obscurcissement outils peuvent rendre le code un gâchis pour un humain pour essayer de creuser à travers, mais le programme reste à exécuter; que le cheminement logique de l'application et les données qu'il utilise ne sont pas affectés par l'obscurcissement. Avec un peu de ténacité, un attaquant peut simplement des nations unies-obfusquer le code, et qui n'est même pas nécessaire, dans certains cas, où ce qu'il cherche à ne peut pas être autre chose que ce qu'il cherche.
Au lieu de cela, vous devriez être en essayant de faire en sorte qu'un attaquant ne peut pas faire n'importe quoi avec votre code, peu importe combien il est facile pour lui d'obtenir une copie claire de. Cela signifie que, pas codé en dur secrets, parce que ces secrets ne sont pas un secret dès que le code des feuilles de l'immeuble dans lequel vous l'avez développée.
Ces valeurs-clés que vous avez codé en dur doit être supprimé de l'application du code source entièrement. Au lieu de cela, ils doivent être dans l'un des trois endroits; volatile de la mémoire sur l'appareil, ce qui est plus difficile (mais pas impossible) pour un attaquant d'obtenir une copie hors connexion de; de manière permanente sur le serveur de cluster, à qui vous contrôle d'accès avec un poing de fer, ou dans un deuxième magasin de données sans rapport avec votre appareil ou des serveurs, comme une carte physique ou de l'utilisateur de votre souvenirs (ce qui signifie qu'il sera finalement dans une mémoire volatile, mais il n'a pas à être pour longtemps).
Considérons le schéma suivant. L'utilisateur saisit ses informations d'identification pour l'application de la mémoire dans l'appareil. Vous devez, malheureusement, la confiance que l'appareil de l'utilisateur n'est pas déjà compromise par un keylogger ou un cheval de Troie; le meilleur que vous pouvez faire à cet égard est la mise en œuvre multi-facteur de sécurité, en se souvenant de dur-à-faux des informations d'identification concernant les appareils que l'utilisateur a utilisé (MAC/IP, IMEI, etc), et de fournir au moins un canal supplémentaire par lequel une tentative de connexion sur un nouveau périphérique peut être vérifiée.
Les informations d'identification, une fois entré, camouflés par le logiciel client (à l'aide d'un hachage sécurisé), et la plaine de texte les informations d'identification rejetés; ils ont servi leur but. L'obfuscation les informations d'identification sont transmises sur un canal sécurisé pour le certificat de serveur authentifié, qui hachages eux à nouveau pour produire les données utilisées pour vérifier la validité de la connexion. De cette façon, le client ne sait jamais ce qui est réellement par rapport à la valeur de base de données, le serveur d'application ne sait jamais le texte en clair des informations d'identification derrière ce qu'il reçoit pour la validation, le serveur de données ne sait jamais comment les données qu'elle stocke de la validation est produite, et un homme dans le milieu ne voit que du charabia, même si le canal sécurisé a été compromise.
Une fois cette vérification effectuée, le serveur transmet en retour un jeton sur le canal. Le jeton n'est utile que dans la session sécurisée, se compose de bruit aléatoire ou chiffré (et donc vérifiables) copie des identifiants de session, et l'application client doit envoyer ce jeton sur le même canal sur le serveur dans le cadre de toute demande de faire quelque chose. L'application cliente de faire de nombreuses fois, car il ne peut pas faire quelque chose impliquant de l'argent, des données sensibles, ou toute autre chose qui pourrait être préjudiciable par lui-même; il doit, au contraire, demandez au serveur pour effectuer cette tâche. L'application cliente de ne jamais écrire toute information à caractère sensible de la persistance de la mémoire sur l'appareil lui-même, du moins pas dans le texte; le client peut demander au serveur à travers le canal sécurisé par une clé symétrique pour chiffrer des données locales, dont le serveur n'oubliez pas que dans une session ultérieure, le client peut demander au serveur pour la même clé pour déchiffrer les données pour les utiliser dans la mémoire volatile. Que les données ne seront pas la seule copie, soit; tout ce que le client stocke doivent également être transmises sous une certaine forme, le serveur.
De toute évidence, ce qui rend votre application dépend fortement de l'accès Internet, le client périphérique ne peut pas accomplir l'une de ses fonctions de base, sans une bonne connexion et l'authentification par le serveur. Pas différent de Facebook, vraiment.
Maintenant, l'ordinateur que l'attaquant veut, c'est votre serveur, parce que c'et pas de l'application client/de l'appareil est la chose qui peut lui faire de l'argent ou de provoquer d'autres personnes de la douleur pour sa jouissance. C'est OK, vous obtenez beaucoup plus pour votre argent dépenser de l'argent et des efforts pour sécuriser le serveur que pour essayer de garantir que tous les clients. Le serveur peut être derrière tous les types de pare-feux et autres moyens électroniques de sécurité, et de plus, ils peuvent être physiquement sécurisés au moyen de l'acier, du béton, de keycard/pin d'accès et de surveillance vidéo 24 heures. L'attaquant aurait besoin d'être très sophistiqué en effet d'acquérir tout type d'accès à directement sur le serveur, et vous ne le sais tout de suite.
Le meilleur, un attaquant peut faire est de voler le téléphone de l'utilisateur et les informations d'identification et de vous connecter sur le serveur avec les droits limités du client. Si cela se produit, tout comme la perte d'une carte de crédit, le légitime utilisateur doit être instruit pour appeler un numéro 800 (de préférence facile à retenir, et pas sur le dos d'une carte qu'ils allaient l'emporter dans leur sac à main, un portefeuille ou un porte-documents qui pourraient être volés aux côtés de l'appareil mobile) à partir de n'importe quel téléphone, ils peuvent accéder à qui les relie directement à votre service à la clientèle. Ils déclarent leur téléphone a été volé, de fournir quelques éléments de base d'un identifiant unique, et le compte est verrouillé, toutes les transactions à l'attaquant peut avoir été en mesure de traiter sont annulées, et de l'attaquant est de retour à la case départ.