Zagadnienia dotyczące zabezpieczeń usługi zdalne środowiska PowerShellPowerShell Remoting Security Considerations

Usługi zdalne środowiska PowerShell jest zalecanym sposobem zarządzania komputerami z systemem Windows.PowerShell Remoting is the recommended way to manage Windows systems. Usługi zdalne środowiska PowerShell jest domyślnie włączone w systemie Windows Server 2012 R2.PowerShell Remoting is enabled by default in Windows Server 2012 R2. W tym dokumencie opisano problemy z zabezpieczeniami, zalecenia i najlepsze rozwiązania w przypadku korzystania z usługi zdalne środowiska PowerShell.This document covers security concerns, recommendations, and best practices when using PowerShell Remoting.

Co to jest obsługę zdalną środowiska PowerShell?What is PowerShell Remoting?

Korzysta z komunikacji zdalnej programu PowerShell Windows Remote Management (WinRM), który jest przez firmę Microsoft implementacją Web Services for Management (WS-Management) protokołu, aby zezwolić użytkownikom na uruchamianie programu PowerShell poleceń na komputerach zdalnych.PowerShell Remoting uses Windows Remote Management (WinRM), which is the Microsoft implementation of the Web Services for Management (WS-Management) protocol, to allow users to run PowerShell commands on remote computers. Można znaleźć więcej informacji o korzystaniu z usługi zdalne środowiska PowerShell w uruchamiania poleceń zdalnych.You can find more information about using PowerShell Remoting at Running Remote Commands.

Usługi zdalne środowiska PowerShell nie jest taka sama, jak za pomocą ComputerName parametru polecenia cmdlet, aby uruchomić go na komputerze zdalnym, który używa zdalnego wywoływania procedur (RPC), jako jego podstawowy protokół.PowerShell Remoting is not the same as using the ComputerName parameter of a cmdlet to run it on a remote computer, which uses Remote Procedure Call (RPC) as its underlying protocol.

Ustawienia domyślne obsługę zdalną środowiska PowerShellPowerShell Remoting default settings

Usługi zdalne środowiska PowerShell (i WinRM) nasłuchiwania następujące porty:PowerShell Remoting (and WinRM) listen on the following ports:

  • HTTP: 5985HTTP: 5985
  • HTTPS: 5986HTTPS: 5986

Domyślnie usługi zdalne środowiska PowerShell tylko zezwala na połączenia z członkami grupy Administratorzy.By default, PowerShell Remoting only allows connections from members of the Administrators group. Sesje będą uruchamiane w kontekście użytkownika, dzięki czemu wszystkie formanty dostępu do systemu operacyjnego stosowane do poszczególnych użytkowników i grup nadal stosuje się do nich nawiązaniu połączenia za pośrednictwem usługi zdalne środowiska PowerShell.Sessions are launched under the user's context, so all operating system access controls applied to individual users and groups continue to apply to them while connected over PowerShell Remoting.

W sieciach prywatnych domyślne reguły zapory systemu Windows dla niego komunikację zdalną środowiska PowerShell akceptuje wszystkie połączenia.On private networks, the default Windows Firewall rule for PowerShell Remoting accepts all connections. W sieciach publicznych domyślna reguła zapory systemu Windows umożliwia obsługę zdalną środowiska PowerShell połączenia tylko z tej samej podsieci.On public networks, the default Windows Firewall rule allows PowerShell Remoting connections only from within the same subnet. Należy jawnie zmienić tej reguły, aby otworzyć komunikacji zdalnej programu PowerShell do wszystkich połączeń w sieci publicznej.You have to explicitly change that rule to open PowerShell Remoting to all connections on a public network.

Ostrzeżenie: reguły zapory dla sieci publicznych mają na celu ochronę komputera przed atakami połączenie zewnętrzne mogą okazać się złośliwe.Warning: The firewall rule for public networks is meant to protect the computer from potentially malicious external connection attempts. Należy zachować ostrożność podczas usuwania tej reguły.Use caution when removing this rule.

Izolacja procesuProcess isolation

