none
Wie kann ich auf einen SecureString auf einem Laufwerk von mehreren Rechnern zugreifen? RRS feed

  • Frage

  • Moin,

    in meinem Skript kann sich der Benutzer ein Passwort aussuchen, welches dann mittels SecureString in ein Textdokument gespeichert, welches auf dem privaten Laufwerk des jeweiligen Benutzers liegt.

    Das einloggen mit dem erstellten Passwort funktioniert einwandfrei. Allerdings wenn der Benutzer von einem anderen PC sein Passwort eingibt, funktioniert es nicht obwohl das private Laufwerk mit dem Verschlüsseltem Passwort vorhanden ist.

    Kann man das irgendwie beheben?

    $SetPassword = $NewPassword | ConvertTo-SecureString -AsPlainText
    ConvertFrom-SecureString $SetPassword | Out-File H:\Data.log

    hier mein Code zum erstellen des Passwortes. Das Passwort steht in Klarschrift in der Variable $NewPassword und H:\ ist das private Laufwerk des Nutzers

    Danke für jede Hilfe

    Grüße

    Dienstag, 2. August 2016 10:35

Antworten

  • Hallo,

    um einen Securestring von mehreren System aus nutzen zu können musst Du auch den Parameter -Key (bei ConvertTo-SecureString / ConvertFrom-SecureString ) nutzen, ansonsten wird "heimlisch" einer benutzt, so das der Securrestring auch nur auf dem System funktioniert auf dem er erstellt wurde.

    Beste Gruesse
    brima

    • Als Antwort markiert MCMaggi Mittwoch, 3. August 2016 10:15
    Dienstag, 2. August 2016 13:28
  • Richtig. Und der Key ist ein Byte Array von 16, 24 oder 32 Stück. Wenn man das anschaulich halten möchte, kann man den Key z.B. mit

    [byte[]][char[]]"1234567890123456"

    generieren. Wenn man den Key aber Dritten verrät, können sie natürlich auch den SecureString entschlüsseln. Hier beißt sich die Katze in den Schwanz. Halbwegs sicher wäre nur die automatische Key-Generierung in Verbindung mit einem Roaming Profil, denn die autogenerierten Keys werden unter c:\users\<USERNAME>\AppData\Roaming\Microsoft\Crypto\RSA\<USER-SID> gespeichert und mit dem User-Kennwort gesichert.


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert MCMaggi Mittwoch, 3. August 2016 10:15
    Dienstag, 2. August 2016 14:48
  • Moin,

    den ganzen Quatsch nach -Key in Klammern setzen, damit es ausgewertet wird.

    ABER. Dieser Parameter funktioniert nicht zusammen mit -AsPlainText. Folgendes Beispiel funktioniert:

    Verschlüsseln:

    $SetPassword = "P@ssw0rd!" | ConvertTo-SecureString -AsPlainText -Force
    $sss = $SetPassword | ConvertFrom-SecureString -Key ([byte[]][char[]]"ABCDEFGHABCDEFGH")
    $sss

    Entschlüsseln:

    $sss = "Wert von sss aus dem anderen Skript"
    $SecurePassword = $sss | ConvertTo-SecureString -Key ([byte[]][char[]]"ABCDEFGHABCDEFGH")
    $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword)
    $PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
    $PlainPassword


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert MCMaggi Mittwoch, 3. August 2016 14:27
    Mittwoch, 3. August 2016 13:11

