2009-06-11 10 views
1

Ich möchte Benutzernamen und Kennwortinformationen von einem Prozess in einen anderen Prozess übertragen, der auf demselben Server in Windows ausgeführt wird. Was ist der beste Ansatz, um diesen Transfer auf sichere Weise zu erreichen? Ein einfacher Ansatz besteht darin, die Kennwörter in eine Datei zu kopieren und dann den anderen Prozess aus einer Datei lesen zu lassen und die Datei nach dem Lesen zu löschen. Obwohl dies einfach ist, mache ich mir Sorgen, ob es sicher ist, da es immer noch möglich ist, dass jemand Zugriff auf diese Datei erhält, obwohl sie nur für eine kurze Zeit existiert. & hat auch die Möglichkeit, dass die Datei weggelassen wird verarbeitet Fehler oder stürzt ab. IPCs wie Sockets und Named Pipes scheinen für dieses Problem ein Overkill zu sein. Ich bin mehr geneigt, Speicher-Mapped-Dateien zu verwenden, wie in diesem Link weiter unten erläutert, in dem es darum geht, speicherübergreifend Speicher zu teilen. Ist das der richtige Ansatz? Ist es auch eine gute Idee, den Speicher vor dem Freigeben/Löschen mit Dummy-Daten zu füllen, um Rouge-Prozesse daran zu hindern, Daten von diesem Speicherort aufzuspüren?Wie vertrauliche Daten zwischen Prozessen in Windows übertragen werden?

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

+0

Ihre erste Aufgabe sollte es sein, sicherzustellen, dass Sie Ihre Daten verschlüsseln. Dann arbeite daran, wie man zwischen Prozessen vorbeigeht. Arbeiten Sie unter der Annahme, dass unabhängig davon, welche Methode Sie verwenden, um die Daten über Prozesse hinweg zu übertragen, jemand in der Lage ist, die Daten zu finden. – Jeremy

+0

Wenn ich mich für die Datenverschlüsselung entscheide, werde ich große Probleme mit der Schlüsselverwaltung bekommen. Denkst du nicht, dass das ein großer Overkill für solch eine einfache Aufgabe ist? – msvcyc

Antwort

4

RPC ist dein Freund hier (ich würde nicht Rohre gesicherten Daten übertragen genannt verwenden, weil sie einige ernsthafte Probleme haben (weil sie in einem globalen Namensraum arbeiten und sind somit zu hocken anfällig für Angriffe)).

Da die Daten nicht auf dem Draht geführt wird, ist die Verschlüsselung nicht so wichtig wie einige beschreiben. Stattdessen muss ein Prozess einen RPC-Server implementieren und das andere Ende an diesen Server binden, den RPC-Aufruf mit den Berechtigungsnachweisen absetzen und das Bindungs-Handle zerstören - das sollte die Zwischendatenstrukturen zerstören.

den Speicher nicht sicher Null aus, um Vergessen Sie, wenn Sie es nicht mehr verwenden (sonst könnte es auf der Festplatte beibehalten werden).

Wenn Sie die Verschlüsselung verwenden, tun wollen, verwenden CryptProtectMemory, die die Daten in einer Art und Weise verschlüsselt werden, die für IPC verwendet werden kann.

+0

Absolut. Verwenden Sie keine Named Pipes oder eine Speicherabbilddatei. Mit jeder dieser Technologien werden Sie wahrscheinlich eine schwerwiegendere Schwachstelle einführen als diejenige, die Sie zu mindern versuchen. –

+1

Frage: Wie vermeidet RPC das Problem der Namensbesetzung? – Richard

+1

Wenn Sie an einen statischen Endpunkt binden (ncalrpc: \\ myapp), haben Sie Probleme mit der Hocke. Wenn Sie jedoch an einen dynamischen Endpunkt binden, tun Sie dies nicht (Sie müssen vorsichtig sein, aber es ist möglich). –

1

einige IPC verwenden, die (1) nicht auf der Festplatte gesichert ist, (2) unterstützt ACLs.

Dies würde auf Named Pipes hinweisen.

Alternativ unterstützen DCOM und WCF beide Inhaltsverschlüsselung.

+0

Es ist wirklich erschreckend zu wissen, dass nur Named Pipes, WCF und DCOM die einzigen Optionen für solch eine einfache Aufgabe sind. Ich stehe immer noch mit Memory Mapping. Irgendwelche Gedanken dazu? – msvcyc

+0

@msvcyc: Erstens ist Sicherheit nie einfach, zweitens basiert auf diesen crarta, dass was ich sehe. Es gibt andere Optionen (z. B. SSL), aber das bedeutet, dass Sie Ihre eigene Zugriffskontrolle implementieren müssen. – Richard

Verwandte Themen