Udostępnij za pomocą


Zabezpieczanie ograniczonej sesji komunikacji zdalnej programu PowerShell

Istnieją scenariusze, w których chcesz hostować sesję programu PowerShell, która ze względów bezpieczeństwa została ograniczona do podzbioru poleceń programu PowerShell.

Z definicji sesja ograniczona to taka, w której nie można używać Import-Module. Mogą istnieć inne ograniczenia, ale jest to podstawowe wymaganie. Jeśli użytkownik może zaimportować moduł, może uruchomić dowolny moduł.

Przykłady sesji z ograniczeniami obejmują:

  • Just-Enough-Administration (JEA)
  • Niestandardowe ograniczone implementacje zdalnej komunikacji, takie jak moduły Exchange i Teams

W przypadku większości administratorów systemu narzędzie JEA zapewnia najlepsze środowisko tworzenia sesji z ograniczeniami i powinno być twoim pierwszym wyborem. Aby uzyskać więcej informacji na temat JEA, zobacz Omówienie JEA.

Zalecenia dotyczące niestandardowych implementacji sesji

Jeśli twój scenariusz wymaga implementacji niestandardowej, należy postępować zgodnie z tymi zaleceniami.

Ograniczanie użycia i możliwości dostawców programu PowerShell

Zapoznaj się ze sposobem użycia dozwolonych dostawców, aby upewnić się, że nie tworzysz luk w zabezpieczeniach w implementacji sesji z ograniczeniami.

Ostrzeżenie

Nie zezwalaj na dostawcę systemu plików. Jeśli użytkownicy mogą zapisywać dane w dowolnej części systemu plików, można całkowicie pominąć zabezpieczenia.

Nie zezwalaj na dostawcę certyfikatów . Po włączeniu dostawcy użytkownik może uzyskać dostęp do przechowywanych kluczy prywatnych.

Nie zezwalaj na polecenia, które mogą tworzyć nowe przestrzenie uruchomieniowe

Ostrzeżenie

Polecenia *-Job cmdlet mogą tworzyć nowe środowiska uruchomieniowe bez żadnych ograniczeń.

Nie zezwalaj na korzystanie z polecenia Trace-Command cmdlet.

Ostrzeżenie

Użycie Trace-Command powoduje przeniesienie wszystkich śledzonych poleceń do sesji.

Nie twórz własnych implementacji serwera proxy dla poleceń z ograniczeniami

Program PowerShell ma zestaw poleceń serwera proxy dla scenariuszy poleceń z ograniczeniami. Te polecenia serwera proxy zapewniają, że parametry wejściowe nie mogą naruszyć bezpieczeństwa sesji. Następujące polecenia są ograniczone przez serwery proxy.

  • Exit-PSSession
  • Get-Command
  • Get-FormatData
  • Get-Help
  • Measure-Object
  • Out-Default
  • Select-Object

Jeśli tworzysz własną implementację tych poleceń, możesz przypadkowo zezwolić użytkownikom na uruchamianie kodu zabronionego przez polecenia serwera proxy JEA.

Aby uzyskać listę poleceń z ograniczeniami, możesz uruchomić następujące polecenie:

$commands = [System.Management.Automation.CommandMetadata]::GetRestrictedCommands(
    [System.Management.Automation.SessionCapabilities]::RemoteServer
)

Polecenia ograniczonego serwera proxy można sprawdzić za pomocą następującego polecenia:

$commands = [System.Management.Automation.CommandMetadata]::GetRestrictedCommands(
    [System.Management.Automation.SessionCapabilities]::RemoteServer
)
$getHelpProxyBlock = [System.Management.Automation.ProxyCommand]::Create($commands['Get-Help'])

Konfigurowanie sesji do korzystania z trybu NoLanguage

Tryb programu PowerShell NoLanguage wyłącza całkowicie język skryptów programu PowerShell. Nie można uruchamiać skryptów ani używać zmiennych. Można uruchamiać tylko natywne polecenia i polecenia cmdlet.

Aby uzyskać więcej informacji na temat trybów języka, zobacz about_Language_Modes.

Nie zezwalaj na używanie debugera w sesji

Domyślnie debuger programu PowerShell uruchamia kod w FullLanguage trybie. Ustaw właściwość UseFullLanguageModeInDebugger w obszarze SessionState na wartość false.

Aby uzyskać więcej informacji, zobacz UseFullLanguageModeInDebugger.