2009-06-11 4 views
1

Je souhaite transférer les informations de nom d'utilisateur et de mot de passe d'un processus à un autre qui s'exécute sur le même serveur sous Windows. Quelle est la meilleure approche pour réaliser ce transfert de manière sécurisée? Une approche simple consiste à copier les mots de passe dans un fichier, puis à lire l'autre processus à partir d'un fichier, puis à supprimer le fichier une fois qu'il a été lu. Bien que ce soit simple, je suis inquiet si c'est sécurisé, car il est toujours possible pour quelqu'un d'avoir accès à ce fichier, même si elle ne vit que pendant une courte période de temps & a également la possibilité de laisser le fichier si l'autre traite les erreurs ou se bloque. Les IPC comme les sockets et les pipes nommées semblent être une surpuissance pour ce problème. Je suis plus enclin à utiliser des fichiers mappés en mémoire comme expliqué dans ce lien ci-dessous qui parle de partage de mémoire entre processus. Est-ce la bonne approche? En outre, est-ce une bonne idée de remplir la mémoire avec des données factices avant de libérer/effacer pour empêcher les processus de rouge de nettoyer les données de cet emplacement de mémoire?Comment transférer des données sensibles entre les processus dans Windows?

http://msdn.microsoft.com/en-us/library/aa366551(VS.85).aspx

+0

Votre première tâche consiste à s'assurer que vous cryptez vos données. Ensuite, travaillez sur la façon de passer entre les processus. Travailler sous l'hypothèse que, quelle que soit la méthode que vous utilisez pour transmettre les données à travers les processus, quelqu'un sera en mesure de trouver les données. – Jeremy

+0

Si j'opte pour le cryptage des données, je me retrouverai avec un gros problème sur la gestion des clés. Ne pensez-vous pas que c'est une grosse surcharge pour une tâche si simple? – msvcyc

Répondre

4

RPC est votre ami ici (je n'utiliserais pas de canaux nommés pour transférer des données sécurisées car ils ont de sérieux problèmes (car ils fonctionnent dans un espace de noms global et sont donc vulnérables aux attaques accroupies).

Étant donné que les données ne sont pas transmises sur le réseau, le chiffrement n'est pas aussi important que certains le décrivent. Au lieu de cela, un processus implémente un serveur RPC et a l'autre extrémité se lier à ce serveur, émet l'appel RPC avec les informations d'identification et détruit le handle de liaison - cela devrait détruire les structures de données intermédiaires. N'oubliez pas de mettre la mémoire à zéro lorsque vous avez fini de l'utiliser (sinon elle risque d'être conservée sur le disque dur).

Si vous voulez utiliser le cryptage, utilisez CryptProtectMemory qui cryptera les données d'une manière qui peut être utilisée pour IPC.

+0

Absolument. N'utilisez pas de canaux nommés ou un fichier mappé en mémoire. Avec l'une ou l'autre de ces technologies, vous risquez d'introduire une vulnérabilité plus grave que celle que vous essayez d'atténuer. –

+1

Requête: Comment RPC évite-t-il le problème d'accroupissement des noms? – Richard

+1

Si vous vous liez à un point de terminaison statique (ncalrpc: \\ myapp), vous avez des problèmes d'accrochage, mais si vous liez à un point de terminaison dynamique, vous ne le faites pas (vous devez faire attention mais c'est possible). –

1

utiliser certains IPC qui (1) ne sont pas sauvegardées sur le disque, (2) prend en charge les ACL.

Ceci semblerait indiquer des tuyaux nommés.

Alternativement, DCOM et WCF prennent tous deux en charge le cryptage de contenu.

+0

Il est vraiment effrayant de savoir que seuls les tuyaux nommés, wcf et DCOM sont les seules options pour une tâche aussi simple. Je suis toujours en faveur de la cartographie de la mémoire. Des pensées à ce sujet? – msvcyc

+0

@msvcyc: Premièrement, la sécurité n'est jamais simple, d'autre part, sur la base de ces crierta, c'est ce que je vois. Il existe d'autres options (par exemple SSL), mais cela implique la mise en œuvre de votre propre contrôle d'accès. – Richard

Questions connexes