Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Verhindern, dass ein String im Pagefile landet. (https://www.delphipraxis.net/178737-verhindern-dass-ein-string-im-pagefile-landet.html)

cookie22 24. Jan 2014 10:34

Verhindern, dass ein String im Pagefile landet.
 
Ich habe einen String, welcher ein Passwort enthält. Ich möchte vermeiden, dass der String ausgelagert wird und im Page File landet. Hat jemand eine Idee dazu?

DeddyH 24. Jan 2014 10:38

AW: Verhindern, dass ein String im Pagefile landet.
 
Evtl. mit VirtualLock "festhalten"?

FBrust 24. Jan 2014 10:42

AW: Verhindern, dass ein String im Pagefile landet.
 
Hallo,

ob Du Einfluss auf den Umgang von Windows mit der Pagefile nehmen kannst, weiss ich nicht.

Du könntest aber prüfen, ob das Passwort die ganze Zeit in dem String stehen muss oder ob das Passwort nur zum Überprüfen auf Korrektheit benötigt wird und Du danach den String wegwerfen/leeren kannst. Das würde zumindest die Chance vermindern, dass der String in die Pagefile geschrieben wird.


Gruß
Frank

cookie22 24. Jan 2014 10:55

AW: Verhindern, dass ein String im Pagefile landet.
 
VirtualLock sieht ganz gut aus. Muss ich das nachher wieder unlocken?

Das reicht schon?

Delphi-Quellcode:
...
var
  Passwd: string;
begin
  VirtualLock(@Passwd, Sizeof(Passwd));
end;

Neutral General 24. Jan 2014 11:01

AW: Verhindern, dass ein String im Pagefile landet.
 
Was ist der Unterschied? Jemand der die Pagefile(s) ausliest kann genauso gut auch den Anwendungsspeicher auslesen.
Ich weiß nicht ob das so viel Sinn macht.

Meflin 24. Jan 2014 11:03

AW: Verhindern, dass ein String im Pagefile landet.
 
Zitat:

Zitat von Neutral General (Beitrag 1245155)
Was ist der Unterschied? Jemand der die Pagefile(s) ausliest kann genauso gut auch den Anwendungsspeicher auslesen.

Der Unterschied ist, dass das Pagefile auf permanentem Speicher liegt, und selbst dann noch ausgelesen kann, wenn die Festplatte garkeinen Strom mehr hat - und die Daten u.U. auch dann noch auf der Platte existieren können, wenn sie eigentlich auch im Pagefile nicht mehr drin sind (Slack Space etc.). Während der RAM sich innerhalb kürzester Zeit nach dem Ausschalten annihiliert.

DeddyH 24. Jan 2014 11:04

AW: Verhindern, dass ein String im Pagefile landet.
 
Selbst benutzt habe ich es auch noch nicht, würde aber eher auf
Delphi-Quellcode:
VirtualLock(@Passwd, Sizeof(Char) * Length(Passwd));
tippen. Zum Unlock sagt das MSDN:
Zitat:

To unlock a region of locked pages, use the VirtualUnlock function. Locked pages are automatically unlocked when the process terminates.

cookie22 24. Jan 2014 11:17

AW: Verhindern, dass ein String im Pagefile landet.
 
Zitat:

Zitat von Neutral General (Beitrag 1245155)
Was ist der Unterschied? Jemand der die Pagefile(s) ausliest kann genauso gut auch den Anwendungsspeicher auslesen.
Ich weiß nicht ob das so viel Sinn macht.

Meflin hats schon ganz gut erklährt.

Zitat:

Zitat von DeddyH (Beitrag 1245157)
Delphi-Quellcode:
VirtualLock(@Passwd, Sizeof(Char) * Length(Passwd));
tippen. Zum Unlock sagt das MSDN:
Zitat:

To unlock a region of locked pages, use the VirtualUnlock function. Locked pages are automatically unlocked when the process terminates.

Handelt sich um nen Ansi String unter Lazarus, da kann ich mir das Sizeof(Char) sparen.

Gibt es sowas wie VirtualLock auch für Linux und MacOS X?

himitsu 24. Jan 2014 11:28

AW: Verhindern, dass ein String im Pagefile landet.
 
Warum liegt der überhaupt ungeschützt im RAM?
Als Hash oder verschlüsselt könnte man ihn ja auch abspeichern.

Und wie kommt das Passwort in deine Variable?
Das, wo der String her kommt, hat ihn bestimmt auch schon im RAM und das kannst du vermutlich nicht daran hinter, daß er ausgelagert wird.

Union 24. Jan 2014 11:33

AW: Verhindern, dass ein String im Pagefile landet.
 
Zitat:

Zitat von cookie22 (Beitrag 1245158)
Gibt es sowas wie VirtualLock auch für Linux und MacOS X?

Da gibt es mlock().

jaenicke 24. Jan 2014 11:40

AW: Verhindern, dass ein String im Pagefile landet.
 
Zitat:

Zitat von cookie22 (Beitrag 1245158)
Handelt sich um nen Ansi String unter Lazarus, da kann ich mir das Sizeof(Char) sparen.

Das haben viele Entwickler auch vor Delphi 2009 gesagt... und den Code dann doch mal mit einem aktuelleren Compiler kompilieren wollen. Wie viel Byte das sind mag sich auch mal ändern.

Und durch UTF-8 in FreePascal bin ich mir nicht einmal sicher, ob diese Größe in Byte überhaupt stimmt. Da gab es schon viele "lustige" Effekte...

cookie22 24. Jan 2014 11:43

AW: Verhindern, dass ein String im Pagefile landet.
 
Du hast ja recht es tut ja nicht weh das mit zu schreiben. :P

@Union: Jo, hatte ich auch gerade gefunden. :)

