Suite au commentaire que j'ai fait sur la question:
Un point important a été très passé sous silence par presque tout le monde ... Ma réaction initiale était très similaire à @Michael Brooks, jusqu'à ce que je réalise, comme @stefanw, que le problème ici est des exigences brisées , mais ce sont ce qu'ils sont.
Mais alors, il m'est venu à l'esprit que ce n'était peut-être même pas le cas! Le point manquant ici, c'est la valeur tacite des actifs de l'application. En termes simples, pour un système de faible valeur, un mécanisme d'authentification entièrement sécurisé, avec tout le processus impliqué, serait exagéré et le mauvais choix de sécurité.
De toute évidence, pour une banque, les "meilleures pratiques" sont indispensables, et il n'y a aucun moyen de violer éthiquement CWE-257. Mais il est facile de penser à des systèmes de faible valeur où cela n'en vaut pas la peine (mais un simple mot de passe est toujours requis).
Il est important de se rappeler que la véritable expertise en matière de sécurité consiste à trouver des compromis appropriés, PAS à diffuser de manière dogmatique les «meilleures pratiques» que tout le monde peut lire en ligne.
En tant que tel, je suggère une autre solution: en
fonction de la valeur du système, et UNIQUEMENT SI le système est de faible valeur appropriée sans actif "coûteux" (l'identité elle-même, incluse), ET il existe des exigences commerciales valides qui rendent le processus approprié impossible (ou suffisamment difficile / cher), ET le client est mis au courant de toutes les mises en garde ...
Ensuite, il pourrait être approprié de simplement autoriser le chiffrement réversible, sans cerceaux spéciaux pour passer à travers.
J'arrête juste de dire de ne pas se soucier du chiffrement, car il est très simple / bon marché à mettre en œuvre (même en tenant compte de la gestion des clés passibles), et il fournit une certaine protection (plus que le coût de sa mise en œuvre). En outre, il vaut la peine de voir comment fournir à l'utilisateur le mot de passe d'origine, que ce soit par e-mail, en affichant sur l'écran, etc.
Étant donné que l'hypothèse ici est que la valeur du mot de passe volé (même globalement) est assez faible, ces solutions peuvent être valables.
Puisqu'il y a une discussion animée en cours, en fait PLUSIEURS discussions animées, dans les différents messages et fils de commentaires séparés, j'ajouterai quelques clarifications et répondrai à certains des très bons points qui ont été soulevés ailleurs ici.
Pour commencer, je pense qu'il est clair pour tout le monde ici que permettre la récupération du mot de passe d'origine de l'utilisateur est une mauvaise pratique et généralement pas une bonne idée. Ce n'est pas du tout contesté ...
De plus, je soulignerai que dans de nombreuses situations, voire PLUS - c'est vraiment faux, même répugnant, méchant ET laid .
Cependant, le nœud de la question est autour du principe , Y a-t-il une situation où il ne serait pas nécessaire d'interdire cela, et si oui, comment le faire de la manière la plus correcte appropriée à la situation .
Maintenant, comme @Thomas, @sfussenegger et quelques autres l'ont mentionné, la seule façon appropriée de répondre à cette question est de faire une analyse approfondie des risques de toute situation donnée (ou hypothétique), pour comprendre ce qui est en jeu, combien il vaut la peine de protéger et quelles autres mesures d'atténuation sont en jeu pour assurer cette protection.
Non, ce n'est PAS un mot à la mode, c'est l'un des outils de base les plus importants pour un professionnel de la sécurité en direct. Les meilleures pratiques sont bonnes jusqu'à un certain point (généralement comme lignes directrices pour les inexpérimentés et les hacks), après quoi une analyse réfléchie des risques prend le relais.
Vous savez, c'est drôle - je me considérais toujours comme l'un des fanatiques de la sécurité, et je suis en quelque sorte du côté opposé de ces soi-disant "experts en sécurité" ... Eh bien, la vérité est - parce que je suis un fanatique, et un véritable expert de la sécurité dans la vie réelle - je ne crois pas à faire jaillir le dogme des "meilleures pratiques" (ou CWE) SANS cette analyse des risques très importante .
"Méfiez-vous des fanatiques de la sécurité qui appliquent rapidement tout ce qui se trouve dans leur ceinture à outils sans savoir contre quel problème réel ils se battent. Plus de sécurité n'équivaut pas nécessairement à une bonne sécurité."
L'analyse des risques, et les vrais fanatiques de la sécurité, indiqueraient un compromis plus intelligent, basé sur la valeur / le risque, basé sur le risque, la perte potentielle, les menaces possibles, les atténuations complémentaires, etc. base de leurs recommandations, ou soutiennent des compromis logiques, mais préféreraient plutôt lancer des dogmes et des CWE sans même comprendre comment effectuer une analyse des risques, ne sont que des hacks de sécurité, et leur expertise ne vaut pas le papier toilette sur lequel ils l'ont imprimé.
En effet, c'est ainsi que nous obtenons le ridicule qu'est la sécurité aéroportuaire.
Mais avant de parler des compromis à faire dans CETTE SITUATION, examinons les risques apparents (apparents, car nous n'avons pas toutes les informations de base sur cette situation, nous émettons tous des hypothèses - car la question est de savoir quelle hypothèse il peut y avoir une situation ...)
Supposons un système de FAIBLE VALEUR, mais pas si trival que son accès public - le propriétaire du système veut empêcher une usurpation d'identité occasionnelle, mais une sécurité "élevée" n'est pas aussi primordiale que la facilité d'utilisation. (Oui, c'est un compromis légitime pour ACCEPTER le risque que n'importe quel script-kiddie compétent puisse pirater le site ... Attendez, APT n'est-il pas en vogue maintenant ...?)
Par exemple, disons que j'organise un site simple pour une grande réunion de famille, permettant à tout le monde de réfléchir sur où nous voulons aller en camping cette année. Je suis moins inquiet à propos d'un pirate anonyme, ou même du cousin Fred qui se faufile dans des suggestions répétées pour retourner au lac Wantanamanabikiliki, car je suis d'avis que tante Erma ne peut pas se connecter lorsqu'elle en a besoin. Maintenant, tante Erma, en tant que physicienne nucléaire, n'est pas très douée pour se souvenir des mots de passe, ni même pour utiliser des ordinateurs ... Je veux donc supprimer toutes les frictions possibles pour elle. Encore une fois, je ne suis PAS inquiet des hacks, je ne veux tout simplement pas d'erreurs idiotes de mauvaise connexion - je veux savoir qui vient et ce qu'ils veulent.
En tous cas.
Alors, quels sont nos principaux risques ici, si nous chiffrons symétriquement les mots de passe, au lieu d'utiliser un hachage unidirectionnel?
- Usurper l'identité des utilisateurs? Non, j'ai déjà accepté ce risque, pas intéressant.
- Administrateur maléfique? Eh bien, peut-être ... Mais encore une fois, je me fiche que quelqu'un puisse usurper l'identité d'un autre utilisateur, INTERNE ou non ... et de toute façon, un administrateur malveillant obtiendra votre mot de passe, peu importe quoi - si votre administrateur a mal tourné, son jeu de toute façon.
- Un autre problème qui a été soulevé est que l'identité est en fait partagée entre plusieurs systèmes. Ah! Il s'agit d'un risque très intéressant qui nécessite un examen plus approfondi.
Permettez-moi de commencer par affirmer que ce n'est pas l' identité réelle qui est partagée, mais plutôt la preuve ou les informations d'authentification. D'accord, car un mot de passe partagé me permettra effectivement d'accéder à un autre système (disons, mon compte bancaire ou gmail), c'est effectivement la même identité, donc c'est juste de la sémantique ... Sauf que ce n'est pas le cas . L'identité est gérée séparément par chaque système, dans ce scénario (bien qu'il puisse y avoir des systèmes d'identification tiers, tels que OAuth - toujours, son distinct de l'identité dans ce système - plus à ce sujet plus tard).
En tant que tel, le principal point de risque ici est que l'utilisateur saisira volontairement son (même) mot de passe dans plusieurs systèmes différents - et maintenant, moi (l'administrateur) ou tout autre pirate de mon site aura accès aux mots de passe de tante Erma pour le site des missiles nucléaires.
Hmmm.
Vous semble-t-il quelque chose ici?
Cela devrait.
Commençons par le fait que la protection du système de missiles nucléaires n'est pas de ma responsabilité , je suis en train de construire un site de sortie pour la famille Frakkin (pour MA famille). Alors, à qui revient la responsabilité? Umm ... Et le système de missiles nucléaires? Duh.
Deuxièmement, si je voulais voler le mot de passe de quelqu'un (quelqu'un connu pour utiliser à plusieurs reprises le même mot de passe entre des sites sécurisés et des sites moins sécurisés) - pourquoi devrais-je prendre la peine de pirater votre site? Ou aux prises avec votre cryptage symétrique? Goshdarnitall, je peux simplement créer mon propre site Web simple , demander aux utilisateurs de s'inscrire pour recevoir des NOUVELLES TRÈS IMPORTANTES sur tout ce qu'ils veulent ... Puffo Presto, j'ai "volé" leurs mots de passe.
Oui, l'éducation des utilisateurs revient toujours pour nous mordre dans le hienie, n'est-ce pas?
Et il n'y a rien que vous puissiez faire à ce sujet ... Même si vous deviez hacher leurs mots de passe sur votre site et faire tout le reste auquel la TSA peut penser, vous avez ajouté une protection à leur mot de passe NOT ONE WHIT , s'ils veulent garder coller de manière promiscuité leurs mots de passe dans tous les sites sur lesquels ils se heurtent. N'essayez même pas d'essayer.
Autrement dit, vous ne possédez pas leurs mots de passe , alors arrêtez d'essayer d'agir comme vous.
Alors, mes chers experts en sécurité, comme une vieille dame demandait à Wendy's "O WH est le risque?"
Quelques autres points, en réponse à certaines questions soulevées ci-dessus:
- CWE n'est ni une loi, ni un règlement, ni même une norme. Il s'agit d'un ensemble de faiblesses communes , c'est-à-dire l'inverse des "meilleures pratiques".
- La question de l'identité partagée est un problème réel, mais mal compris (ou déformé) par les opposants ici. Il s'agit de partager l'identité en soi (!), PAS de casser les mots de passe sur les systèmes de faible valeur. Si vous partagez un mot de passe entre un système de faible valeur et un système de haute valeur, le problème est déjà là!
- D'ailleurs, le point précédent indiquerait en fait CONTRE l' utilisation d'OAuth et similaires pour ces deux systèmes à faible valeur et les systèmes bancaires à haute valeur.
- Je sais que ce n'était qu'un exemple, mais (malheureusement) les systèmes du FBI ne sont pas vraiment les plus sécurisés du monde. Pas tout à fait comme les serveurs du blog de votre chat, mais ils ne dépassent pas non plus certaines des banques les plus sécurisées.
- La connaissance partagée, ou le double contrôle, des clés de chiffrement ne se produit PAS uniquement dans l'armée, en fait, PCI-DSS exige maintenant cela de pratiquement tous les marchands, donc ce n'est plus vraiment si loin (SI la valeur le justifie).
- Pour tous ceux qui se plaignent que des questions comme celles-ci sont ce qui rend la profession de développeur si mauvaise: ce sont des réponses comme celles-ci, qui rendent la profession de sécurité encore pire. Encore une fois, l'analyse des risques axée sur l'entreprise est ce qui est nécessaire, sinon vous vous rendez inutile. En plus d'avoir tort.
- Je suppose que c'est pourquoi ce n'est pas une bonne idée de simplement prendre un développeur régulier et de lui laisser plus de responsabilités en matière de sécurité, sans s'entraîner à penser différemment et à chercher les bons compromis. Aucune offense, à ceux d'entre vous ici, je suis tout à fait d'accord - mais plus d'entraînement est nécessaire.
Ouf. Quel long message ...
Mais pour répondre à votre question initiale, @Shane:
- Expliquez au client la bonne façon de faire les choses.
- S'il insiste encore, expliquez-en plus, insistez, argumentez. Jetez une crise de colère, si nécessaire.
- Expliquez-lui le RISQUE COMMERCIAL. Les détails sont bons, les chiffres sont meilleurs, une démo en direct est généralement la meilleure.
- S'il insiste toujours ET présente des raisons commerciales valables - il est temps pour vous de faire un jugement:
ce site est-il de faible valeur? Est-ce vraiment une analyse de rentabilisation valide? Est-ce que c'est assez bon pour toi? N'y a-t-il pas d'autres risques que vous pouvez considérer, qui l'emporteraient sur des raisons commerciales valables? (Et bien sûr, le client n'est PAS un site malveillant, mais c'est duh).
Si oui, allez-y. Cela ne vaut pas l'effort, la friction et la perte d'utilisation (dans cette situation hypothétique) pour mettre en place le processus nécessaire. Toute autre décision (encore une fois, dans cette situation) est un mauvais compromis.
Donc, en fin de compte, et une réponse réelle - chiffrez-la avec un algorithme symétrique simple, protégez la clé de chiffrement avec des ACL solides et de préférence DPAPI ou similaire, documentez-la et demandez au client (quelqu'un assez âgé pour prendre cette décision) de signer il.