Dll <-> Exe Sicherheit
-
Hallo!
Eine Frage zu "Sicherheit" zwischen Dlls und Exe und auch zum Dll Konzept von Windows. Ich habe vor Teile meiner Anwendung in kleine Dlls auszulagern, um für mehr Übersichtlichkeit zu sorgen. Ähnliche wie in C#. (Die Dlls werden nur von meiner Anwendung genutzt).
Da ich aber eine sicherheitskritische Datenstruktur habe, die teilweise ver-/entschlüsselt wird stellt sich mir folgende Frage.
Ich würde gerne die Verschlüsselung in eine Dll stecken und die Datenstrktur in eine andere Dll. Die Anwendung (Exe) hat zur Laufzeit eine Instanz der Datenstruktur im Speicher, diese ruft ab und zu die Verschlüsselungsfunktionen der Dll auf. Nun werden die Daten doch zwischen verschiedenen Prozessen hin und hergereicht, stellt das ein Sicherheitsrisiko dar? Wäre es also "sicherer" Verschlüsselung und Datenstruktur (den Code) in der Exe zu belassen?Wenn die Exe die benötigten Funktionen der Dll aufruft, wird die Dll dann in den gleichen Prozess/Speicherbereich wie die Exe geladen?
Gruß
Klaas
-
Klaas123 schrieb:
Nun werden die Daten doch zwischen verschiedenen Prozessen hin und hergereicht, stellt das ein Sicherheitsrisiko dar?
Wie kommst du darauf? Beim Laden der DLL wird doch nur der Code in den Adressraum des Prozesses geladen/gemappt. Da wird kein neuer Prozess gestartet. (Wieso auch?)
Klaas123 schrieb:
Wenn die Exe die benötigten Funktionen der Dll aufruft, wird die Dll dann in den gleichen Prozess/Speicherbereich wie die Exe geladen?
Ja. (Bzw. falls die DLL schon einmal geladen ist, in den Adressraum gemappt, IIRC).
-
devkid schrieb:
Wie kommst du darauf? Beim Laden der DLL wird doch nur der Code in den Adressraum des Prozesses geladen/gemappt. Da wird kein neuer Prozess gestartet. (Wieso auch?)
Das war mir halt so nicht ganz klar. Also kann einen geschützten Speicherbereich, der mit CryptProtectMemory bearbeitet wurde zwischen Dll und Exe mit dem Flag CRYPTPROTECTMEMORY_SAME_PROCESS hin und herreichen, richtig?
Gruß
Klaas
-
Nun ja, mit der WinAPI kenn ich mich jetzt nicht ganz so aus, aber wenn das Flag nur die Bedingung hat, dass der Speicher im selben Prozess bleibt, dann eigentlich ja. Es wird jedenfalls definitiv kein neuer Prozess gestartet, wenn eine DDL geladen wird; die läuft im aufrufenden Prozess.
-
Allerdings hast du immer noch die exportierten Funktionen (Name, Parameter)... Die bilden einen einfachen Angriffs- oder zumindest Startpunkt.
-
Gugi schrieb:
Allerdings hast du immer noch die exportierten Funktionen (Name, Parameter)... Die bilden einen einfachen Angriffs- oder zumindest Startpunkt.
Inwiefern?