2009-06-16 8 views
4

Je travaille sur une application Windows .NET qui utilisera Process.Start pour lancer une autre application .NET développée en interne fonctionnant sur le même PC. Je dois transmettre des informations de connexion à la base de données, notamment un ID utilisateur et un mot de passe, à l'application cible. J'essaie de déterminer si j'ai besoin de crypter l'information avant de l'envoyer.Dois-je transmettre des données sensibles à un appel Process.Start dans .NET?

En supposant que le PC de l'utilisateur final ne soit pas compromis, les informations de connexion seront-elles exposées n'importe où si je les transmets non chiffrées dans les arguments?

Would quelque chose comme ça ... OK être

string myExecutable = "myApp.exe"; 
string server = "myServer"; 
string database = "top_secret_data"; 
string userID = "myUser"; 
string password = "ABC123"; 
string dbInfo = string.Format("server={0} database={1} userID={2} password={3}", server, database, userID, password); 
ProcessStartInfo startInfo = new ProcessStartInfo(myExecutable, dbInfo); 
Process.Start(startInfo); 

Ou devrais-je utiliser quelque chose comme ça ...

var crypto = new MySymmetricCryptoLib.Crypto(); 
string myExecutable = "myApp.exe"; 
string server = crypto.Encrypt("myServer"); 
string database = crypto.Encrypt("top_secret_data"); 
string userID = crypto.Encrypt("myUser"); 
string password = crypto.Encrypt("ABC123"); 
string dbInfo = string.Format("server={0} database={1} userID={2} password={3}", server, database, userID, password); 
ProcessStartInfo startInfo = new ProcessStartInfo(myExecutable, dbInfo); 
Process.Start(startInfo); 

Répondre

4

Récupération des arguments qu'un processus a été appelé avec est assez facile, Ainsi, ils seront exposés localement à un utilisateur techniquement intéressé. Si ce n'est pas un problème pour vous, alors je ne m'inquiéterais pas, puisque vous dites que vous ne transmettez pas sur le réseau et votre question nous demande de supposer que la machine n'est pas compromise.

2

La question de savoir de qui vous essayez de protéger les données n'est pas claire. C'est déroutant parce que vous avez dit "supposons que le PC n'est pas compromis".

Si vous démarrez un processus local sur la machine et que celle-ci n'est pas compromise, de quoi est-il protégé? Rien ne traversera le réseau dans ce scénario afin que personne ne puisse espionner les arguments.

Toutefois, si vous craignez que quiconque ayant un accès administratif à l'ordinateur ou à l'utilisateur puisse potentiellement voir les données, vous devez le crypter. Il est assez facile de voir les arguments de la ligne de commande d'un processus. Tout utilisateur semi-compétent pourrait les trouver.

+0

Bon point. Pour clarifier, je n'avais pas de "qui" en tête. Je voulais juste jauger le risque général de transmettre ces données non cryptées, et voir dans quelles circonstances les données pourraient être exposées. –

0

Comme vous devez modifier l'application réceptrice pour effectuer le décryptage, pourquoi ne pas modifier l'application réceptrice pour la lire à partir d'un fichier de configuration, puis encrypt the config file. Si vous devez transmettre des valeurs différentes à l'autre application, pourquoi ne pas passer une clé connectionString?

+0

Bonne question. Je n'ai pas spécifié cela dans la question, mais les informations de connexion sont très variables. Cela dépend de l'utilisateur et de l'environnement. –

+0

Ne pouvez-vous donc pas encapsuler cette logique dans la deuxième application? – RichardOD

+0

Ce serait généralement une bonne idée, mais pour des raisons que je ne peux pas expliquer ici, ce n'est pas une option dans ce cas. –

1

Je voudrais crypter la chaîne entière pas les pièces individuelles, vous avez essentiellement dit à un utilisateur malchanceux hey voici les informations de connexion juste aller de l'avant et le casser. Une autre option consisterait à transmettre les arguments une fois que l'autre application a démarré.

Il est important que les mesures de sécurité de votre bâtiment identifient l'attaque (accès aux informations de connexion de la base de données) et qui lancera l'attaque. Essayez-vous d'empêcher un utilisateur local d'obtenir ceci? Essayez-vous d'empêcher un utilisateur normal ou un utilisateur expert? Par exemple, un expert peut aller de l'avant et vider la mémoire du processus, et trouver la chaîne non cryptée.

1

Utilisez un canal nommé et définissez les listes de contrôle d'accès de manière appropriée, puis faites en sorte que le processus fils hérite de la poignée - ne vous inquiétez pas du cryptage.

Questions connexes