Laden...

Wie ein Passwort im Code in Klartext für Remote Repository verschlüsseln?

Erstellt von piro299 vor 4 Jahren Letzter Beitrag vor 4 Jahren 2.215 Views
P
piro299 Themenstarter:in
22 Beiträge seit 2016
vor 4 Jahren
Wie ein Passwort im Code in Klartext für Remote Repository verschlüsseln?

Moin zusammen,

ich habe über die Jahre viele C# Consolen bzw. GUI Anwendungen (Winforms) geschrieben, die mit einem MS SQL Datenbank Server kommunizieren.

Für diese Anwendungen habe ich den Benutzer und das Passwort im Code direkt hinterlegt.

Das war bis jetzt kein Problem. Der Programmcode liegt ja nur auf meinem Laptop und nur ich programmiere die Anwendungen.

Nun möchte ich aber meinen Sourcecode in einem Online Repository ablegen. Wir verwenden von MS Azure DevOps.

Nur jetzt habe ich das Problem, dass dann die Passwörter in Klartext im Online Repository zu sehen sind.

Eine Möglichkeit wäre auch, dass ich ein kleines Programm schreibe, welches mir das Passwort verschlüsselt.
Dann könnte ich es verschlüsselt im Code ablegen und eine Methode im Code entschlüsselt es wieder.
Klar kann man die Methode sehen und mit einem eigenen Programm und der Methode es wieder entschlüsseln.
Da mein Ziel ist, dass Passwort nicht im Klartext im Code zu haben, könnte es ausreichen. Hätte es aber noch gerne sicherer.

Ich habe hier im Forum schon ein wenig gesucht. Bin aber leider nicht wirklich fündig geworden zu meinem Fall.

Darf ich fragen, was die sinnvollsten und aktuellen Möglichkeiten sind?

Vielen Danke im Voraus
Sven

16.807 Beiträge seit 2008
vor 4 Jahren

Für diese Anwendungen habe ich den Benutzer und das Passwort im Code direkt hinterlegt.

Absolutes No Go.

  • Das ist unsicher
  • Das ist nicht wartbar

Passwörter haben niemals was im Quellcode zu suchen (Never store credentials as code/config in Azure Repos).
Der Wunsch danach zeigt i.d.R. eine Sicherheitslücke im Development Flow.
Modere Quellcode-Systeme verweigern einen Commit bei einer entsprechenden Erkennung.
Es gab genug Leaks durch Credentials in Git und Co. Genug Gruppen haben sich auf den Plattformen umgebaut.

Bei Webanwendungen sind Passwörter immer Teil des Environments, also zB. der Test oder der Produktivumgebung.
Und dort sollten diese auch gepflegt werden; niemals im Code.

Bei Desktop-Anwendungen sollte das Passwort niemals innerhalb der Anwendung gespeichert werden, sondern in den dafür vorgesehen Orten.
Im Falle von .NET gibts dazu seit ca. 15 Jahren die entsprechenden Application bzw. User Settings.
Wenn ich Dich richtig verstehe, dann willst Du wohl eher User Settings (Benutzercredentials für die Datenbankverbindung).

Ich habe hier im Forum schon ein wenig gesucht. Bin aber leider nicht wirklich fündig geworden zu meinem Fall.

[Tutorial] Konfigurationsmodell im .NET Framework alternativ auch der Windows Credential Manager. (über die Win32 API ansprechbar; alternativ gibts dazu auch nen Projekt https://www.nuget.org/packages/CredentialManagement/)

Wenn sich jedoch alle Benutzer die gleichen SQL Credentials teilen, die also der Benutzer selbst nicht kennen darf, dann ist das ganze Konzept hinfällig - und unsicher.

Sicher kannst Du sowas über zwei arten Lösen:

  • Benutzerverwaltung in der Datenbank (zB Active Directory)
  • Eigene Benutzerverwaltung ohne direkten Datenbankzugriff (mit Service davor)
P
piro299 Themenstarter:in
22 Beiträge seit 2016
vor 4 Jahren

Danke für die klaren Worte.

Dann werde ich mal die Credentials aus dem Code holen.

Der Sinn, dass alle Anwender sich einen SQL User teilen, liegt daran, dass ich nicht weiß wer die Anwendung ausführt.

Die Anwendung ermittelt Computerdaten des Benutzers beim Windows Login und speichert diese dann in der Datenbank.

Ich werde mir mal das Konzept anschauen, die Credentials in der app.config oder user.config zu speichern.

Ich möchte das Sicherheitsrisiko vermeiden.

Danke für weiter Meinungen oder Vorschläge.
Sven

16.807 Beiträge seit 2008
vor 4 Jahren

Der Sinn, dass alle Anwender sich einen SQL User teilen, liegt daran, dass ich nicht weiß wer die Anwendung ausführt.

Sicherheitstechnisch ist das mehr als bedenklich. Je nachdem was für Daten Du speicherst ist so ein vorgehen implizit auch durch Gesetze verboten.
Das ist eine große Sicherheitslücke.

Die Anwendung ermittelt Computerdaten des Benutzers beim Windows Login und speichert diese dann in der Datenbank.

Rechtlich gesehen ist das ein Datenschutzthema. Nur als Hinweis. Das kann genau so ein Fall sein, wo Du eigentlich Vorgaben durch das Gesetz (hier zB DSGVO) beachten musst.

Technisch gesehen kann offenbar jeder User, weil man sich ja einen Login teilt, die Daten der Kollegen sehen.
Prinzipiell könnte das durchaus eine Gesetzesverletzung darstellen, wofür ein MA das Unternehmen belangen kann, sofern sich aus den Daten zB Benutzerverhalten extrahieren lassen etc.

Tipp: machs richtig, nicht wie aktuell 😃

P
piro299 Themenstarter:in
22 Beiträge seit 2016
vor 4 Jahren

Danke für den Hinweis. Aber das Thema des Datenschutzes ist geklärt. Habe jetzt nicht alles erzählt, sonst wäre ein ganz langer Thread geworden 😉

Nochmals danke für deine Hilfe. Du hast mich zum Nachdenken gebracht und ich werde meine Anwendung umbauen.

Vielen Dank nochmal, auch für deine schnelle Antworten.

16.807 Beiträge seit 2008
vor 4 Jahren

Falls Du trotzdem nen technologischen Tipp haben willst, da es ja offenbar eine Unternehmensanwendung ist:

  • Kommunizier nicht mit der Datenbank direkt
  • Kommunizier zB. via gRPC, MQTT oder HTTP zB gegen einen ASP.NET Core Endpunkt
  • Für die Authentifizierung kannst Du einfach Active Directory verwenden
  • Die Settings kannst Du durch Policies an die Registry der PCs verteilen

Damit hast Du alle Anforderungen erschlagen:

  • Settings durch Registry und zentrale Verwaltung
  • Credentials brauchst nicht weil Security by Design durch Active Directory
P
piro299 Themenstarter:in
22 Beiträge seit 2016
vor 4 Jahren

danke dir.