Comment allez-vous avoir caché des informations sensibles d'aller dans des fichiers journaux? Oui, vous pouvez choisir consciemment de ne pas connecter les morceaux d'informations sensibles en premier lieu, mais il peut y avoir des cas généraux dans lesquels vous enregistrez aveuglément des messages d'erreur lors des défaillances ou des messages de trace tout en enquêtant sur un problème, etc. et finissez par un atterrissage d'informations sensibles dans votre Fichiers journaux. p>
Par exemple, vous pouvez essayer d'insérer un enregistrement de commande contenant le numéro de carte de crédit d'un client dans la base de données. Lors d'une défaillance de la base de données, vous souhaiterez peut-être enregistrer l'instruction SQL qui vient d'être exécutée. Vous vous retrouveriez ensuite avec le numéro de carte de crédit du client dans un fichier journal. P>
existe-t-il un paradigme de design qui peut être utilisé pour "étiqueter" certains bits d'informations aussi sensibles de sorte qu'un pipeline de journalisation générique puisse les filtrer? P>
7 Réponses :
Je considérerais personnellement les fichiers journaux eux-mêmes comme des informations sensibles et assurez-vous de vous limiter l'accès. P>
Vrai! Je pense aux cas où vous êtes un fournisseur de logiciels et que vous demandez à vos clients de vous envoyer les fichiers journaux de leur système afin de diagnostiquer un crash de système, etc. L'ONUS serait sur le client de ne pas nettoyer leurs fichiers journaux de information sensible? Ne serait-il pas agréable si votre système avait un moyen de laisser les clients à obtenir cela gratuitement?
"Limiter l'accès" n'est pas suffisamment spécifique pour fournir une protection suffisante pour les informations de carte de crédit. Les journaux doivent être cryptés et l'accès aux clés de déchiffrement doit être défini dans la politique de sécurité.
Dans votre exemple, vous devriez crypter le numéro de carte de crédit ou, mieux encore, ne pas le stocker même en premier lieu. P>
Si, dites, vous avez enregistré quelque chose d'autre, comme une connexion, vous voudrez peut-être remplacer explicitement un mot de passe avec *****. P>
Cependant, cela parvient à éviter de répondre soigneusement à répondre à la question que vous avez posée en premier lieu. En général, lorsqu'il s'agit d'informations sensibles, il devrait être crypté sur sa forme de stockage permanent, qu'il s'agisse d'un fichier de base de données ou d'un fichier journal. Supposons qu'un mauvais gars puisse être capable de mettre la main à l'autre et de protéger les informations en conséquence. P>
Je pense que le cryptage peut être la réponse: dès que les informations sensibles pénètrent dans votre système, il est crypté et vit comme crypté. Donc, si vous faites une journalisation de faible niveau (sémantique-agnostique) ou même obtenir une dépotoir de mémoire, les informations seront raisonnablement sécurisées. Je pense que j'aime l'idée de crypter les informations au lieu de tout le fichier journal comme suggéré dans d'autres réponses.
Si vous savez ce que vous essayez de filtrer, vous pouvez vous exécuter la sortie du journal via une expression de nettoyage de regex avant de la connecter. p>
Oui, j'ai pensé à cela. En fait, cela peut être une solution viable car il y aura toujours un nombre discrète de types différents de chaînes "sensibles" que vous pouvez identifier avec des regexes.
L'enregistrement d'un numéro de carte de crédit pourrait être une violation PCI. Et si vous n'êtes pas compatible PCI, vous serez facturé des frais de traitement de cartes plus élevés. N'ayez pas de connecter des informations sensibles ou de chiffrer tous vos fichiers journaux. P>
Votre idée de "marquage" Les informations sensibles sont intrigantes. Vous pouvez avoir un type de données spécial pour les informations code> sensibles >, qui enveloppait le type de données réel et sous-jacent. Chaque fois que cet objet est rendu sous forme de chaîne de caractères, il retourne simplement Toutefois, cela pourrait nécessiter des changements de codage généralisés et nécessite un niveau de vigilance concous similaire à celui nécessaire pour éviter la journalisation des informations sensibles en premier lieu. P> "***" code> ou autre. p>
En ce qui concerne les instructions SQL spécifiquement, si votre langue la prend en charge, vous devez utiliser des paramètres au lieu de mettre des valeurs dans l'état lui-même. En d'autres termes: puis réglez le paramètre sur le numéro de carte de crédit. P> Bien sûr, si vous envisagez de loger des instructions SQL avec des paramètres remplis, vous devez besoin d'une autre façon de filtrer les données sensibles. p> p>
Vrai. Mais cela ne couvre que des déclarations SQL.
C'est pourquoi je l'ai préféré avec "concernant les déclarations SQL spécifiquement". Il n'était pas destiné à être 100% général.
Noté. Je cherchais en fait plus d'une solution de balle d'argent au lieu d'une analyse de cas par cas, mais merci pour cette réponse!
Ma pratique actuelle pour l'affaire en question consiste à enregistrer un hachage de telles informations sensibles. Cela nous permet d'identifier les enregistrements de journaux appartenant à une revendication spécifique (par exemple un numéro de carte de crédit spécifique), mais ne donne à personne à personne de saisir les journaux et à utiliser les informations sensibles à des fins pervers. P>
Bien sûr, cela implique toujours de bonnes pratiques de codage. J'ai généralement choisi de connecter tous les objets à l'aide de leurs surcharges code> Tostring code> (en Java ou .NET) qui sertialise le hachage des valeurs pour les champs marqués d'un attribut code> sensible à un Bien sûr, les chaînes SQL sont plus problématiques, mais nous nous appuyons davantage sur notre OrM pour la persistance des données et loger l'état du système à différentes étapes, puis enregistre les requêtes SQL, ce qui devient donc un non-problème. P> appliqué. p>
J'aime l'idée de remplacer Tosource; De cette façon, le code de journalisation n'a pas à se soucier de ce qui est enregistré. Bien que cela ne traite pas de la question avec des décharges de mémoire, je l'accepterai comme la meilleure réponse car elle répond directement à la question initiale. Merci!
Oui, mais le hachage d'un numéro de carte de crédit est trivial à la force brute (ou construire une table arc-en-ciel pour)
@Andreyfedorov Bon point, c'est certainement le cas. Il serait préférable de loger le HMAC de ces types de chaînes de longueur constante, avec une application connue de l'application. Ainsi, lorsque / si une réclamation se pose, il serait possible de calculer à nouveau le HMAC à la recherche, mais un attaquant qui a obtenu les journaux ne serait pas en mesure de rétablir le HMAC en utilisant la force brute ni en construisant des tables arc-en-ciel.
Yup, sauf si bien sûr, un attaquant ne reçoit également la "touche connue de l'application". Semble que cela pourrait être évasable, cependant.
Reportez-vous à cet outil, créé exactement pour ce cas d'utilisation.
Si vous souhaitez masquer uniquement le champ sélectionné, pendant la journalisation et conservez d'autres valeurs de champ comme c'est. Vous pouvez essayer ceci. p>
https://github.com/sthilaru/sp-util p>
Sur la recommandation de déplacer cette question à Serverfault.com: Non. Cette question est du point de vue du logiciel. Vous voulez vous assurer que votre logiciel est suffisamment intelligent pour aider les utilisateurs à masquer des informations sensibles. En fait, une exigence de vie réelle que j'ai vue de clients réels.
* Vous êtes -> votre (après 7 ans)