vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
vb.net Variable mit externem Programm auslesen 
Autor: Knurzel
Datum: 18.07.11 19:15

Hallo,

ich schreibe gerade eine Passwortverwaltung in vb.net.

Jetzt frage ich mich ob eine Variable in vb.net grundsätzlich sicher ist oder ob diese von einem anderen Programm/Code ausgelesen werden kann und entsprechend schutzbedürftig ist.
Theoretisch müsste der Inhalt doch mehr oder weniger plain im Arbeitsspeicher zu finden sein oder?

Die Frage wäre also ob es grundsätzlich möglich ist eine globale Variable in vb.net mit einem externen Programm auszulesen?

Ich dachte an Programme wie Process Explorer. Damit ist es mir jedoch nicht gelungen.

mfg
Knurzel
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: vb.net Variable mit externem Programm auslesen 
Autor: ModeratorDaveS (Moderator)
Datum: 18.07.11 20:35

Ja, ein .Net Programmm verwendet auch Speicher, den man auslesen kann. Dafür gibt es die SecureString-Klasse.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: vb.net Variable mit externem Programm auslesen 
Autor: Knurzel
Datum: 19.07.11 17:44

Hallo,

Danke für den Tip mit der SecureString Klasse. Ich hab mich dazu jetzt ein wenig eingelesen.
Leider sieht die Klasse nicht unbedingt „Programmiererfreundlich“ aus.

Vielleicht schildere ich mal mein Problem etwas ausführlicher, in der Hoffnung, dass jemand einen guten Tipp hat.

In meiner Passwortverwaltung gibt es einen Anmeldedialog, wo ein Passwort eingegeben werden muss.
Dieses Passwort wird als Salted Hash gegen den Wert in der Datenbank geprüft.
Zusätzlich wird der Salt und das Loginpasswort aber auch benutzt um bei den einzelnen Accounts die AES-verschlüsselten Kennwörter wieder zu entschlüsseln.
Dazu wird das Loginpasswort nach dem Login in einer globalen Variablen gespeichert und bleibt dort die ganze Zeit im Speicher.

Wenn ich jetzt die Anwendung sicherer machen will, müsste ich so wie ich es verstanden habe nicht nur die Variable schützen sondern auch die Login-Textbox.

Hat vielleicht jemand ein Anwendungsbeispiel der SecureString Klasse, dass zu oben genannter Problematik passt? Was mir noch nicht so klar ist, wie ich den SecureString dann sicher wieder als String für die Entschlüsselungsfunktionen benutzen kann?

Gibt es vielleicht eine praktikablere Lösung?

Kennt jemand ein Windows Tool mit dem man Variablen/etc. in Programmen auslesen kann? So könnte ich dann selbst schauen was ich alles schützen muss.

Vielen Dank
Knurzel
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: vb.net Variable mit externem Programm auslesen 
Autor: Micke
Datum: 19.07.11 18:26

"Loginpasswort nach dem Login in einer globalen Variablen gespeichert "

ja mach, worüber stolperst denn da ? der anwender kennt das pw ja eh, was nützt es ihm das auszulesen ?

Micke

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: vb.net Variable mit externem Programm auslesen 
Autor: Knurzel
Datum: 19.07.11 18:40

Wenn man davon ausgeht, dass die Passwortverwaltung vielleicht mal viele Installationen bekommt, dann wäre es schon gut wenn das Programm einen kleinen Schutz gegen Spyware etc. eingebaut hat. Also ich würde das von einer Passwortverwaltung erwarten. Schließlich ist eine Passwortverwaltung ja dazu da die geheimsten Daten sicher zu speichern.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: vb.net Variable mit externem Programm auslesen 
Autor: Knurzel
Datum: 22.07.11 09:55

Hi,

das Coding hab ich jetzt wie folgt umgesetzt:

Setzen des SecureString beim Login:
 
strLoginPW = New System.Security.SecureString
For i As Integer = 0 To txtLogin.Text.Length - 1
    strLoginPW.AppendChar(txtLogin.Text(i))
Next
strLoginPW.MakeReadOnly()
Zur Verwendung später:
Dim objIntPtr As IntPtr = _
  System.Runtime.InteropServices.Marshal.SecureStringToBSTR(strLoginPW)
console.writeline(System.Runtime.InteropServices.Marshal.PtrToStringBSTR( _
objIntPtr))
Das Loginformular wird direkt wieder geschlossen und nach objfrm = nothing müsste doch dann der Inhalt der Logintextbox nicht mehr aus dem Speicher auslesbar sein - oder?

Es würde mich aber trotzdem noch interessieren ob man mit entsprechenden Tools noch etwas relevantes im Speicher findet. Vielleicht hat bezüglich der Tools noch jemand einen Tipp?

mfg
Knurzel

Beitrag wurde zuletzt am 22.07.11 um 09:57:53 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: vb.net Variable mit externem Programm auslesen 
Autor: ModeratorDaveS (Moderator)
Datum: 22.07.11 10:00

Das umgeht aber völlig den Sinn von SecureString. Natürlich ist der BSTR dann im Speicher sichtbar. Es sei denn du verwendest Marshal.ZeroFreeBSTR() möglichst kurz danach.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: vb.net Variable mit externem Programm auslesen 
Autor: Maas
Datum: 22.07.11 12:48

Gibt ZeroFreeBSTR denn auch den zuvor erzeugten String frei? Eigentlich ist es ja nur der Pointer.
Ich arbeite auch z.Z. mit SecureString und habe genau dieses Problem. Irgendwann braucht man ja in der Weiterverarbeitung den reinen String-Wert und dann schwirrt der natürlich auch im RAM rum. Eigentlich brauche ich für meinen Zweck auch nur den Byte()-Wert, aber ich schätze das macht keinen Unterschied!?!
Bei mir geht's um die Verarbeitung eines ConsumerSecrets für OAuth, um die OAuth-Signature zu erstellen. Das Secret wird als SecureString gehalten und übergeben, aber bei der Erstellung der Signature brauche ich ja dann den Klarwert. Ich habe halt jetzt direkt nach der Verarbeitung des Secrets die ZeroFreeBSTR-Methode eingebaut.
Oder gibt es da bessere Lösungen?

Für die Generierung orientiere ich mich an dieser Klasse. Für "consumerSecret" in GenerateSignature-Function benutze ich halt SecureString.

Maas
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: vb.net Variable mit externem Programm auslesen 
Autor: ModeratorDaveS (Moderator)
Datum: 22.07.11 13:24

Der String wird "gelöscht" und freigegeben. SecureString soll nur in Zusammenhang mit APIs verwendet werden, weiter haben die MS Entwickler nicht gedacht (anscheinend).

Sinn von SecureString ist, dass der Wert nie unverschlüsselt im managed Speicher herumliegt. Man sieht oft Beispiele wie
For Each c As Char In MyPassword.ToArray()
    MySecureString.AppendChar(c)
Next
Ist ja toll, dann hat man noch MyPassword und ein Char() davon, die noch managed herumschwimmen und gar nicht gelöscht werden können.

Den BSTR könnte man auch mit APIs als String auslesen, aber was wäre der Sinn? Immerhin mit BSTR hat man den Speicher noch unter Kontrolle und kann ihn löschen. Besser geht's nicht (momentan).

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: vb.net Variable mit externem Programm auslesen 
Autor: Maas
Datum: 22.07.11 15:33

Danke!

Maas
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel