Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi String schützen (https://www.delphipraxis.net/199160-delphi-string-schuetzen.html)

jacky213 31. Dez 2018 12:52

Delphi String schützen
 
Moin Moin,

ich habe ein Programm geschrieben welches beim öffnen nach einem Passwort fragt. Hier geht es jetzt nicht darum das gespeicherte Passwort zu schützen, denn sofern der Benutzer das falsche Passwort eingibt, können die Dateien ohnehin nicht entschlüsselt werden. Das benötigte Passwort ist also nicht im Programm gespeichert.

Mein Problem ist es, dass nachdem der Benutzer das Passwort eingegeben hat, dieses in einem String gespeichert wird weil es während der Benutzung mehrmals benötigt wird. Gibt es eine Möglichkeit diesen String zu schützen?

Ich möchte verhindern das der Speicher durchsucht wird und das Passwort dort im Klartext steht.

p80286 31. Dez 2018 13:02

AW: Delphi String schützen
 
Wie wäre es, nur die Information, daß der Benutzer sich identifiziert hat, abzulegen?
Ansonsten gäbe es die Möglichkeit z.B. einen Hash abzulegen. Aber letztendlich erhöhst Du mit jeder "Sicherung" nur den Aufwand an die Passwortinformation zu kommen. Sicherheit gibt es nicht.

Gruß
K-H

jacky213 31. Dez 2018 13:08

AW: Delphi String schützen
 
Der Hash wäre wieder ein Hinweis auf das Passwort und ich wollte zu beginn schon kein Passwort in den Quellcode schreiben. Bei der Verschlüsselung handelt es sich um AES und wer das ohne Brute Force aufbekommt, der kriegt auch ganz andere Sachen hin.

Ich muss lediglich verhindern das jemand während der Laufzeit und während jemand angemeldet ist den Programmspeicher durchsucht. Gibt es eine Möglichkeit zu registrieren sobald der eigene Speicher durchsucht wird, dann zumindest den Benutzer auszuloggen?

Schokohase 31. Dez 2018 13:16

AW: Delphi String schützen
 
Wenn es für Windows ist, da gibt es genau dafür die API-Funktionen CryptProtectMemory und CryptUnprotectMemory.

Du kannst allerdings auch mit CryptProtectData arbeiten wofür ich auch eine Implementierung geschrieben habe. (siehe https://www.delphipraxis.net/1411641-post5.html).

Problematisch ist allerdings, dass bei CryptProtectData die Ursprungsdaten im Speicher erhalten bleiben und bei CryptProtectMemory wird eben genau dieser Speicherbereich der Ursprungsdaten verschlüsselt.

Zacherl 31. Dez 2018 14:26

AW: Delphi String schützen
 
Immer schwierig, wenn das System bereits kompromittiert ist, kann man eigentlich nur sehr schwer verhindern, dass ein bestimmtes Programm ausgespäht wird. Intel SGX wäre hier aber noch ein Stichwort - sofern die Hardware vorhanden ist.

jacky213 3. Jan 2019 12:02

AW: Delphi String schützen
 
Es muss nicht davon ausgegangen werden, dass das System bereits kompromittiert ist. Es soll nur dafür gesorgt werden das sobald das Programm läuft niemand ein Programm Startet und anfängt den Prozess nach dem Passwort String zu durchsuchen.

Sherlock 3. Jan 2019 12:21

AW: Delphi String schützen
 
Aber würde das nicht nur auf einem kompromittierten System passieren?

Das Paßwort wird doch vom Anwender gerade eben eingegeben. Wer sonst soll denn da noch am Rechner hocken und - unbemerkt, wohlgemerkt - den Prozess ausspähen?

Sherlock

Schokohase 3. Jan 2019 13:41

AW: Delphi String schützen
 
Nehmen wir mal ein Kassensystem, dort können sich unterschiedliche Benutzer an der Anwendung anmelden (und alle anderen Systeme die so arbeiten).

Die Session selber ist ein Standard-Benutzer. Wenn die Zugangsdaten vom Vorbenutzer nicht verschlüsselt abgelegt wurden, dann reicht ein Memory-Dump über den Task-Manager und Strings um an das Kennwort zu gelangen (ja, ein wenig Zeit zum Durchlesen auch noch).

Allerdings reicht es hierbei nicht aus, einfach den Wert aus einem Edit-Feld zu nehmen und zu verschlüsseln. Denn da ist das Kind schon lange im Brunnen. Man benötigt ein spezielles Eingabefeld, welches die einzelnen Tastendrücke Zeichen für Zeichen an diesen geschützten Speicher übergibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz