Je suis récemment tombé sur un système où toutes les connexions DB étaient gérées par des routines obscurcies de diverses manières, y compris l'encodage en base 64, les sommes md5 et diverses autres techniques.
Est-ce juste moi ou est-ce exagéré? Quelles sont les alternatives?
La sécurité par l'obscurité serait enterrer votre argent sous un arbre. La seule chose qui le rend sûr, c'est que personne ne sait qu'il est là. La vraie sécurité, c'est de la mettre derrière une serrure ou une combinaison, disons dans un coffre-fort. Vous pouvez mettre le coffre-fort au coin de la rue parce que ce qui le rend sûr, c'est que personne ne peut y entrer mais vous.
Comme mentionné par @ ThomasPadron-McCarty ci-dessous dans un commentaire ci-dessous:
Si quelqu'un découvre le mot de passe, vous pouvez simplement changer le mot de passe, ce qui est facile. Si quelqu'un trouve l'emplacement, vous devez déterrer l'argent et le déplacer ailleurs, ce qui représente beaucoup plus de travail. Et si vous utilisez la sécurité par obscurité dans un programme, vous devrez réécrire le programme.
On peut dire que la sécurité par l'obscurité est mauvaise car elle implique souvent que l'obscurité est utilisée comme principal moyen de sécurité. L'obscurité est bonne jusqu'à ce qu'elle soit découverte, mais une fois que quelqu'un a déterminé votre obscurité particulière, votre système est à nouveau vulnérable. Compte tenu de la persistance des attaquants, cela équivaut à aucune sécurité du tout.
L'obscurité ne doit jamais être utilisée comme alternative aux techniques de sécurité appropriées.
L'obscurité comme moyen de cacher votre code source pour empêcher la copie est un autre sujet. Je suis plutôt divisé sur ce sujet; Je peux comprendre pourquoi vous pourriez souhaiter faire cela, personnellement je n'ai jamais été dans une situation où cela serait souhaité.
La sécurité par l'obscurité est un sujet intéressant. Il est (à juste titre) décrié comme substitut à une sécurité efficace. Un principe typique en cryptographie est qu'un message est inconnu mais que le contenu ne l'est pas. Les algorithmes de cryptage sont généralement largement publiés, analysés par des mathématiciens et, après un certain temps, une certaine confiance se construit dans leur efficacité, mais rien ne garantit leur efficacité.
Certaines personnes cachent leurs algorithmes cryptographiques, mais cela est considéré comme une pratique dangereuse car ces algorithmes n'ont pas subi le même examen minutieux. Seules des organisations comme la NSA, qui dispose d'un budget important et d'un personnel de mathématiciens, peuvent s'en tirer avec ce type d'approche.
L'un des développements les plus intéressants de ces dernières années a été le risque de stéganographie , qui est la pratique qui cache le message dans les images, les fichiers audio ou tout autre support. Le plus gros problème dans la stéganalyse est d'identifier si oui ou non un message est là ou non, ce qui rend cette sécurité par l'obscurité.
L'année dernière, je suis tombé sur une histoire qui Les chercheurs calculent la capacité d'un canal stéganographique mais la chose vraiment intéressante à ce sujet est:
L'étude d'un canal stego de cette manière conduit à des résultats contre-intuitifs: par exemple, dans certaines circonstances, doubler le nombre d'algorithmes à la recherche de données cachées peut augmenter la capacité du canal stéganographique.
En d'autres termes, plus vous utilisez d'algorithmes pour identifier les messages, moins ils deviennent efficaces, ce qui va à l'encontre des critiques normales de la sécurité par l'obscurité.
Des trucs intéressants.
La principale raison pour laquelle c'est une mauvaise idée est qu'elle ne résout pas les problèmes sous-jacents, tente simplement de les cacher. Tôt ou tard, les problèmes seront découverts.
De plus, un cryptage supplémentaire entraînera des frais supplémentaires.
Enfin, une obscurité excessive (comme l'utilisation de sommes de contrôle) fait de la maintenance un cauchemar.
Les meilleures alternatives de sécurité consistent à éliminer les faiblesses potentielles de votre code, telles que les entrées forcées, afin de prévenir les attaques par injection.
Un facteur est la capacité de se remettre d'une faille de sécurité. Si quelqu'un découvre votre mot de passe, réinitialisez-le simplement. Mais si quelqu'un découvre votre plan obscur, vous êtes arrosé.
Utiliser l'obscurité comme tous ces gens sont d'accord n'est pas la sécurité, c'est gagner du temps. Cela dit, avoir un système de sécurité décent mis en œuvre, puis ajouter une couche supplémentaire d'obscurité est toujours utile. Disons que demain quelqu'un trouve une fissure/trou imbattable dans le service ssh qui ne peut pas être corrigé immédiatement.
En règle générale, j'ai mis en œuvre en interne ... tous les serveurs publics exposent uniquement les ports nécessaires (http/https) et rien de plus. Un serveur face au public aura alors ssh exposé à Internet à un port obscur et numéroté et une configuration de déclenchement de numérisation de port pour bloquer toutes les IP qui tentent de le trouver.
L'obscurité a sa place dans le monde de la sécurité, mais pas comme première et dernière ligne de défense. Dans l'exemple ci-dessus, je ne reçois aucune attaque de script/bot sur ssh car ils ne veulent pas passer du temps à rechercher un port de service ssh non standard et s'ils le font, il est peu probable qu'ils le trouvent avant une autre couche de la sécurité intervient et les coupe.
La sécurité consiste à laisser entrer les gens ou à les garder en fonction de ce qu'ils savent, de qui ils sont ou de ce qu'ils ont. Actuellement, la biométrie n'est pas bonne pour trouver qui vous êtes, et il y aura toujours des problèmes avec elle (lecteurs d'empreintes digitales pour quelqu'un qui a été victime d'un accident grave, empreintes digitales falsifiées, etc.). Donc, en fait, une grande partie de la sécurité consiste à obscurcir quelque chose.
Une bonne sécurité consiste à garder les choses que vous devez garder secrètes au minimum. Si vous avez un canal AES correctement chiffré, vous pouvez laisser les méchants tout voir à l'exception du mot de passe, et vous êtes en sécurité. Cela signifie que votre zone d'attaque est beaucoup plus petite et que vous pouvez vous concentrer sur la sécurisation des mots de passe. (Pas que ce soit trivial.)
Pour ce faire, vous devez avoir confiance en tout sauf le mot de passe. Cela signifie normalement utiliser la cryptographie standard de l'industrie que de nombreux experts ont examinée. Tout le monde peut créer un chiffre qu'ils ne peuvent pas casser, mais tout le monde ne peut pas faire un chiffre que Bruce Schneier ne peut pas casser. Puisqu'il y a un manque complet de bases théoriques pour la sécurité du chiffrement, la sécurité d'un chiffrement est déterminée par le fait que beaucoup de gens très intelligents et bien informés essaient de proposer des attaques, même si elles ne sont pas pratiques (les attaques sur les chiffrements s'améliorent toujours , jamais pire). Cela signifie que l'algorithme de cryptographie doit être largement connu. J'ai une très grande confiance dans la norme de chiffrement avancé, et presque aucune dans un algorithme propriétaire que Joe a écrit et obscurci.
Cependant, il y a eu des problèmes avec les implémentations d'algorithmes de cryptographie. Il est facile de laisser par inadvertance des trous dans lesquels la clé peut être trouvée ou un autre méfait. C'est arrivé avec un autre champ de signature pour PGP, et des faiblesses avec SSL implémenté sur Debian Linux. C'est même arrivé à OpenBSD, qui est probablement le système d'exploitation le plus sécurisé disponible (je pense que c'est jusqu'à deux exploits en dix ans). Par conséquent, cela devrait être fait par une entreprise réputée, et je me sentirais mieux si les implémentations étaient open source. (La source fermée n'arrêtera pas un attaquant déterminé, mais il sera plus difficile pour les bons gars au hasard de trouver des trous à fermer.)
Par conséquent, si je voulais de la sécurité, j'essaierais d'avoir mon système aussi fiable que possible, ce qui signifie aussi ouvert que possible à l'exception du mot de passe.
La superposition de la sécurité par l'obscurité au-dessus d'un système déjà sécurisé peut aider certains, mais si le système est sécurisé, il ne sera pas nécessaire, et s'il n'est pas sécurisé, la meilleure chose à faire est de le sécuriser. Pensez à l'obscurité comme aux formes moins réputées de "médecine alternative" - il est très peu probable qu'elle aide beaucoup, et bien qu'elle ne soit pas susceptible de faire beaucoup de mal en soi, elle peut rendre le patient moins susceptible de voir un médecin compétent ou un spécialiste de la sécurité informatique, selon le cas.
Enfin, je voudrais faire un plugin complètement non sollicité et désintéressé pour le blog de Bruce Schneier , rien de plus qu'un lecteur intéressé. J'en ai beaucoup appris sur la sécurité.
Toutes les formes de sécurité disponibles sont en fait des formes de sécurité par l'obscurité. Chaque méthode augmente en complexité et offre une meilleure sécurité mais elles reposent toutes sur un algorithme et une ou plusieurs clés pour restaurer les données chiffrées. La "sécurité par l'obscurité", comme la plupart des gens l'appellent, c'est quand quelqu'un choisit l'un des algorithmes les plus simples et les plus faciles à casser.
Les algorithmes tels que le changement de caractère sont faciles à implémenter et à casser, c'est pourquoi ils sont une mauvaise idée. C'est probablement mieux que rien, mais cela n'empêchera tout au plus qu'un simple coup d'œil aux données d'être facilement lues.
Il existe d'excellentes ressources sur Internet que vous pouvez utiliser pour vous renseigner sur toutes les méthodes de cryptage disponibles et sur leurs forces et leurs faiblesses.
L'une des meilleures façons d'évaluer, de tester ou d'améliorer un produit de sécurité est de le faire frapper par un grand groupe de pairs intelligent.
Les produits qui dépendent pour leur sécurité d'être une "boîte noire" ne peuvent pas bénéficier de ce type de test. Bien sûr, être une "boîte noire" invite toujours à soupçonner (souvent justifié) qu'ils ne résisteraient pas à ce genre d'examen de toute façon.
J'ai soutenu dans un cas que la protection par mot de passe est vraiment une sécurité par l'obscurité. La seule sécurité à laquelle je peux penser qui ne serait pas la STO est une sorte de sécurité biométrique.
Outre ce peu de sémantique et de choix, la STO (sécurité par l'obscurité) est évidemment mauvaise dans tous les cas où vous avez besoin d'une réelle sécurité. Cependant, il peut y avoir des cas où cela n'a pas d'importance. Je vais souvent XOR remplir un fichier texte, je ne veux pas que quelqu'un le lise. Mais peu m'importe s'ils le font, je préfère juste qu'il ne soit pas lu. Dans ce Dans ce cas, cela n'a pas d'importance et un pad XOR est un exemple parfait de STO facile à trouver.
C'est presque jamais une bonne idée. C'est la même chose à dire, est-ce une bonne idée de conduire sans ceinture de sécurité? Bien sûr, vous pouvez trouver des cas où cela convient, mais la réponse due à l'expérience semble évidente.
Si le système d'exploitation est Windows, envisagez d'utiliser l'API de protection des données (DPAPI). Il ne s'agit pas de sécurité par obscurité et constitue un bon moyen de stocker les informations de connexion pour un processus sans assistance. Comme presque tout le monde le dit ici, la sécurité par l'obscurité ne vous offre pas beaucoup de protection.
Un cryptage faible ne dissuadera que les pirates les moins motivés, il n'est donc pas sans valeur, il n'est tout simplement pas très utile, surtout lorsqu'un cryptage fort, comme AES, est disponible.
La sécurité par l'obscurité est basée sur l'hypothèse que vous êtes intelligent et que vos utilisateurs sont stupides. Si cette hypothèse est basée sur l'arrogance et non sur des données empiriques, vos utilisateurs et pirates informatiques détermineront comment invoquer la méthode masquée, afficher la page non liée, décompiler et extraire le mot de passe en texte brut du fichier .dll, etc.
Cela dit, fournir des métadonnées complètes aux utilisateurs n'est pas une bonne idée, et l'obscurcissement est une technique parfaitement valable tant que vous les sauvegardez avec le cryptage, l'autorisation, l'authentification et tous ces autres principes de sécurité.
Le seul point que je dois ajouter qui n'a pas encore été abordé est l'incroyable capacité d'Internet à briser la sécurité à travers l'obscurité.
Comme cela a été démontré maintes et maintes fois, si votre seule défense est que "personne ne sait que la porte dérobée/bug/exploit est là", alors tout ce qu'il faut, c'est qu'une personne tombe dessus et, en quelques minutes, des centaines de personnes savoir. Le lendemain, à peu près tous ceux qui veulent savoir le feront. Aie.