Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Po wdrożeniu narzędzia JEA należy regularnie przeprowadzać inspekcję konfiguracji serwera JEA. Inspekcja pomaga ocenić, czy prawidłowe osoby mają dostęp do punktu końcowego JEA, a ich przypisane role są nadal odpowiednie.
Znajdowanie zarejestrowanych sesji JEA na maszynie
Aby sprawdzić, które sesje JEA są zarejestrowane na maszynie, użyj polecenia cmdlet Get-PSSessionConfiguration .
# Filter for sessions that are configured as 'RestrictedRemoteServer' to
# find JEA-like session configurations
Get-PSSessionConfiguration | Where-Object { $_.SessionType -eq 'RestrictedRemoteServer' }
Name : JEAMaintenance
PSVersion : 5.1
StartupScript :
RunAsUser :
Permission : CONTOSO\JEA_DNS_ADMINS AccessAllowed, CONTOSO\JEA_DNS_OPERATORS AccessAllowed,
CONTOSO\JEA_DNS_AUDITORS AccessAllowed
Obowiązujące prawa dla punktu końcowego są wymienione we właściwości Uprawnienie . Ci użytkownicy mają prawo nawiązać połączenie z punktem końcowym JEA. Jednak role i polecenia, do których mają dostęp, są określane przez właściwość RoleDefinitions w pliku konfiguracji sesji , który został użyty do zarejestrowania punktu końcowego. Rozwiń właściwość RoleDefinitions , aby ocenić mapowania ról w zarejestrowanym punkcie końcowym JEA.
# Get the desired session configuration
$jea = Get-PSSessionConfiguration -Name 'JEAMaintenance'
# Enumerate users/groups and which roles they have access to
$jea.RoleDefinitions.GetEnumerator() | Select-Object Name, @{
Name = 'Role Capabilities'
Expression = { $_.Value.RoleCapabilities }
}
Znajdowanie dostępnych funkcji roli na maszynie
JEA pobiera możliwości roli z plików .psrc przechowywanych w folderze RoleCapabilities wewnątrz modułu PowerShell. Poniższa funkcja znajduje wszystkie uprawnienia roli dostępne na komputerze.
function Find-LocalRoleCapability {
$results = @()
# Find modules with a "RoleCapabilities" subfolder and add any PSRC files to the result set
Get-Module -ListAvailable | ForEach-Object {
$psrcpath = Join-Path -Path $_.ModuleBase -ChildPath 'RoleCapabilities'
if (Test-Path $psrcpath) {
$results += Get-ChildItem -Path $psrcpath -Filter *.psrc
}
}
# Format the results nicely to make it easier to read
$results | Select-Object @{ Name = 'Name'; Expression = { $_.Name.TrimEnd('.psrc') }}, @{
Name = 'Path'; Expression = { $_.FullName }
} | Sort-Object Name
}
Uwaga / Notatka
Kolejność wyników z tej funkcji nie musi być kolejnością, w jakiej zostaną wybrane funkcje roli, jeśli wiele funkcji roli ma taką samą nazwę.
Sprawdzanie obowiązujących praw dla określonego użytkownika
Polecenie cmdlet Get-PSSessionCapability wylicza wszystkie polecenia dostępne w punkcie końcowym JEA na podstawie członkostwa w grupach użytkownika. Wynik działania Get-PSSessionCapability jest identyczny z wynikiem działania Get-Command -CommandType All uruchomionego przez określonego użytkownika w sesji JEA.
Get-PSSessionCapability -ConfigurationName 'JEAMaintenance' -Username 'CONTOSO\Alice'
Jeśli użytkownicy nie są stałymi członkami grup, które mogłyby przyznać im dodatkowe prawa JEA, to polecenie cmdlet może nie odzwierciedlać tych dodatkowych uprawnień. Dzieje się tak w przypadku korzystania z systemów zarządzania dostępem uprzywilejowanym typu just-in-time, aby umożliwić użytkownikom tymczasową przynależność do grupy bezpieczeństwa. Dokładnie oceń mapowanie użytkowników na role i możliwości, aby upewnić się, że użytkownicy uzyskują tylko poziom dostępu potrzebny do pomyślnego wykonywania zadań.
Dzienniki zdarzeń programu PowerShell
Jeśli włączono rejestrowanie modułów lub bloków skryptów w systemie, można zobaczyć zdarzenia w dziennikach zdarzeń systemu Windows dla każdego polecenia uruchamianego przez użytkownika w sesji JEA. Aby znaleźć te zdarzenia, otwórz dziennik zdarzeń Microsoft-Windows-PowerShell/Operational i poszukaj zdarzeń o identyfikatorze zdarzenia 4104.
Każdy wpis dziennika zdarzeń zawiera informacje o sesji, w której uruchomiono polecenie. W przypadku sesji JEA zdarzenie zawiera informacje o ConnectedUser i RunAsUser. ConnectedUser jest rzeczywistym użytkownikiem, który utworzył sesję JEA. RunAsUser to konto, z którego JEA korzysta do wykonywania polecenia.
Dzienniki zdarzeń aplikacji pokazują zmiany wprowadzane przez użytkownika RunAsUser. Dlatego włączenie rejestrowania modułu i skryptu jest wymagane do śledzenia określonego wywołania polecenia z powrotem do ConnectedUser.
Dzienniki zdarzeń aplikacji
Polecenia uruchamiane w sesji JEA, która współdziała z zewnętrznymi aplikacjami lub usługami, mogą rejestrować zdarzenia do własnych dzienników zdarzeń. W przeciwieństwie do dzienników i transkrypcji programu PowerShell inne mechanizmy rejestrowania nie przechwytują połączonego użytkownika sesji JEA. Zamiast tego te aplikacje rejestrują tylko wirtualnego użytkownika uruchomionego jako. Aby określić, kto uruchomił polecenie, należy skonsultować się z transkrypcją sesji lub skorelować dzienniki zdarzeń programu PowerShell z czasem i użytkownikiem wyświetlanym w dzienniku zdarzeń aplikacji.
Dziennik usługi WinRM może pomóc w skorelowaniu użytkowników uruchomionych jako z użytkownikiem łączącym się w dzienniku zdarzeń aplikacji. Identyfikator zdarzenia 193 w dzienniku Microsoft-Windows-Windows Remote Management/Operational rejestruje identyfikator zabezpieczeń (SID) i nazwę konta zarówno użytkownika łączącego się, jak i użytkownika, który uruchamia każdą nową sesję JEA.
Transkrypcje sesji
Jeśli skonfigurowano narzędzie JEA do tworzenia transkrypcji dla każdej sesji użytkownika, kopia tekstowa akcji każdego użytkownika jest przechowywana w określonym folderze.
Następujące polecenie (jako administrator) znajduje wszystkie katalogi transkrypcji.
Get-PSSessionConfiguration |
Where-Object { $_.TranscriptDirectory -ne $null } |
Format-Table Name, TranscriptDirectory
Każda transkrypcja rozpoczyna się od informacji o czasie rozpoczęcia sesji, użytkowniku, który połączył się z sesją, oraz przypisanej mu tożsamości JEA.
**********************
Windows PowerShell transcript start
Start time: 20160710144736
Username: CONTOSO\Alice
RunAs User: WinRM Virtual Users\WinRM VA_1_CONTOSO_Alice
Machine: SERVER01 (Microsoft Windows NT 10.0.14393.0)
[...]
Treść transkrypcji zawiera informacje o każdym poleceniu wywoływanym przez użytkownika. Dokładna składnia używanego polecenia jest niedostępna w sesjach JEA ze względu na sposób, w jaki polecenia są przekształcane na potrzeby zdalnej komunikacji programu PowerShell. Jednak nadal można określić skuteczne polecenie, które zostało wykonane. Poniżej znajduje się przykładowy fragment transkryptu z użytkownika uruchamiającego Get-Service Dns w sesji JEA:
PS>CommandInvocation(Get-Service): "Get-Service"
>> ParameterBinding(Get-Service): name="Name"; value="Dns"
>> CommandInvocation(Out-Default): "Out-Default"
>> ParameterBinding(Out-Default): name="InputObject"; value="Dns"
Running Dns DNS Server
Dla każdego polecenia uruchamianego przez użytkownika, tworzony jest wiersz CommandInvocation.
ParametrBindings rejestruje każdy parametr i wartość dostarczoną za pomocą polecenia . W poprzednim przykładzie widać, że parametr Name został podany z wartością Dns dla Get-Service polecenia cmdlet.
Dane wyjściowe każdego polecenia wyzwalają również wywołanie CommandInvocation, zwykle do Out-Default.
InputObject to obiekt programu PowerShell zwracany z polecenia. Szczegóły tego obiektu są drukowane kilka wierszy poniżej, ściśle naśladując to, co użytkownik widział.
Zobacz także
Wpis na blogu "PowerShell ♥ the Blue Team" dotyczący zabezpieczeń