Luckie 24. Jan 2014 11:52

AW: Verhindern, dass ein String im Pagefile landet.
 
Ich frage mich gerade, ob hier nicht an der falschen Schraube bezüglich der Sicherheit gedreht wird.

cookie22 24. Jan 2014 11:54

AW: Verhindern, dass ein String im Pagefile landet.
 
Zitat:

Zitat von Luckie (Beitrag 1245172)
Ich frage mich gerade, ob hier nicht an der falschen Schraube bezüglich der Sicherheit gedreht wird.

In welcher Hinsicht?

Luckie 24. Jan 2014 11:58

AW: Verhindern, dass ein String im Pagefile landet.
 
Na, du betreibst ja einen riesen Aufwand um das Passwort. Und ich frage mich, ob dieser Aufwand gerechtfertigt ist. Passwort eingeben lassen, Hash Bilden, vergleichen, wegwerfen. Wobei es Kryptobibliotheken gibt, die Passworteingaben wieder sicher aus dem dem Speicher löschen können.

cookie22 24. Jan 2014 12:06

AW: Verhindern, dass ein String im Pagefile landet.
 
Ich will mir 100% sicher sein, dass da nix im Page File landet. Das sind zwei Zeilen Code. Den Aufwand halte ich für vertretbar.

Klar wird das Passwort im Speicher so schnell wie möglich geburnt, aber man weiß ja nie, was da einer mit seinem Rechner veranstaltet während er meine Software nuzt.

himitsu 24. Jan 2014 12:07

AW: Verhindern, dass ein String im Pagefile landet.
 
Zitat:

Zitat von cookie22 (Beitrag 1245173)
In welcher Hinsicht?

Siehe Teil 2 meines Posts?

PS: Beim Ruhezustand und diesem hybriden Standbymodus, wird dennoch alles auf die Festplatte geschrieben.

cookie22 24. Jan 2014 12:16

AW: Verhindern, dass ein String im Pagefile landet.
 
Ja, stimmt schon. Aber Konkurenz hat das auch, darum brauch ich das auch. Ob es jetzt viel bringt oder nicht.

PS: Das ist dann aber nicht mehr mein Bier. :)

Dalai 24. Jan 2014 13:03

AW: Verhindern, dass ein String im Pagefile landet.
 
Zitat:

Zitat von himitsu (Beitrag 1245180)
PS: Beim Ruhezustand und diesem hybriden Standbymodus, wird dennoch alles auf die Festplatte geschrieben.

Stimmt, allerdings ist das Hibernation-File ab Vista standardmäßig auf 75% der (nutzbaren) RAM-Größe komprimiert. D.h. man müsste erstmal den Inhalt dekomprimieren (und dafür etwas über die Kompressionsmethoden wissen) und kann erst danach etwas damit anfangen. So denke ich mir das jedenfalls.

MfG Dalai

jaenicke 24. Jan 2014 14:26

AW: Verhindern, dass ein String im Pagefile landet.
 
Gar nicht im Speicher geht gar nicht, es sei denn du benutzt ein eigenes Control für die Eingabe. Denn ein Standardeingabefeld wie TEdit hat das eingegebene Passwort ja trotz der maskierten Zeichen im Hintergrund zusammenhängend im Speicher.

Zitat:

Zitat von cookie22 (Beitrag 1245182)
Ja, stimmt schon. Aber Konkurenz hat das auch, darum brauch ich das auch. Ob es jetzt viel bringt oder nicht.

Wenn es darum geht, leg das Passwort doch gar nicht erst als Ganzes ab, sondern verarbeite es nach der Eingabe des Benutzers zeichenweise wobei die Zeichen nie hintereinander im Speicher liegen. So hat er nur den gespeicherten Hash, aus dem er aber nie das Passwort im Klartext herausbekommt und auch das eingegebene Passwort nicht zusammenhängend. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 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