Korzysta z komunikacji zdalnej programu PowerShell Windows Remote Management (WinRM) do komunikacji między komputerami.PowerShell Remoting uses Windows Remote Management (WinRM) for communication between computers. Usługa WinRM działa jako usługa na koncie Usługa sieciowa, a spowoduje utworzenie procesach izolowanych uruchomione jako konta użytkowników do hosta programu PowerShell wystąpień.WinRM runs as a service under the Network Service account, and spawns isolated processes running as user accounts to host PowerShell instances. Wystąpienie programu PowerShell uruchomione jako jeden użytkownik nie ma dostępu do procesu uruchomionego wystąpienia programu PowerShell jako inny użytkownik.An instance of PowerShell running as one user has no access to a process running an instance of PowerShell as another user.

Dzienniki zdarzeń generowanych przez usługi zdalne środowiska PowerShellEvent logs generated by PowerShell Remoting

FireEye udostępnił dobrej podsumowanie dzienniki zdarzeń i inne dowodów zabezpieczeń wygenerowane przez sesje komunikacji zdalnej programu PowerShell, dostępne pod adresem badanie ataków PowerShell.FireEye has provided a good summary of the event logs and other security evidence generated by PowerShell Remoting sessions, available at Investigating PowerShell Attacks.

Protokołów transportu i szyfrowaniaEncryption and transport protocols

Warto wziąć pod uwagę zabezpieczeń połączenia komunikacji zdalnej programu PowerShell z dwóch perspektyw: początkowe uwierzytelnianie i stałą łączność.It is helpful to consider the security of a PowerShell Remoting connection from two perspectives: initial authentication, and ongoing communication.

Niezależnie od protokołu transportu używanego (HTTP lub HTTPS) usługi zdalne środowiska PowerShell zawsze szyfruje cała komunikacja po początkowego uwierzytelniania za pomocą klucza symetrycznego AES 256 sesji.Regardless of the transport protocol used (HTTP or HTTPS), PowerShell Remoting always encrypts all communication after initial authentication with a per-session AES-256 symmetric key.

Początkowe uwierzytelnianieInitial authentication

Uwierzytelnianie potwierdza tożsamość klienta do serwera — oraz w idealnym przypadku - serwera do klienta.Authentication confirms the identity of the client to the server - and ideally - the server to the client.

Gdy klient nawiąże połączenie z serwerem domeny przy użyciu nazwy komputera (np.: serwer01, lub server01.contoso.com), jest domyślnym protokołem uwierzytelniania Kerberos.When a client connects to a domain server using its computer name (i.e.: server01, or server01.contoso.com), the default authentication protocol is Kerberos. Kerberos gwarantuje tożsamość serwera i tożsamości użytkowników bez wysyłania dowolny rodzaj wielokrotnego poświadczenie.Kerberos guarantees both the user identity and server identity without sending any sort of reusable credential.

Gdy klient łączy się z serwerem domeny przy użyciu jego adresu IP lub łączy się z serwerem grupy roboczej, uwierzytelnianie Kerberos nie jest możliwe.When a client connects to a domain server using its IP address, or connects to a workgroup server, Kerberos authentication is not possible. W takim przypadku obsługę zdalną środowiska PowerShell zależy od protokół uwierzytelniania NTLM.In that case, PowerShell Remoting relies on the NTLM authentication protocol. Protokół uwierzytelniania NTLM gwarantuje tożsamość użytkownika bez wysyłania dowolny rodzaj możliwe poświadczeń.The NTLM authentication protocol guarantees the user identity without sending any sort of delegable credential. Do potwierdzenia tożsamości użytkownika, protokół NTLM wymaga, że klient i serwer obliczeniowe klucza sesji z hasła bez kiedykolwiek wymiana samego hasła.To prove user identity, the NTLM protocol requires that both the client and server compute a session key from the user's password without ever exchanging the password itself. Serwer zwykle nie zna hasło użytkownika, więc komunikuje się z kontrolerem domeny, które znać hasło użytkownika, a następnie oblicza klucza sesji dla serwera.The server typically does not know the user's password, so it communicates with the domain controller, which does know the user's password and calculates the session key for the server.

Protokół NTLM, jednak gwarantuje tożsamość serwera.The NTLM protocol does not, however, guarantee server identity. Podobnie jak w przypadku wszystkich protokołów, który jest używany do uwierzytelniania NTLM, osoba atakująca z dostępem do konta komputera komputer przyłączony do domeny może wywołać kontrolera domeny w celu obliczania klucza sesji uwierzytelniania NTLM i tym samym podszyć się pod serwer.As with all protocols that use NTLM for authentication, an attacker with access to a domain-joined computer's machine account could invoke the domain controller to compute an NTLM session-key and thereby impersonate the server.

