Credentials

Sichere Verwendung von Credentials in PowerShell mit ScriptRunner

Die Authentifizierung über Credentials ist die gebräuchlichste Form der Zugangskennung in PowerShell. Diese erfolgt über den Credential-Parameter, dem die Kombination aus Benutzername und Passwort in Form eines PSCredential-Objekts übergeben wird. Da es sich hierbei um schützenswerte Daten von Privileged Accounts handelt, muss die Sicherheit dieser höchste Priorität genießen. Jedoch weisen die gängigsten Methoden im Umgang mit Credentials erhebliche Sicherheitslücken auf, wie im Folgenden dargestellt wird.

PSCredential-Objekte mit dem New-Object-Cmdlet erzeugen

Die wohl einfachste Art, ein PSCredential-Objekt zu erzeugen, ist ein Code wie folgender:

Hierbei werden der Nutzername und das Passwort als Klartext in das PowerShell Script eingegeben. Das Passwort wird in einen SecureString umgewandelt, da es nur in dieser Form übergeben werden kann. Anschließend wird das PSCredential-Objekt erzeugt. Sicherheitstechnisch ist diese Vorgehensweise äußerst kritisch. Der Nutzername und das Passwort werden als Klartext in das Script eingegeben und sind somit für jeden ersichtlich.

Mehr Sicherheit bietet der folgende Code:

Nur noch der Nutzername wird als Klartext in das PowerShell Script eingegeben, das Passwort wird direkt als SecureString erstellt. Allerdings weist auch diese Methode Sicherheitslücken auf, da man einen Bezug auf den Nutzernamen in dem Script herstellen kann. Außerdem ist weder eine Automatisierung noch eine Delegation von Scripten möglich, da das Passwort bei jeder neuen Script-Ausführung erneut interaktiv eingegeben werden muss.

Das Passwort kann auch in eine externe Datei ausgelagert werden:

Bei dieser Methode wird das Passwort verschlüsselt in eine externe Textdatei ausgelagert. Dieses wird wieder in das Script eingelesen und in ein SecureString umgewandelt. Hierdurch können Scripte automatisiert werden, da Nutzername und Passwort nicht mehr interaktiv eingegeben werden müssen. Allerdings ist auch diese Vorgehensweise nicht vollkommen sicher, da auch SecureStrings zurückgewandelt werden können, um somit das Passwort zu erlangen. Ein weiterer Nachteil besteht darin, dass die Textdatei bei der Ausführung zugänglich sein muss, was eine Delegation von Scripten unmöglich macht. Außerdem wird auch hier der Nutzername als Klartext in das Script eingegeben.

PSCredential-Objekte mit dem Get-Credential-Cmdlet erzeugen

Eine sehr beliebte Vorgehensweise, um ein PSCredential-Objekt zu erzeugen, ist das Get-Credential-Cmdlet:

Der Anwender kann mithilfe einer Eingabebox den Nutzernamen und das Passwort eingeben. Das eingegebene Passwort wird als SecureString hinterlegt.

GetCredential

Diese Methode weist zwar keine sicherheitsrelevanten Schwachstellen auf, allerdings muss die Eingabe bei jeder Ausführung des Scripts interaktiv in der PowerShell Console erfolgen. Dies verhindert sowohl die Automation als auch die Delegation von Scripten.

PSCredential-Objekte mit ScriptRunner verwenden

Mithilfe von ScriptRunner können Sie Credentials sicher speichern und Ihre Scripte vollständig automatisieren. Unter dem Menüpunkt „Benutzerkonten“ werden sämtliche Privileged Accounts mitsamt Passwort hinterlegt, die ScriptRunner zur Ausführung von Scripten auf anderen Systemen verwenden soll. Die Passwörter und Nutzernamen werden im Windows Credential Manager auf dem Local System des ScriptRunner-Host gespeichert. Der Nutzername wird als weitere Sicherheitsvorkehrung durch eine zufallsgenerierte Zahl ersetzt. Da die Informationen auf dem Local System abliegen, kann ein normaler Windows-Anwender nicht auf diese zugreifen.

Credential Manager

In dem PowerShell Script werden die benötigten Credentials lediglich als Variable eingefügt, ohne dabei im Script einen Bezug auf den verwendeten Nutzernamen oder das Passwort herzustellen.

Aktionen werden grundsätzlich immer vom ScriptRunner Host aus mit den dort hinterlegten Credentials gestartet. Die benötigten Credentials werden in der Aktion/Policy konfiguriert und erst zur Laufzeit in den PowerShell-Prozess eingesteuert.

Konfiguration

Da keine interaktive Eingabe des Nutzernamens und Passworts zur Laufzeit erfolgt, müssen die Service Desk Anwender delegierter Scripte weder den Namen noch das Passwort eines administrativen Kontos kennen, um eine Aktion ausführen zu können.

ScriptRunner – Die Lösung für die sichere Verwendung von Credentials

Die Vorteile von ScriptRunner im Überblick:

  • Credentials oder Privileged Accounts werden sicher gespeichert
  • Keine Hinweis auf verwendete Nutzernamen, Passwörter oder Credentials im Script
  • Keine Bezug zur Verwendung der Credentials
  • Keine interaktive Eingabe bei der Ausführung notwendig

–> ScriptRunner schafft somit die optimalen Voraussetzungen für die sichere Automation und Delegation von PowerShell Scripten

Um die Sicherheit weiter zu erhöhen, ist für 2017 eine Anbindung von ScriptRunner an die zentralen Passwort-Server „Pleasant Password
Server“, „Thycotic Secret Server“ und „CyberArk Enterprise Password Vault“ geplant.

Frank Kresse

Frank Kresse

Head of Products Division bei ScriptRunner
Frank Kresse ist verantwortlich für die technische Entwicklung von ScriptRunner. Als Erfinder der Automations- und Delegationslösung für PowerShell berät er Kunden bei Use Case Szenarien und entwickelt Lösungen für die Automation und Digitalisierung ihrer Prozesse. Darüber hinaus engagiert er sich bei Tech-Startups.
Frank Kresse