So schützen Sie PowerShell-Anmeldeinformationen in der Aufgabenautomatisierung

Anmeldeinformationen, um Sicherheitsprobleme zu vermeiden.

Angenommen, Sie müssen die BIOS-Firmware-Version von 50 Infrastrukturservern abrufen. Sie betreiben eine Windows 10-Verwaltungsarbeitsstation unter den Anmeldeinformationen des Domänenbenutzers, benötigen jedoch das Skript, um unter den Administratorrechten der Domäne ausgeführt zu werden.

Um diese Aufgabe zu automatisieren, schreiben Sie die in Abbildung 1 gezeigte einfache PowerShell-Funktion. Der Code weist jedoch ein offensichtliches Problem auf.

Das Get-BIOSInfo-Skript funktioniert wie erwartet. Es ist nichts von Natur aus kaputt, aber das Problem ist ein offengelegter Benutzername / Passwort-Berechtigungsnachweis, der im Klartext festgelegt ist. Wenn ein böswilliger Benutzer diese Datei gesehen hat, kann er diese Anmeldeinformationen entführen. Im Folgenden finden Sie allgemeine Problemumgehungen zum Schutz von PowerShell-Anmeldeinformationen beim Ausführen von Skripten.

Möglichkeiten zum Sichern von PowerShell-Anmeldeinformationen

Eine Möglichkeit, PowerShell-Skriptberechtigungen zu authentifizieren und gleichzeitig die Klartextbelichtung zu verhindern, besteht darin, das PSCredential-Objekt interaktiv zu generieren.

Abbildung 2. Interaktives Erfassen von Anmeldeinformationen

Dies hat den Vorteil, dass Anmeldeinformationen nicht im Quellcode aufgezeichnet werden. Der Nachteil ist, dass Sie Ihr Skript interaktiv ausführen müssen. Dies ist keine praktikable Lösung, wenn Sie das Skript so planen müssen, dass es unbeaufsichtigt ausgeführt wird.
Untersuchen wir die folgende Variable $ cred:
$ cred.GetType ()
IsPublic IsSerial Name BaseType
—— —— — —-
True True PSCredential System.Object

$ cred.UserName
Adminaccount

$ cred.Password
System.Security.SecureString
Beachten Sie, dass PowerShell das in der Password-Eigenschaft enthaltene Klartextkennwort nicht anzeigt. Es gibt jedoch Möglichkeiten, diese Daten aufzudecken.

Eine Möglichkeit, PowerShell-Skriptberechtigungen zu authentifizieren und gleichzeitig die Klartextbelichtung zu verhindern, besteht darin, das PSCredential-Objekt interaktiv zu generieren.

Eine andere Methode besteht darin, Kennwörter in einer separaten Datei zu speichern.
Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File -FilePath. Cred.txt
$ pass = Get-Content -Path. cred.txt | ConvertTo-SecureString
$ creds = New-Object -TypeName PSCredential -ArgumentList ‘admin’, $ pass
Einige PowerShell-Konvertierungs-Cmdlets wandelten die Anmeldeinformationen in ein sicheres Zeichenfolgenkennwort um. Die Password-Eigenschaft eines PSCredential-Objekts verwendet diesen Datentyp.
PowerShell-Anmeldeinformationen werden verschlüsselt in einer Textdatei gespeichert.

verschlüsseltes Passwort
Abbildung 3. Das von PowerShell gespeicherte verschlüsselte Kennwort

Dies hat den Vorteil, dass Anmeldeinformationen nicht im Quellcode aufgezeichnet werden. Der Nachteil ist, dass Sie Ihr Skript interaktiv ausführen müssen. Dies ist keine praktikable Lösung, wenn Sie das Skript so planen müssen, dass es unbeaufsichtigt ausgeführt wird.
Untersuchen wir die folgende Variable $ cred:
$ cred.GetType ()
IsPublic IsSerial Name BaseType
——– ——– —- ——–
True True PSCredential System.Object

$ cred.UserName
Adminaccount