Uwierzytelnianie NTLM jest domyślnie wyłączona, ale może być dozwolony przez albo Konfigurowanie protokołu SSL na serwerze docelowym lub przez skonfigurowanie ustawienia WinRM TrustedHosts na komputerze klienckim.NTLM-based authentication is disabled by default, but may be permitted by either configuring SSL on the target server, or by configuring the WinRM TrustedHosts setting on the client.

Aby sprawdzić tożsamość serwera podczas połączenia oparte na protokole NTLM przy użyciu certyfikatów SSLUsing SSL certificates to validate server identity during NTLM-based connections

Ponieważ protokół uwierzytelniania NTLM nie Sprawdź tożsamość serwera docelowego (tylko że on już zna hasło), można skonfigurować serwery docelowe, które używają protokołu SSL dla komunikacji zdalnej programu PowerShell.Since the NTLM authentication protocol cannot ensure the identity of the target server (only that it already knows your password), you can configure target servers to use SSL for PowerShell Remoting. Przypisanie certyfikatu SSL na serwerze docelowym (jeśli wystawiony przez urząd certyfikacji, któremu ufa również klient) umożliwia uwierzytelnianie oparte na protokole NTLM, który gwarantuje tożsamość serwera i tożsamości użytkowników.Assigning a SSL certificate to the target server (if issued by a Certificate Authority that the client also trusts) enables NTLM-based authentication that guarantees both the user identity and server identity.

Ignorowanie błędów tożsamości serwera opartego na NTLMIgnoring NTLM-based server identity errors

W przypadku wdrażania certyfikatu SSL do serwera dla połączeń protokołu NTLM praktyce, może pominąć zwrócone błędy tożsamości przez dodanie serwera do usługi WinRM TrustedHosts listy.If deploying a SSL certificate to a server for NTLM connections is infeasible, you may suppress the resulting identity errors by adding the server to the WinRM TrustedHosts list. Należy pamiętać, że dodanie nazwę serwera do listy TrustedHosts nie należy traktować jako dowolnej formy instrukcji wiarygodności hostów, same — jak protokół uwierzytelniania NTLM nie może zagwarantować, że w rzeczywistości łączysz na hoście są ZAMIERZAJĄC nawiązać połączenie.Please note that adding a server name to the TrustedHosts list should not be considered as any form of statement of the trustworthiness of the hosts themselves - as the NTLM authentication protocol cannot guarantee that you are in fact connecting to the host you are intending to connect to. Zamiast tego należy rozważyć ustawienie TrustedHosts listy hostów, dla których chcesz pominąć błędów wygenerowanych przez nie można zweryfikować tożsamości serwera.Instead, you should consider the TrustedHosts setting to be the list of hosts for which you wish to suppress the error generated by being unable to verify the server's identity.

Stałe komunikacjiOngoing Communication

Po zakończeniu uwierzytelniania początkowego protokołu komunikacji zdalnej programu PowerShell szyfruje wszystkie stałą łączność z sesji klucza symetrycznego AES 256.Once initial authentication is complete, the PowerShell Remoting Protocol encrypts all ongoing communication with a per-session AES-256 symmetric key.

Co drugi przeskokMaking the second hop

Domyślnie usługi zdalne środowiska PowerShell użyje do uwierzytelniania NTLM lub Kerberos (jeśli jest dostępna).By default, PowerShell Remoting uses Kerberos (if available) or NTLM for authentication. Oba te protokoły uwierzytelniania komputer zdalny bez wysyłania poświadczeń do niego.Both of these protocols authenticate to the remote machine without sending credentials to it. Jest to najbezpieczniejszy sposób uwierzytelniania, ale ponieważ komputer zdalny nie ma poświadczeń użytkownika, nie ma dostępu do innych komputerów i usług w imieniu użytkownika.This is the most secure way to authenticate, but because the remote machine does not have the user's credentials, it cannot access other computers and services on the user's behalf. Jest to nazywane "drugi problem przeskoku".This is known as the "second hop problem".

Istnieje kilka sposobów, aby uniknąć tego problemu.There are several ways to avoid this problem. Opisy tych metod i zalet i wad każdej zobacz co drugi przeskok w komunikacji zdalnej programu PowerShell.For descriptions of these methods, and the pros and cons of each, see Making the second hop in PowerShell Remoting.