Passwörter sicher im Source Code hinterlegen
Hi,
hat jemand eine Idee wie man ein Passwort sicher im Code hinterlegen kann ohne das es dort im Klartext steht?
Das ganze sollte in C# machbar sein.
Gibt es dafür irgendwelche Funktionen?
hat jemand eine Idee wie man ein Passwort sicher im Code hinterlegen kann ohne das es dort im Klartext steht?
Das ganze sollte in C# machbar sein.
Gibt es dafür irgendwelche Funktionen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1514194552
Url: https://administrator.de/contentid/1514194552
Ausgedruckt am: 23.11.2024 um 14:11 Uhr
18 Kommentare
Neuester Kommentar
Irgendwelche Funktionen ist ein gutes Stichwort.
Das Psswort einfach in einen String schreiben würde ich vermeiden. Aber die Kannst z.b. eine Passwort Funktion schreiben die die als Result einen String liefert und den in sich über z.B. Schleifen zusammen baut. Das ist wesentlich komplexer zu dekompilieren als ein einfacher String.
Gruß
PJM
Das Psswort einfach in einen String schreiben würde ich vermeiden. Aber die Kannst z.b. eine Passwort Funktion schreiben die die als Result einen String liefert und den in sich über z.B. Schleifen zusammen baut. Das ist wesentlich komplexer zu dekompilieren als ein einfacher String.
Gruß
PJM
Hallo,
wenn es nur unlesbar sein soll, ist das easy. Da reicht z.B. eine einfache Caesar Chiffre.
https://isolution.pro/de/t/cryptography-with-python/cryptography-with-py ...
Wenn das sicher sein soll, geht es im Grunde nicht, da irgendwann einmal das Password an die Endanwendung übergeben werden muss und genau zu diesem Zeitpunkt ja im Speicher liegt.
Grüße
lcer
wenn es nur unlesbar sein soll, ist das easy. Da reicht z.B. eine einfache Caesar Chiffre.
https://isolution.pro/de/t/cryptography-with-python/cryptography-with-py ...
Wenn das sicher sein soll, geht es im Grunde nicht, da irgendwann einmal das Password an die Endanwendung übergeben werden muss und genau zu diesem Zeitpunkt ja im Speicher liegt.
Grüße
lcer
Hallo,
Grüße
lcer
Zitat von @NordicMike:
2) Oder su verbindest mit ssh keys und brauchst kein Passwort mehr. Das kommt auf die Anwendung an.
Was unterscheidet diesbezüglich hier den den SSH-Key von einem Passwort?2) Oder su verbindest mit ssh keys und brauchst kein Passwort mehr. Das kommt auf die Anwendung an.
Grüße
lcer
Hallo,
reden wir hier von einer Passwort Funktion oder möchtest du Secrets für die Anwendung selbst speichern? Letzters sollte man definitiv nicht im Code speichern sondern in Konfigurationsdateien.
https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-s ...
MfG
reden wir hier von einer Passwort Funktion oder möchtest du Secrets für die Anwendung selbst speichern? Letzters sollte man definitiv nicht im Code speichern sondern in Konfigurationsdateien.
https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-s ...
MfG
Für C#:
Data Protection API (DPAPI)
https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)
Damit wird dein Passwort in z.B. einer Datei abgelegt und dabei so verschlüsselt das "dein useraccount" (alternativ der maschinenaccount) es entschlüsseln kann - damit kannst du es nutzen solange zu in windows eingeloggt bist.
Data Protection API (DPAPI)
https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)
Damit wird dein Passwort in z.B. einer Datei abgelegt und dabei so verschlüsselt das "dein useraccount" (alternativ der maschinenaccount) es entschlüsseln kann - damit kannst du es nutzen solange zu in windows eingeloggt bist.
Hallo,
Leider haben wir keine weiteren Infos zum Einsatzszenario. Ich hatte eher an Client-Server Anwendungen gedacht, bei denen die Software auf z.B. eine API zugreifen soll, der Nutzer aber ohne die Software nicht.
Grüße
lcer
Zitat von @NordicMike:
Wenn man davon ausgeht, dass der User eine Benutzerkennung mit Passwort - oder eben einen ssh-Key - besitzt, die von der Software (mit)verwendet werden soll, wäre das natürlich ein guter Weg, genau wie @NetzwerkDude Data Protection API (DPAPI).Was unterscheidet diesbezüglich hier den den SSH-Key von einem Passwort?
Dass der Key z.B. Passwortgeschützt ist und z.B. von OpenSSH unsichtbar in den Tiefen des Systems hinterlegt ist. So kann es keiner verwenden, wenn er sich den Key einfach kopiert.Leider haben wir keine weiteren Infos zum Einsatzszenario. Ich hatte eher an Client-Server Anwendungen gedacht, bei denen die Software auf z.B. eine API zugreifen soll, der Nutzer aber ohne die Software nicht.
Grüße
lcer
Zitat von @NordicMike:
Was unterscheidet diesbezüglich hier den den SSH-Key von einem Passwort?
Dass der Key z.B. Passwortgeschützt ist und z.B. von OpenSSH unsichtbar in den Tiefen des Systems hinterlegt ist. So kann es keiner verwenden, wenn er sich den Key einfach kopiert.Dann kann die Software blöderweise auch nicht den Key verwenden. Entweder man hinterlegt das Passwort des Keys in der Software (womit man wieder vor dem Anfangsproblem steht) oder man übergibt das Passwort als Parameter bei jedem Start der Software (wobei dann das Passwort als statische Variable im Programm Code hinterlegt ist, was ebenfalls Bad Practice ist - egal ob hashed oder in klartext).
Edit: Gerade wieder den richtigen TechNet Artikel gefunden, welches das Thema konkret behandelt und wie man das in der .NET Welt umsetzt: https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=a ...
Hallo,
um es kurz zu machen - Passwörter gehören nicht in den Sourcecode.
Die Sicherheitsempfehlungen gehen alle dahin, zu überprüfen, ob Benutzer und Computer vertrauenswürdig sind. Ein einkompiliertes oder gar geskriptetes Passwort unterläuft all diese Sicherheitsstrategien.
Das jedes Programm läuft unter einem Benutzerkonto (sogar bei Linux ). Und darüber kann man dann den Zugriff erlauben - oder eben nicht.
Stichwort: Zero-Trust - Beispiel Google: https://cloud.google.com/beyondcorp/
Fragen nach "Passwort-Im-Programm" stellen sich nur bei schlecht geplanten Anwendungen, bei denen man zwar die Programmfunktionalität, nicht aber die Sicherheit bedacht hat.
Grüße
lcer
um es kurz zu machen - Passwörter gehören nicht in den Sourcecode.
Die Sicherheitsempfehlungen gehen alle dahin, zu überprüfen, ob Benutzer und Computer vertrauenswürdig sind. Ein einkompiliertes oder gar geskriptetes Passwort unterläuft all diese Sicherheitsstrategien.
Das jedes Programm läuft unter einem Benutzerkonto (sogar bei Linux ). Und darüber kann man dann den Zugriff erlauben - oder eben nicht.
Stichwort: Zero-Trust - Beispiel Google: https://cloud.google.com/beyondcorp/
Fragen nach "Passwort-Im-Programm" stellen sich nur bei schlecht geplanten Anwendungen, bei denen man zwar die Programmfunktionalität, nicht aber die Sicherheit bedacht hat.
Grüße
lcer
Zitat von @GreeeNn:
Hi,
hat jemand eine Idee wie man ein Passwort sicher im Code hinterlegen kann ohne das es dort im Klartext steht?
Hi,
hat jemand eine Idee wie man ein Passwort sicher im Code hinterlegen kann ohne das es dort im Klartext steht?
Das ist nicht möglich. Auch wenn du es noch so verschleiert, solange Du ohne Benutzerunteraktion oder Tokens, aus denen Du etwas ausliest machst, kann man es immer rekonstruieren.
Benutz halt ein TPM oder Kryptostick, wenn Du sichergehen willst.
lks
Kurz: Das ganze ist nicht wirklich sicher machbar. Du kannst lediglich den Aufwand etwas erhöhen. Trotzdem hat der Client zur Verbindung das Klartext-Passwort, das man abgreifen kann. Wirklich sicher ist nur ein Wrapper, der serverseitig unter deiner Kontrolle liegt. Beispiel: Du willst auf eine MySQL-Datenbank zugreifen. Dafür schreibst du dir eine API, ASP.NET Core/PHP oder was auch immer. Das Programm verbindet sich zu dieser API und hat nicht mehr das DB Passwort.
Da du nur sehr spärlich beschrieben hast was du machen möchtest, müsstest du nun selbst schauen, wie du das auf deinen Anwendungszweck übertragen kannst.
Da gibt es nichts zu klauen, das steht unter einer CC Lizenz
Aber viel wichtiger: Das ist eine stinknormale symmetrische Verschlüsselung. Du könntest genau so gut AES oder jede andere als halbwegs sicher anerkannte Verschlüsselung nehmen, die Grundproblematik bleibt die gleiche: Es gibt einen Schlüssel, der im Quellcode steht. Den findet man mit einer Stringsuche schnell und ist damit nicht übermäßig sicher. Dein Programm hat also bisher wohl nur keiner mit böswilligen Absichten auseinander genommen
Da du nur sehr spärlich beschrieben hast was du machen möchtest, müsstest du nun selbst schauen, wie du das auf deinen Anwendungszweck übertragen kannst.
Da gibt es nichts zu klauen, das steht unter einer CC Lizenz
Aber viel wichtiger: Das ist eine stinknormale symmetrische Verschlüsselung. Du könntest genau so gut AES oder jede andere als halbwegs sicher anerkannte Verschlüsselung nehmen, die Grundproblematik bleibt die gleiche: Es gibt einen Schlüssel, der im Quellcode steht. Den findet man mit einer Stringsuche schnell und ist damit nicht übermäßig sicher. Dein Programm hat also bisher wohl nur keiner mit böswilligen Absichten auseinander genommen
Hallo,
grüße
lcer
Zitat von @GreeeNn:
Das Programm muss während der Laufzeit die Identität eines anderen AD Benutzers annehmen für Berechtigungen.
Und das ist dann der sicherheitstechnische Konzeptionsfehler / Sicherheitslücke. Besser wäre es, hier die Benutzerberechtigungen zu verwenden.Das Programm muss während der Laufzeit die Identität eines anderen AD Benutzers annehmen für Berechtigungen.
grüße
lcer
@GreeeNn
So etwas bildet man nicht in einem Programm ab, sowas wird in einem Backend abgebildet.
Dann brauch man sich um Passwörter im SourceCode keine Sorgen machen ........
So etwas bildet man nicht in einem Programm ab, sowas wird in einem Backend abgebildet.
Dann brauch man sich um Passwörter im SourceCode keine Sorgen machen ........