Sensible Datenspeicherung - Best Practices

8

Ich habe kürzlich angefangen, an einem persönlichen Projekt zu arbeiten, bei dem ich mit Java eine Verbindung zu einer Datenbank hergestellt habe. Das brachte mich zum Nachdenken. Ich muss die Anmeldeinformationen für ein Datenbankkonto auf dem DB-Server angeben, um auf die Datenbank zugreifen zu können. Aber wenn ich es hart codiere, kann jemand das Programm dekompilieren und diese Anmeldeinformationen extrahieren. Wenn ich es in einer externen Setup-Datei speichere, besteht das gleiche Problem, nur dass es für sie noch einfacher ist, es zu bekommen. Ich könnte die Daten verschlüsseln, bevor ich sie an einem der beiden Orte speichere, aber es scheint, dass dies auch nicht wirklich ausfallsicher ist, und ich bin keineswegs ein Verschlüsselungsexperte. Was sind also einige bewährte Methoden zum Speichern vertraulicher Setup-Daten für ein Programm?

Kenneth
quelle

Antworten:

10

Mehrere Optionen hier:

  • Führen Sie das Java-Programm unter einem Domänenbenutzer aus, dem Zugriff auf die Datenbank gewährt wird (oder speichern Sie alternativ die Kennwortinformationen in einer Datei, auf die nur der Benutzer zugreifen kann, der Ihr Programm ausführt).

  • Verwenden Sie einen Schlüsselspeicher mit Einschränkungen sowohl für den Benutzer als auch für die Software, die den Schlüssel verwenden wird (z. B. was Mac OS X bietet).

  • Verwenden Sie eine Standardverschlüsselungslösung mit einer Schnittstelle, für die beim Programmstart das Verschlüsselungskennwort eingegeben werden muss (damit der Administrator, der das Programm startet, nur das Kennwort kennt).

  • erfordern, dass die UID / das Passwort für die Datenbank beim Programmstart eingegeben wird

Blaubeerfelder
quelle
3

Die erste Regel für die Speicherung sensibler Daten lautet "Nicht". In diesem Fall sollten Sie wahrscheinlich das tun, was fast jedes Authentifizierungssystem tut - jedem Benutzer seine eigenen Anmeldeinformationen ausstellen, damit Sie dieses Problem nicht haben. Oder Probleme wie "Oh, Snap, das Datenbankkonto wurde kompromittiert. Jetzt muss ich herausfinden, wie ich dieses Passwort jedem Benutzer erneut ausstellen kann. Einschließlich derjenigen, von denen ich nichts weiß."

Wyatt Barnett
quelle
2

Es gibt keine Möglichkeit zu verhindern, dass jemand, der Ihre Bewerbung erhält, den Benutzernamen und das Passwort erfährt. Wenn dies nicht akzeptabel ist, müssen Sie Software zwischen der Anwendung und der Datenbank platzieren, z. B. einen Webdienst.

Kevin Cline
quelle
1

Normalerweise möchten Sie versuchen, diese Art von Informationen zu verschlüsseln. Die allgemeine Praxis bei der Webentwicklung in .NET besteht beispielsweise darin, den Abschnitt der web.config zu verschlüsseln, der die Verbindungszeichenfolgen enthält. Sie können auch Domänen- / Windows- / Betriebssystemkonten anstelle von direkten Verbindungen verwenden. Dies verhindert, dass Sie das Kennwort fest in Ihre App- oder Konfigurationsdateien codieren. Stattdessen verwalten Sie Ihre Verbindungen, indem Sie den Benutzer der Anwendung (oder des Kontos, unter dem sie ausgeführt wird) autorisieren.

Ken Henderson
quelle
-2

Sie müssen Ihre Anwendung verschlüsseln, damit sie nicht dekompiliert werden kann. Ich kenne die Java-Tools nicht, aber sie existieren auf jeden Fall.

Übrigens sollten Sie Ihre Anwendungen aus Sicherheitsgründen immer verschlüsseln! Dann können Sie es fest codieren, wenn Sie möchten.

BEARBEITEN: Nach dem Kommentar werde ich präzisieren, dass Sie Ihre Anwendung verschlüsseln KÖNNEN. Sie müssen lediglich ein Tool (eine Art "on the fly" -Entschlüsseler) auf dem Computer des Benutzers haben, um die verschlüsselte App auszuführen. Dies ist, was ich mit Foxpro verwendet habe und es existiert wahrscheinlich auch für andere Sprachen. Möglicherweise wird diese Art von Tools in neueren Technologien nicht verwendet, aber es macht es definitiv unmöglich, meine Apps zu dekompilieren, während sie gut laufen.

EDIT 2: Einige Produkte, die ich für die .NET-Verschlüsselung gefunden habe: http://www.hallogram.com/ezcryptonet/index.html

Mathieu
quelle
4
Verschleierung! = Verschlüsselung. Was Sie empfohlen haben, ist weder technisch machbar noch existiert es für irgendeine Software. Programme, die verschlüsselt sind, damit sie nicht dekompiliert werden können, können ebenfalls nicht ausgeführt werden. Programme, die ausgeführt werden können, können immer dekompiliert werden
blueberryfields
2
Was hindert den Benutzer daran, die Ausgabe des Entschlüsselers zu sammeln oder den Entschlüsseler zu ändern?
Kevin Cline
Mein Wortlaut hier war falsch, er entschlüsselt nicht, sondern interpretiert. Über das Modifizieren des Entschlüsselers, nun, ich denke, das könnte vielleicht eine Möglichkeit sein. Mein Wissen über den Subjet ist nicht erweitert genug, um darauf zu antworten.
Mathieu