In vielen Organisationen wird aus Sicherheitsgründen der Constrained Language Mode (kurz CLM) für Powershell aktiviert und ganz oft per GPO (Group Policy Objekt) unternehmensweit voreingestellt. Dadurch werden viele Powershell-Befehle die auch von Angreifern verwendet werden, deaktiviert und können nicht mehr verwendet werden. Durch das Anwenden der Policy wird die Umgebungsvariable  __PSLockDownPolicy gesetzt. Es kann aber nicht verhindert werden, dass der Wert dieser Variable lokal überschrieben wird.

Dazu kommt jetzt noch zusätzlich, dass alle Pfade die „system32“ enthalten, im Unrestricted Language Mode ausgeführt werden. Es reicht also aus das Powershell-Skript in system32.ps1 umzubenennen. Danach liefert der Aufruf von Get-ExecutionPolicy den Wert Unrestricted.

Zum Testen dieses Verhaltens kann ein einfaches Powershell-Skript verwendet werden.

check-mode.ps1

$mode = $ExecutionContext.SessionState.LanguageMode
Write-Host $mode

Durch Aufruf dieses Skript-Datei von verschiedenen Speicherorten aus, kann schnell festgestellt werden, dass sobald „system32“ im Pfad vorkommt, der Full Language Mode verwendet wird.

PS C:\> .\check-mode.ps1
ConstrainedLanguage
PS C:\> cd .\system32
PS C:\system32> .\check-mode.ps1
FullLanguage 

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert