Navigation und Service

Analyse von Powershell und Windows Script Host

In diesem Arbeitspaket wird die Powershell-Umgebung sowie der Windows Script Host (WSH) des Microsoft Windows 10 Betriebssystems analysiert sowie Logging- und Konfigurationsmöglichkeiten betrachtet.

Aufgrund der langen Laufzeit dieses Projekts wurde für dieses Arbeitspaket eine Differenz-Analyse zwischen der ursprünglichen Version Windows 10, Build 1607 und Windows 10 Enterprise LTSC 2019 (Build 1809) durchgeführt. Diese Version wird von Microsoft bis 2029 unterstützt. Bei dieser Differenz-Analyse wurden keine wesentlichen Änderungen gegenüber der Hauptuntersuchung festgestellt.

Inhalt Analysedokument

1 Einleitung
1.1 Zusammenfassung
1.2 Executive Summary
2 Konzept und Fachbegriffe
2.1 Powershell Architekturüberblick
2.2 Windows Script Host Architekturüberblick
3 Technische Analyse der Funktionalitäten
3.1 Powershell Ausführung
3.1.1 Ausführungsorte
3.1.2 Ausführungskontext
3.2 Deaktivierung
3.2.1 Powershell
3.2.2 Windows Script Host
4 Konfigurations- und Loggingmöglichkeiten
4.1 Konfigurationsmöglichkeiten
4.1.1 Powershell
4.1.2 Windows Script Host
4.2 Loggingmöglichkeiten
Anhang
Literaturverzeichnis
Schlüsselwörter und Abkürzungsverzeichnis

Kurzzusammenfassung der Analyseergebnisse:

.Der "Windows Script Host" (WSH) ist eine Windows-Technologie, welche eine Skripting-Umgebung mit einer Vielzahl von Funktionen bietet. WSH wird typischerweise bei Automatisierungsaufgaben, wie beispielsweise bei der Systemadministration, verwendet. WSH ist dabei in der Lage, verschiedene Skriptsprachen, wie beispielsweise JScript und VBScript, zu interpretieren und auszuführen. Die zentrale Skript-Engine von WSH ist in den ausführbaren Dateien %SystemRoot%\System32\cscript.exe und %SystemRoot%\System32\wscript.exe implementiert. cscript.exe führt Skripte im Konsolenmodus aus, während die Skripte bei wscript.exe in einem grafischen Modus ausgeführt werden. Die zentrale Skript-Engine von WSH bietet nicht die Funktionalität spezifische Skript-Sprachen zu interpretieren, jedoch kann die Interpretation anderer Sprachen aus externen Skript-Engines importiert werden. Diese Skript-Engines sind in Dynamic Link Library (DLL)-Dateien in dem Verzeichnis %SystemRoot%\System32 implementiert. Zum Beispiel stellt die Datei vbscript.dll die Skript-Engine von VBScript, während die Skript-Engine von JScript in der Datei jscript.dll implementiert ist.

Die PowerShell-Komponente innerhalb von Windows 10 bietet dem Benutzer eine klar definierte Ausführungsumgebung, welche eine Abstraktion des umfangreichen .NET-Frameworks darstellt. Des Weiteren verfügt die sie über eine klar definierte Sprache, welche es ermöglicht komplexe Aktivitäten auf einfache und schnelle Weise durchzuführen. Im Kern besteht die PowerShell aus unterschiedlichen PowerShell spezifischen .NET Assemblies. Die Hauptfunktionalitäten in PowerShell sind als Teil des System.Management.Automation .NET Assembly implementiert. Wenn auf dieses Assembly nicht mehr zugegriffen werden kann, stehen PowerShell-Hauptfunktionalitäten (z.B. Ausführungsumgebung) Anwendungen nicht mehr zur Verfügung.

PowerShell ist mit verschiedenen praktischen Sicherheitseigenschaften ausgestattet (d.h. die PowerShell spezifischen .NET Assemblies), die zum Beispiel die Ressourcen, auf die PowerShell zugreifen kann, beschränkt. Des Weiteren verfügt sie über umfangreiche Protokollierungseigenschaften, welche bei der Identifikation und Nachvollziehung von potenziellen missbräuchlichen Verhalten entscheidend sein können.

Die Standardinstallation von Windows 10 beinhaltet zwei PowerShell-Versionen, die Version 2.0 und die Version 5.1. Hierbei ist standardmäßig nur die Version 5.1 aktiviert und stellt die zugehörigen .NET Assemblies bereit. Die Version 2.0 kann als zusätzliches sog. Windows Feature aktiviert werden, d.h. Anwendungen können dann auch auf die PowerShell-spezifischen .NET Assemblies der Version 2.0 zugreifen. Da diese .NET Assemblies nicht vollumfänglich über alle Sicherheits- und Protokollierungseigenschaften der Version 5.1 verfügen, wird dringlichst dazu geraten Version 2.0 im deaktivierten Zustand zu belassen. Eine komplette Deaktivierung der PowerShell Version 5.1 ist praktisch nicht möglich bzw. ist mit einem immensen Aufwand verbunden.

Da PowerShell einen sehr mächtigen Mechanismus zur Verwaltung des Systems darstellt, kann ein Missbrauch der Funktionalitäten auch zu einer starken negativen Beeinflussung der Systemsicherheit führen. Die klar definierte Sprache ermöglicht es einem Angreifer bösartige und gleichzeitig komplexe Aktivitäten auf einfache und schnelle Weise durchzuführen. Dies macht die PowerShell aus Angreifersicht besonders attraktiv. Dabei muss jedoch betont werden, dass auch PowerShell den rollenbasierten Zugriffskontrollmechanismen des Betriebssystems unterliegt, welche den Zugriff autorisierter Benutzer auf Systemressourcen beschränkt.

Aufgrund des hohen Gefahrenpotenzials muss der Einsatz von PowerShell das Ergebnis einer umfassenden Evaluation der benötigten Leistungs- und Funktionsanforderungen sein. Da PowerShell nicht grundsätzlich deaktiviert werden kann, sollte anschließend ein PowerShell-spezifisches Sicherheits- und Protokollierungskonzept aufgebaut werden, welches auch spezifische Härtungsmaßnahmen enthält, um einen Missbrauch der PowerShell-Funktionalitäten bestmöglich zu unterbinden bzw. frühzeitig zu erkennen.