$ cred.Password
System.Security.SecureString
Beachten Sie, dass PowerShell das in der Password-Eigenschaft enthaltene Klartextkennwort nicht anzeigt. Es gibt jedoch Möglichkeiten, diese Daten aufzudecken.
Eine andere Methode besteht darin, Kennwörter in einer separaten Datei zu speichern.
Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File -FilePath. Cred.txt
$ pass = Get-Content -Path. cred.txt | ConvertTo-SecureString
$ creds = New-Object -TypeName PSCredential -ArgumentList ‘admin’, $ pass
Einige PowerShell-Konvertierungs-Cmdlets wandelten die Anmeldeinformationen in ein sicheres Zeichenfolgenkennwort um. Die Password-Eigenschaft eines PSCredential-Objekts verwendet diesen Datentyp.
PowerShell-Anmeldeinformationen werden verschlüsselt in einer Textdatei gespeichert.
Der Vorteil hierbei ist die Bequemlichkeit, aber der Nachteil ist die Notwendigkeit, die Kennwortdatei zu schützen. Beispielsweise könnten Sie NTFS-Dateiberechtigungen und die verwenden Dateisystem verschlüsseln um zu verhindern, dass die Datei in die falschen Hände gerät.

Der Anmeldeinformations-Manager sperrt die Anmeldeinformationen

Im Anmeldeinformations-Manager speichert Windows Windows- und Web-Anmeldeinformationen. Es ist eine weitere Option, um die Kontrolle über Anmeldeinformationen zu behalten, wenn diese in Verbindung mit PowerShell verwendet werden.
Geben Sie den folgenden Code an der PowerShell-Eingabeaufforderung ein, um den Anmeldeinformations-Manager mit PowerShell zu öffnen:
Show-ControlPanelItem -Name ‘Credential Manager’

Berechtigungsnachweisverwaltung mit
Power Shell

Ein Entwickler namens Dave Garnar hat ein großartiges PowerShell-Modul namens CredentialManager geschrieben, das das programmgesteuerte Festlegen und Abrufen von Anmeldeinformationen aus Credential Manager erleichtert. Installieren Sie das Modul mithilfe von PowerShellGet und dem folgenden Code:
Install-Module -Name CredentialManager -Repository PSGallery -Verbose
Anschließend können Sie mit dem Cmdlet New-StoredCredential ein neues Anmeldeinformationsobjekt erstellen und im Windows-Anmeldeinformations-Manager speichern. Beachten Sie, dass der Parameter -Persist drei Optionen hat.

  • Session: Der Berechtigungsnachweis verbleibt nur während der aktiven PowerShell-Sitzung im Berechtigungsnachweis-Manager.
  • Lokale Maschine: Der Berechtigungsnachweis bleibt dauerhaft als Windows-Berechtigungsnachweis im Berechtigungsnachweis-Manager.
  • Unternehmen: Der Berechtigungsnachweis bleibt dauerhaft als Web-Berechtigungsnachweis im Berechtigungsnachweis-Manager.

Der Parameter -Target ist effektiv eine Bezeichnung. Durch die Kombination von Get-Credential und New-StoredCredental können wir einen sitzungsbeständigen Berechtigungsnachweis definieren.
Get-Credential -UserName ‘tim’ -Message ‘Passwort bitte’ | New-StoredCredential -Target ‘PowerShellCred’ -Persist-Sitzung
Abbildung 4 zeigt den überarbeiteten Funktionscode Get-BIOSInfo, der Get-StoredCredential verwendet, um den Berechtigungsnachweis sicher abzurufen.

Anmeldeinformationscode
Abbildung 4. Der angepasste PowerShell-Code ruft Anmeldeinformationen sicherer ab.

Wenn Sie ein Microsoft Azure-Abonnement haben, können Sie und speichern Anmeldeinformationen abrufen mithilfe von Azure Key Vault. Durch Hinzufügen eines Hilfsmoduls wie AxCredentialVault wird die Arbeit mit dem Dienst komfortabler.
Install-Module -Name AxCredentialVault -Repository PSGallery -Verbose
Import-Modul -Name AxCredentialVault
Sie können dann die Cmdlets des Moduls verwenden, um einen Azure Key Vault-Speicher zu erstellen, PowerShell-Anmeldeinformationen festzulegen und diese dann nach Bedarf in Ihrem Code abzurufen.

Similar Posts

Leave a Reply