Benutzer mit den meisten Antworten
Anwendungsrollen vs. Sicherheit

Frage
-
Hallo zusammen,
ich habe vor, in einer SQL Server Applikation Anwendungsrollen zu verwenden, um zu erreichen, dass nur ganz bestimmte Anwendungen auf die DB zugreifen können. Dabei habe ich folgende Fragen.
- Was ist der Vorteil von Anwendungsrollen gegenüber SQL Server Logins mit festen (generierten) Kennwörtern.
- Wie kann ich dafür sorgen, dass das in der Anwendung (VB.net) hinterlegte Kennwort nicht ausgespäht werden kann, z.B. aus dem Binär(?)code?
- Kann das Kennwort bei einer ODBC-Verbindung über TCP/IP, Named Pipes, Shared Memory irgendwie ausgelesen werden?
- Habe ich noch Aspekte vergessen?
Ich freue mich über alle Hinweise und Hilfen.
Gruss, Rainer
Antworten
-
Hallo Rainer,
eine Beschreibung zur Funktionsweise und Vergleich mit anderen Konzepten findest Du unter
Anwendungsrollen und Erstellen von Anwendungsrollen in SQL Server (ADO.NET)Das Kennwort ist (via Encrypt) nicht sicher verschlüsselt und für höhere Sicherheit
sollte die SSL Verschlüsselung aktiviert werden, so dass es nicht im Netzwerk ausgespäht werden kann.
Allgemein gilt: Kennwörter sollte man nicht in der Anwendung selbst hinterlegen.
Dort lassen sie sich zum einen schlecht anpassen - und eine Änderung sollte routinemäßig erfolgen, wie für alle Passwörter.
Ausserdem können sie (mit einigen Kenntnissen) aus einer .NET Assembly extrahiert werden.
Sinnvoller für .NET Anwendungen: Verlagere die Informationen in Konfigurationsdateien.
Dort kannst Du sie zum einen verschlüsseln und den Zugriff entsprechend begrenzen
und eine Änderung ist leichter (durch einen Adminstrator) durchführbar.Zum Verschlüsseln siehe u. a.: Übersicht über die geschützte Konfiguration
und Implementing Protected Configuration With Windows AppsGruß Elmar
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 12. Oktober 2010 15:36
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 26. Oktober 2010 15:37
-
Hallo Rainer,
wenn Du einen Dongle verwendest, so könntest Du die Teile zum Entschlüsseln der Verbindungszeichenfolge
(und anderes kritische) dort ausführen lassen. Die heutigen Dongles unterstützen dort einiges.
Denn .NET Assemblies lassen sich nur bedingt schützen, mit Reflector oder ILDasm kann man
die "interessanten" Code-Teile relativ leicht extrahieren, da helfen auch Obfuscatoren nur bedingt.Zeichenketten uam. sind theoretisch im Speicher auslesbar , wenn man auch einiges Know-How benötigt (ebenso wie oben)
Minimieren kann man, dass in dem man die SecureString-Klasse verwendet.Leichter ("attraktiver") ist bei heutigen WLAN und Co.-Strukturen das lauschen an Netzwerkverbindungen,
was durch SSL verhindert werden kann.Gruß Elmar
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 12. Oktober 2010 15:36
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 26. Oktober 2010 15:37
Alle Antworten
-
Hallo Rainer,
eine Beschreibung zur Funktionsweise und Vergleich mit anderen Konzepten findest Du unter
Anwendungsrollen und Erstellen von Anwendungsrollen in SQL Server (ADO.NET)Das Kennwort ist (via Encrypt) nicht sicher verschlüsselt und für höhere Sicherheit
sollte die SSL Verschlüsselung aktiviert werden, so dass es nicht im Netzwerk ausgespäht werden kann.
Allgemein gilt: Kennwörter sollte man nicht in der Anwendung selbst hinterlegen.
Dort lassen sie sich zum einen schlecht anpassen - und eine Änderung sollte routinemäßig erfolgen, wie für alle Passwörter.
Ausserdem können sie (mit einigen Kenntnissen) aus einer .NET Assembly extrahiert werden.
Sinnvoller für .NET Anwendungen: Verlagere die Informationen in Konfigurationsdateien.
Dort kannst Du sie zum einen verschlüsseln und den Zugriff entsprechend begrenzen
und eine Änderung ist leichter (durch einen Adminstrator) durchführbar.Zum Verschlüsseln siehe u. a.: Übersicht über die geschützte Konfiguration
und Implementing Protected Configuration With Windows AppsGruß Elmar
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 12. Oktober 2010 15:36
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 26. Oktober 2010 15:37
-
Hallo Elmar,
vielen Dank für Deine umfangreichen Hinweise. Ich denke - nach Querlesen der Links - dass ich im Grunde alle notwendigen Bausteine zusammen habe...
- Ich verwende also Anwendungsrollen oder eine Alternative wie z.B. Login-less user.
- Kennwörter hinterlege ich in verschlüsselten Konfigurationsdateien (Hinweis: im Umfeld werden Tools von WiBu Systems als Kopierschutz eingesetzt, die auch z.B. dongle-basierte Verschlüsselung unterstützen).
- Ich sorge für eine verschlüsselte Netzwerkverbindung (Hinweis: es handelt sich um eine reine Inhouse-Anwendung, d.h. ein Intranet mit entsprechend geringerem Gefahrenpotential).
Eine letzte (paranoide?) Frage noch:
Wenn ich ein Kennwort aus einer verschlüsselten Datei auslese, entschlüssele und dann einer Verbindung zur Verfügung stelle, existiert das Kennwort ja für kurze Zeit im Klartext im Programmablauf. Ist so etwas mit "vertretbarem" Aufwand ausspionierbar (natürlich wird keine Debug-Version ausgeliefert)?
Gruß, Rainer
-
Hallo Rainer,
wenn Du einen Dongle verwendest, so könntest Du die Teile zum Entschlüsseln der Verbindungszeichenfolge
(und anderes kritische) dort ausführen lassen. Die heutigen Dongles unterstützen dort einiges.
Denn .NET Assemblies lassen sich nur bedingt schützen, mit Reflector oder ILDasm kann man
die "interessanten" Code-Teile relativ leicht extrahieren, da helfen auch Obfuscatoren nur bedingt.Zeichenketten uam. sind theoretisch im Speicher auslesbar , wenn man auch einiges Know-How benötigt (ebenso wie oben)
Minimieren kann man, dass in dem man die SecureString-Klasse verwendet.Leichter ("attraktiver") ist bei heutigen WLAN und Co.-Strukturen das lauschen an Netzwerkverbindungen,
was durch SSL verhindert werden kann.Gruß Elmar
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 12. Oktober 2010 15:36
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 26. Oktober 2010 15:37