Mobile-Menu

Video-Tipp: Mehr Sicherheit mit und trotz PowerShell PowerShell Security Best Practices

Von Thomas Joos

Anbieter zum Thema

Die PowerShell kann als mächtiges Werkzeug zur Verbesserung der Sicherheit im Netzwerk dienen, selbst aber auch als Tool für Angreifer zum Einsatz kommen. Dieser Video-Tipp zeigt wichtige Einstellungen und Cmdlets für mehr Sicherheit mit der PowerShell.

In diesem Video-Tipp zeigen wir, wie man mit der PowerShell für mehr Sicherheit im Netzwerk sorgt und gleichzeitig verhindert, dass Hacker die PowerShell für ihre Zwecke missbrauchen.
In diesem Video-Tipp zeigen wir, wie man mit der PowerShell für mehr Sicherheit im Netzwerk sorgt und gleichzeitig verhindert, dass Hacker die PowerShell für ihre Zwecke missbrauchen.
(Bild: Melinda Nagy - stock.adobe.com)

Die PowerShell kann auf nahezu alle Funktionen in Windows zugreifen und oft auch auf Serverdienste wie Microsoft Exchange, SQL Server oder andere Produkte. Aus diesem Grund sollte auch die Sicherheit der Umgebung im Auge behalten werden, vor allem bei der Ausführung von Skripten. Dazu kommen zahlreiche PowerShell-Module, welche die Möglichkeiten der Shell um Penetrationstests oder Hackerangriffe erweitert.

Wie man mit der PowerShell für mehr Sicherheit im Netzwerk sorgt und gleichzeitig verhindert, dass Hacker die PowerShell für ihre Zwecke missbrauchen, zeigen wir hier im Video-Tipp und in der Bildergalerie.

Bildergalerie
Bildergalerie mit 7 Bildern

Viele Sicherheitstechnologien in Windows lassen sich umfassend mit der PowerShell steuern. Das haben wir im Beitrag „Sicherheit auf Windows-Servern mit Bordmitteln steuern“ gezeigt. Dazu kommen Funktionen zur Laufwerksverschlüsselung. BitLocker lässt sich auch in der PowerShell aktivieren und steuern. Die zur Verfügung stehenden Befehle dazu zeigt Windows mit „get-command -module BitLocker“ an.

Mit „Enable-BitLocker“ kann die Verschlüsselung aktiviert werden. Mit dem Cmdlet „Get-BitlockerVolume“ zeigt die PowerShell Informationen zu verschlüsselten Datenträgern auf einem Computer an. Um den TPM-Chip für die Aktivierung von Bitlocker zu konfigurieren, kann das Cmdlet „Enable-TpmAutoProvisioning“ zum Einsatz kommen. Die Informationen zum Chip lassen sich wiederum mit „Get-Tpm“ anzeigen. Zurücksetzen lässt sich das TPM mit „Clear-Tpm“.

Die PowerShell als Hacker-Tool: Das sollten Admins wissen

Beispiele für Hackertools sind das Modul PowerSploit, das Penetrationstests in der PowerShell ermöglicht, oder auch Nishang, das Mimikatz mit der Powershell integriert. Wir zeigen im Beitrag „Diese Tools nutzen Hacker für AD-Angriffe“, wie Hacker auf Tools wie Mimikatz, LaZange oder Bloodhound setzen.

Auch diese lassen sich mit der PowerShell kombinieren. Es gibt in diesem Bereich auch verschiedene PowerShell-Skripte, die Mimikatz nutzen. Mit der PowerShell ist es auch möglich lokale Virenscanner zu umgehen, um Hackertools wie Mimikatz einzusetzen. In diesem Zusammenhang spielen auch die Absicherungen eine Rolle, die wir im Beitrag „Cyber-Attacken via PowerShell verhindern“ behandeln. In diesem Beitrag ist auch die Aktivierung des „Constrained Modus“ zu finden, der die PowerShell in einen eingeschränkten und sicheren Modus versetzt, bei dem nicht alle Funktionen zur Verfügung stehen. Wichtig ist an dieser Stelle auch, die alte PowerShell aus dem System zu entfernen. Auch das kann mit der Powershell durchgeführt werden:

Disable-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2Root

Um generell den Remotezugriff per PowerShell auf einem Computer zu deaktivieren, kann in der PowerShell der Befehl „Disable-PSRemoting -Force“.

Ports scannen, DNS absichern, Windows-Updates installieren und Zertifikate verwalten: Das geht alles in der PowerShell

Wir haben im Beitrag „Mit der PowerShell nach offenen Ports suchen“ gezeigt, wie mit der PowerShell nach offenen Ports auf Geräten gesucht werden kann. Auch die Konfiguration von Windows-Updates ist mit der PowerShell möglich. Dieses Thema haben wir im Beitrag „Windows-Updates mit PowerShell steuern“ vertieft. Die Verwaltung von Zertifikaten und das Anzeigen von abgelaufenen Zertifikaten mit der PowerShell ist im Beitrag „Zertifikate in Windows mit der PowerShell verwalten“ zu finden. Interessant ist in dieser Hinsicht auch, dass Zertifikate auch ohne Zertifikatsdienste selbstsigniert sein können. Auch das lässt sich mit der PowerShell umsetzen. Um für eine Webseite ein selbstsigniertes Zertifikat zu erstellen, geben Sie zum Beispiel den folgenden Befehl ein:

New-SelfSignedCertificate -CertStoreLocation 'Cert:\LocalMachine\My' -DnsName 's2.joos.int'

Dazu kommen Möglichkeiten auch Serverdienste in Windows mit der PowerShell abzusichern. Wir zeigen diesen Bereich in den Beiträgen „Mehr Schutz vor Denial-of-Service-Attacken: DNS mit Richtlinien und RRL in Active Directory absichern“ und „DNS-Abfragen mit Richtlinien steuern und DNS-over-HTTPs aktivieren“.

Dazu kommen wichtige Einschränkungen bezüglich der Admin-Rechte in Active Directory. Auch hier spielt die PowerShell eine maßgebliche Rolle, wie wir im Beitrag „Privileged Access Management aus Windows Server 2022 richtig nutzen“. Die Beiträge „Kennwortrichtlinien in Active Directory mit der PowerShell verwalten“ und „SecretsManagement in der PowerShell“ zeigen die Absicherung von Kennwörtern mit der PowerShell.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Netzwerktechnik, IP-Kommunikation und UCC

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Die PowerShell kann aber noch viel mehr: Skriptausführung absichern

Die verlinkten Beiträge zeigen die umfassenden Möglichkeiten, die sich mit der PowerShell ergeben, um die Sicherheit in Netzwerken zu erhöhen, gleichzeitig aber auch zu gefährden. Wichtig ist, dass Admins die Möglichkeiten kennen und mit diesen umgehen können. Besonders wichtig ist es mit „Set-ExecutionPolicy“ zunächst grundlegende Sicherheitseinstellungen für die Ausführung von Richtlinien in der PowerShell zu steuern. Abfragen lassen sich die Einstellungen mit „Get-ExecutionPolicy. Damit das funktioniert, muss die PowerShell mit erhöhten Rechten gestartet werden. Danach lässt sich festlegen, dass Skripte signiert sein müssen, zum Beispiel mit:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachineGet-ExecutionPolicy -List

Generell sollte überprüft werden, dass die Sicherheitseinstellungen für die Ausführung von Skripten richtig gesetzt sind. Es gibt an dieser Stelle verschiedene Einstellungen:

  • AllSigned: Alle Skripte müssen von einem vertrauenswürdigen Herausgeber signiert werden
  • Bypass: Diese Einstellung erlaubt alle Skripte ohne Rückfrage. Diese Option sollte möglichst nicht gesetzt werden.
  • Default: Legt Fest, dass auf Windows-Clients die Einstellung „Restricted“ gesetzt wird und auf Servern „RemoteSigned“
  • RemoteSigned: Diese Einstellung stellt sicher, dass nur signierte Skripte starten dürfen
  • Restricted: Diese Einstellung legt fest, dass keinerlei Skripte ausgeführt werden dürfen. Das bietet maximale Sicherheit.
  • Unrestricted: Führt alle Skripte aus, warnt aber wenn dieses nicht signiert ist.

Diese Einstellungen lassen sich auch mit Gruppenrichtlinien über die Einstellungen bei Richtlinien => Administrative Vorlagen => Windows-Komponenten => Windows PowerShell anpassen. Eigene Skripte lassen sich auch mit Active Directory-Zertifikatsdiensten signieren. Dazu kommt in der PowerShell noch das Cmdlet „Set-AuthenticodeSignature“ zum Einsatz. Microsoft beschreibt die Signierung in der PowerShell-Dokumentation.

OpenSSH mit der PowerShell nutzen

Für die sichere Kommunikation in hybriden Netzwerken, kann auch auf Windows-Servern SSH zum Einsatzkommen. Dadurch lassen sich auch Remotesitzungen der PowerShell 7.x über SSH abwickeln. Damit Windows per SSH erreichbar ist, muss das entsprechende Feature erst installiert werden. Das geht ebenfalls in der PowerShell:

Get-WindowsCapability -Online | where name -like *OpenSSH.Server* | Add-WindowsCapability -Online

Um den Dienst zu starten und auch automatisch mit Windows zu nutzen, kommen die folgenden Befehl zum Einsatz.

Start-Service sshdSet-Service -Name sshd -StartupType Automatic

Als SSH-Client kann in Windows entweder das Befehlszeilentool ssh.exe in der PowerShell zum Einsatz kommen, oder Tools wie das Open Source-Tool Putty. SSH kann auch mit PowerShell-Remoting genutzt werden. Das ist zum Beispiel bei der PowerShell-Kommunikation zwischen Linux und Windows sinnvoll. Hier kann eine neue PowerShell-Remotesitzung SSH als Transport nutzen.

Ausführung von Cmdlets in der PowerShell aufzeichnen

Um zu erkennen, welche Befehle in der PowerShell durchgeführt wurden, lassen sich Sitzungen auch aufzeichnen. Dazu kommen die beiden Cmdlets „Start-Transcript“ und „Stop-Transcript“ zum Einsatz. Natürlich kann die Überwachung auch über Gruppenrichtlinien gesteuert werden. Die Einstellung „PowerShell-Aufzeichnung einschalten“ ist bei „Richtlinien => Administrative Vorlagen => Windows-Komponenten => Windows PowerShell“ zu finden.

Hier lässt sich auch gleich ein Pfad einer Freigabe oder ein lokales Verzeichnis mit Protokolldatei angeben, in der die PowerShell das Protokoll ablegen soll. In den Protokollen wird täglich aufgezeichnet, welche Cmdlets in der PowerShell ausgeführt werden. Mit „Protokollierung von PowerShell-Skriptblöcken aktivieren“ ist es an dieser Stelle auch möglich Befehle und Skriptblöcke in der Ereignisanzeige auf Computern zu speichern. Hier muss auch darauf geachtet werden, dass die Größe der Ereignisanzeige ausreicht.

(ID:48731241)