Alle Antworten

  • $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword)
    $PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert MCMaggi Dienstag, 2. August 2016 11:43
    • Tag als Antwort aufgehoben MCMaggi Dienstag, 2. August 2016 11:44
    Dienstag, 2. August 2016 10:45
  • > Allerdings wenn der Benutzer von einem anderen PC sein Passwort eingibt,
    > funktioniert es nicht obwohl das private Laufwerk mit dem
    > Verschlüsseltem Passwort vorhanden ist.
     
    Gleicher User? (Also "Domäne" - oder Workgroup?)
     
    Dienstag, 2. August 2016 11:06
  • Geiche Domäne

    Dienstag, 2. August 2016 11:44
  • Hi,

    wie würde das mit meinen Variablen aussehen?

    Folgende Fehlermeldung wird ausgegeben:

    ConvertTo-SecureString : Schlüssel ist im angegebenen Status nicht gültig.

    Grüße


    • Bearbeitet MCMaggi Dienstag, 2. August 2016 11:49
    Dienstag, 2. August 2016 11:45
  • Moin,

    das Wegschreiben genauso wie bei Dir. Der von mir zitierte Code ist der Entschlüsselungsteil. $SecurePassword ist das, was Du aus der Datei liest, nach SecureString konvertiert, also praktisch

    $SecurePassword = ConvertTo-SecureString (Get-Content 'H:\Data.log')

    In $PlainPassword steht dann wieder der Klartext.


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    Dienstag, 2. August 2016 11:54
  • Hallo,

    um einen Securestring von mehreren System aus nutzen zu können musst Du auch den Parameter -Key (bei ConvertTo-SecureString / ConvertFrom-SecureString ) nutzen, ansonsten wird "heimlisch" einer benutzt, so das der Securrestring auch nur auf dem System funktioniert auf dem er erstellt wurde.

    Beste Gruesse
    brima

    • Als Antwort markiert MCMaggi Mittwoch, 3. August 2016 10:15
    Dienstag, 2. August 2016 13:28
  • Richtig. Und der Key ist ein Byte Array von 16, 24 oder 32 Stück. Wenn man das anschaulich halten möchte, kann man den Key z.B. mit

    [byte[]][char[]]"1234567890123456"

    generieren. Wenn man den Key aber Dritten verrät, können sie natürlich auch den SecureString entschlüsseln. Hier beißt sich die Katze in den Schwanz. Halbwegs sicher wäre nur die automatische Key-Generierung in Verbindung mit einem Roaming Profil, denn die autogenerierten Keys werden unter c:\users\<USERNAME>\AppData\Roaming\Microsoft\Crypto\RSA\<USER-SID> gespeichert und mit dem User-Kennwort gesichert.


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert MCMaggi Mittwoch, 3. August 2016 10:15
    Dienstag, 2. August 2016 14:48
  • *offtopic*

    Hallo Peter, schön wieder von dir zu lesen!!!


    Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!

    Mittwoch, 3. August 2016 09:33
  • Schreib ich des dann einfach so?

    ConvertTo-SecureString -Key [byte[]][char[]]"1234567890123456"

    oder muss ich ihm das anders übergeben ?

    Grüße

    Mittwoch, 3. August 2016 11:54
  • Moin,

    den ganzen Quatsch nach -Key in Klammern setzen, damit es ausgewertet wird.

    ABER. Dieser Parameter funktioniert nicht zusammen mit -AsPlainText. Folgendes Beispiel funktioniert:

    Verschlüsseln:

    $SetPassword = "P@ssw0rd!" | ConvertTo-SecureString -AsPlainText -Force
    $sss = $SetPassword | ConvertFrom-SecureString -Key ([byte[]][char[]]"ABCDEFGHABCDEFGH")
    $sss

    Entschlüsseln:

    $sss = "Wert von sss aus dem anderen Skript"
    $SecurePassword = $sss | ConvertTo-SecureString -Key ([byte[]][char[]]"ABCDEFGHABCDEFGH")
    $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword)
    $PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
    $PlainPassword


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort markiert MCMaggi Mittwoch, 3. August 2016 14:27
    Mittwoch, 3. August 2016 13:11
  • Morgen,

    [String]$Datei = Get-Content H:\Data.log | ConvertFrom-SecureString -Key ([byte[]][char[]]"ABCDEFGHABCDEFGH")

    Folgender Fehler wird ausgegeben:

    ConvertFrom-SecureString : The input object cannot be bound to any parameters for the command either 
    because the command does not take pipeline input or the input and its properties do not match any of the 
    parameters that take pipeline input.

    Donnerstag, 4. August 2016 06:41
  • (Get-Content H:\Data.log) | ConvertFrom-SecureString -Key ([byte[]][char[]]"ABCDEFGHABCDEFGH")

    oder

    [String]$Datei = Get-Content H:\Data.log 
    $Datei | ConvertFrom-SecureString -Key ([byte[]][char[]]"ABCDEFGHABCDEFGH")

    EDIT: Aber wenn Du Text aus Datei einliest, musst Du zuerst ConvertTo-SecureString ausführen, denn der Text ist ja ein String und kein SecureString!


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.


    Donnerstag, 4. August 2016 06:44