Stockage sécurisé des informations d'identification en python
L'attaque
Un possible modèle de menace, dans le contexte du stockage des identifiants, est un attaquant qui a la capacité de :
- inspecter tout (utilisateur) processus mémoire
- lire locales (utilisateur) fichiers
Autant que je sache, le consensus sur ce type d'attaque est qu'il est impossible de prévenir (puisque les informations d'identification doivent être stockées dans la mémoire pour le programme pour les utiliser), mais il ya un couple de techniques de l'atténuer:
- de minimiser la quantité de temps les données sensibles sont stockées dans la mémoire
- remplacer la mémoire dès que les données n'est plus nécessaire
- coder les données en mémoire, continuer d'avancer, et d'autres la sécurité par l'obscurité des mesures
Python en particulier
La première technique est assez facile à mettre en œuvre, éventuellement par le biais d'un porte-clés (espérons-le noyau de l'espace de stockage)
Le second n'est pas réalisable sans l'écriture d'un module C, au meilleur de ma connaissance (mais je serais ravi d'être démenti ici, ou de disposer d'une liste de modules existants)
Le troisième est délicate.
En particulier, python étant un langage très puissant, l'introspection et la réflexion des capacités, il est difficile d'empêcher l'accès aux informations d'identification de quelqu'un qui peut exécuter du code python dans l'interpréteur de processus.
Il semble y avoir un consensus pour dire que il n'y a aucun moyen de faire appliquer les attributs privés et que les tentatives de il sera, au mieux, embêter les autres programmeurs qui sont à l'aide de votre code.
La question
En prenant tout cela en considération, comment fait-on stocker de manière sécurisée les informations d'authentification à l'aide de python? Quelles sont les meilleures pratiques? Quelque chose peut être fait à propos de la langue "tout public" de la philosophie? Je sais "nous sommes tous des adultes consentants ici"mais devrions-nous être forcés de choisir entre le partage de nos mots de passe avec un attaquant et d'utiliser une autre langue?
source d'informationauteur goncalopp | 2013-01-31
Vous devez vous connecter pour publier un commentaire.
Il y a deux choses très différentes raisons, vous pouvez stocker les informations d'authentification:
Dans le premier cas, vous ne devriez jamais stocker le mot de passe (ou une version chiffrée du mot de passe). Au lieu de cela, vous devriez de hachage le mot de passe avec une haute qualité, de sel et de s'assurer que l'algorithme de hachage que vous utilisez est gourmand en ressources (pour éviter les attaques par dictionnaire) comme PBKDF2 ou bcrypt. Voir Salé Hachage de Mot de passe - il en train de Faire pour beaucoup plus de détails. Si vous suivez cette approche, même si le pirate récupère le salé, lent hachée jeton, ils ne peuvent pas faire grand-chose avec elle.
Dans le second cas, il y a un certain nombre de choses à faire secret découverte plus difficile (que vous avez défini dans votre question), tels que:
De telles approches sont certainement mieux que rien, mais un habile hacker va briser tôt ou tard.
Jetons
À partir d'un point de vue théorique, l'authentification est la loi de prouver que la personne contestée est qui ils disent qu'ils sont. Traditionnellement, ce résultat est obtenu avec un secret partagé (le mot de passe), mais il existe d'autres moyens de prouver vous-même, y compris:
D'autres dispositifs:
Et une liste plus complète ici
Le point commun entre toutes ces approches est que l'utilisateur final contrôles de ces appareils et les secrets jamais laisser la clé cryptographique/carte/téléphone, et certainement ne sont jamais stockées dans votre programme. Cela les rend beaucoup plus sûr.
Session de voler
Cependant (il y a toujours un mais):
Supposons-vous réussi à obtenir le mot de passe, le pirate ne peut pas accéder à la sécurité des jetons. Maintenant, votre application est heureux d'interagir avec le service sécurisé. Malheureusement, si le hacker peut exécuter des fichiers exécutables sur votre ordinateur, le hacker peut détourner votre session par exemple par injection de commandes supplémentaires dans la validité de votre utilisation du service. En d'autres termes, alors que vous avez protégé le mot de passe, il est tout à fait hors de propos parce que le pirate gagne encore de l'accès à la "garantie" de la ressource.
C'est une menace très réelle, que les multiples attaques de scripts intersites ont montre (un exemple est US Bank et Bank of America Sites web Vulnérablesmais il y a d'innombrables autres).
Proxy sécurisé
Comme discuté ci-dessus, il y a un problème fondamental en gardant les informations d'identification d'un compte sur un service tiers ou d'un système, de sorte que l'application peut se connecter sur elle, surtout si le seul journal d'approche est un nom d'utilisateur et mot de passe.
Une façon d'atténuer ce en déléguant la communication au service d'un proxy sécurisé, et élaborer un système de connexion entre l'application et le proxy. Dans cette approche
Les inconvénients de cette approche sont:
Quelques réponses
Donc, à des réponses spécifiques:
À mon humble avis il n'y a rien de mal avec l'écriture d'un spécifiques module en Python qui ne c'est damnedest pour cacher le secret de l'information, en en faisant un droit bougre pour les autres, afin de les réutiliser (ennuyeux d'autres programmeurs est son but). Vous pourriez même de grandes portions de code en C et un lien vers elle. Cependant, ne le faites pas pour les autres modules, pour des raisons évidentes.
En fin de compte, cependant, si le hacker a le contrôle sur l'ordinateur, il n'y a pas de vie privée sur l'ordinateur. Théorique pire des cas, c'est que votre programme est en cours d'exécution sur une machine virtuelle, et le pirate a accès complet à tous mémoire sur l'ordinateur, y compris le BIOS et la carte graphique, et peut intervenir à votre demande si l'authentification à la découverte de ses secrets.
Donné aucune intimité absolue, le reste est juste de la dissimulation, et le niveau de protection est tout simplement combien il est difficile d'obfuscation vs combien un métier de pirate veut de l'information. Et nous savons tous comment qui se terminemême pour matériel personnalisé et milliards de dollars de produits.
Bien que ce sera assez de gérer en toute sécurité la clé par rapport à d'autres applications, toutes les applications Python de partager l'accès à des jetons. Ce n'est pas le moindre bit secure pour le type d'attaque que vous êtes inquiet au sujet de.
Je ne suis pas expert dans ce domaine et je suis vraiment à la recherche à résoudre le même problème que vous, mais il ressemble à quelque chose comme Hashicorp de la Voûte pourrait être en mesure de vous aider tout à fait bien.
En particulier WRT pour le problème de stockage des informations d'identification pour la 3e partie des services. par exemple:
Plus de liens: