PowerShell-Skripte als mögliche Gefahr für Windows Cyber-Attacken via PowerShell verhindern
PowerShell-Cmdlets und Skripte können umfassende Änderungen in Windows vornehmen. Aus diesem Grund sollten Admins sicherstellen, dass nicht versehentlich über Skripte ein System beeinträchtigt werden kann. Vor allem, da Cyberkriminelle über sogenannte Lolbas-Angriffe (Living Off The Land Binaries and Scripts) auch PowerShell als Angriffstool missbrauchen.
Anbieter zum Thema

Im Internet finden sich viele Skripte, die zahlreiche Aktionen durchführen. Wer ein solches Skript auf einem Windows-Computer ausführt, muss sich darauf verlassen, dass innerhalb des Skriptes keine für das System gefährlichen Aktionen ausgeführt werden. Die PowerShell wird von sehr vielen Angreifern genutzt, wie eine Studie von Red Canary im Jahr 2019 zeigt.
Viele Virenscanner erkennen auch Malware in PowerShell-Skripte. Allerdings sollten Sie sich darauf nicht verlassen. Es gibt viele Möglichkeiten Virenscanner mit PowerShell-Skripten zu umgehen. Das generelle Blockieren der PowerShell auf Windows-Rechnern ist selten sinnvoll, da hier auch sehr viele Aufgaben zur Systemautomatisierung und -Verwaltung blockiert werden.
Grundschutz: Ausführungsrichtlinie für PowerShell-Skripte nutzen
Microsoft bietet mit der Ausführungsrichtlinie für PowerShell-Skripte bereits einen ersten Grundschutz, der PowerShell-Skripte grundsätzlich ausbremsen kann. Allerdings ist diese Richtlinie kein umfassender Schutz, sondern kann nur begrenzt helfen.
Standardmäßig blockiert die PowerShell Skripte, die nicht signiert sind. Das bedeutet aber nicht, dass signierte Skripte nicht gefährlich und unsignierte Skripte Viren enthalten. Die Ausführungsrichtlinie kann aber zumindest dazu genutzt werden solange Skripte zu untersagen, bis ein zuvor geprüftes Skript ausgeführt werden soll. In diesem Fall kann die Ausführungsrichtlinie angepasst werden, damit das Skript ausgeführt wird. Nach der Ausführung ändern Sie die Richtlinie wieder.
Sie können die Ausführungsrichtlinie mit dem Cmdlet „Set-ExecutionPolicy“ ändern und mit „Get-ExecutionPolicy“ die aktuelle Einstellung anzeigen. Dazu stehen folgende Optionen zur Verfügung:
- Restricted: Keine Skripts erlaubt.
- AllSigned: Nur signierte Skripts sind erlaubt.
- RemoteSigned: Bei dieser Einstellung müssen Skripte durch eine Zertifizierungsstelle signiert sein.
- Unrestricted: Mit dieser Einstellung funktionieren alle Skripts.
Um zum Beispiel alle Skripte zu blockieren, geben Sie in der PowerShell „Set-ExecutionPolicy Restricted“ ein. In Windows 10 muss die PowerShell dazu über das Kontextmenü mit administrativen Rechten gestartet werden. Das Ändern der Richtlinie muss noch bestätigt werden. Beim nächsten Start einer PowerShell-Sitzung sind die Änderungen aktiv. In der gleichen Sitzung werden die erhöhten Rechte oft nicht akzeptiert.
PowerShell 2.0 entfernen
Auf Windows-Rechnern steht noch als optionales Feature die PowerShell 2.0 zur Verfügung. Diese sollte auf allen Rechnern entfern werden, um alte unsichere Funktionen aus Windows zu verbannen. Auch dadurch erreichen Sie keinen umfassenden Schutz, schließen aber eine weitere Sicherheitslücke.
Constrained Modus aktivieren
Standardmäßig arbeitet die PowerShell im Modus „FullLanguage“. In diesem Modus sind alle Funktionen in der PowerShell verfügbar. Mit dem „Constrained Modus“ werden viele Funktionen in der PowerShell deaktiviert, die auch von Angreifern genutzt werden können. Der Modus kann relativ einfach direkt in einer PowerShell-Sitzung aktiviert werden, in dem die entsprechende Einstellung in der Sitzung geändert werden:
$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"
Innerhalb dieser Sitzung bleiben die Einschränkungen aktiv. Auf diesem Weg lassen sich Skripte testen. Der aktuelle Modus kann mit dem folgenden Befehl angezeigt werden:
$ExecutionContext.SessionState.LanguageMode
Mehr zu diesem Modus erfahren Sie auf der Seite „PowerShell Constrained Language Mode“ vom Microsoft PowerShell-Team. Ändern lässt sich der Modus mit:
$ExecutionContext.SessionState.LanguageMode = "FullLanguage"
Absicherung mit Umgebungsvariablen
Mit der Umgebungsvariablen „__PSLockDownPolicy“ und dem Wert „4“ können Sie ebenfalls die PowerShell in einen eingeschränkten Modus versetzen. Dazu wird eine neue Umgebungsvariable in Windows erstellt. Diese Variable kann auch mit Gruppenrichtlinien-Einstellungen verteilt werden. Mehr dazu sind in einem Beitrag bei Stackoverflow.com zu finden.
PowerShell überwachen
Über Gruppenrichtlinien kann das Erstellen einer Protokolldatei für die PowerShell konfiguriert werden. Dadurch lassen sich alle Aktionen, die auf einem Rechner mit der PowerShell durchgeführt werden protokollieren und damit überwachen. Die Einstellungen dazu finden sich bei „PowerShell-Aufzeichnung aktivieren“ über „Computerkonfiguration\Richtlinien\ Administrative Vorlagen\Windows-Komponenten\Windows PowerShell“. Die Protokolldatei kann auch auf einer Netzwerkfreigabe gespeichert werden. Durch Aktivieren der Option „Aufrufheader mit einschließen“ werden auch Uhrzeit und Datum der Ausführung protokolliert.
Generell schreibt die PowerShell auch Einträge in die Ereignisanzeige. Diese sind bei „Anwendungs- und Dienstprotokolle\ Windows\PowerShell“ zu finden. Auf diesem Weg lassen sich Angriffe oder fehlerhafte Skripte ebenfalls identifizieren. Die PowerShell 7 erstellt ebenfalls Einträge. Diese sind wiederum bei „Anwendungs- und Dienstprotokolle\Microsoft\ PowerShellCore“.
(ID:46808847)