Auditování a generování sestav o JEA
Po nasazení JEA je potřeba pravidelně auditovat konfiguraci JEA. Auditování pomáhá vyhodnotit, že správné osoby mají přístup ke koncovému bodu JEA a jejich přiřazené role jsou stále vhodné.
Vyhledání registrovaných relací JEA na počítači
Pokud chcete zkontrolovat, které relace JEA jsou zaregistrované na počítači, použijte rutinu 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
Platná práva pro koncový bod jsou uvedena ve vlastnosti Oprávnění . Tito uživatelé mají právo připojit se ke koncovému bodu JEA. Role a příkazy, ke kterým mají přístup, jsou však určeny vlastností RoleDefinitions v konfiguračním souboru relace, který byl použit k registraci koncového bodu. Rozbalte vlastnost RoleDefinitions a vyhodnoťte mapování rolí v registrovaném koncovém bodu 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 }
}
Vyhledání dostupných funkcí rolí na počítači
FUNKCE JEA získá funkce role ze .psrc
souborů uložených ve složce RoleCapabilities v modulu PowerShellu. Následující funkce najde všechny funkce rolí dostupné v počítači.
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
}
Poznámka:
Pořadí výsledků této funkce nemusí nutně odpovídat pořadí, ve kterém budou možnosti role vybrány, pokud více funkcí rolí sdílí stejný název.
Kontrola platných práv pro konkrétního uživatele
Rutina Get-PSSessionCapability vyčísluje všechny příkazy dostupné na koncovém bodu JEA na základě členství ve skupinách uživatele. Výstup Get-PSSessionCapability
je stejný jako u zadaného uživatele spuštěného Get-Command -CommandType All
v relaci JEA.
Get-PSSessionCapability -ConfigurationName 'JEAMaintenance' -Username 'CONTOSO\Alice'
Pokud uživatelé nejsou trvalými členy skupin, kteří by jim udělili další práva JEA, nemusí tato rutina odrážet tato dodatečná oprávnění. K tomu dochází v případě, že používáte systémy pro správu privilegovaného přístupu za běhu, které uživatelům umožní dočasně patřit do skupiny zabezpečení. Pečlivě vyhodnoťte mapování uživatelů na role a možnosti, abyste zajistili, že uživatelé získají pouze úroveň přístupu potřebnou k úspěšné práci.
Protokoly událostí PowerShellu
Pokud jste povolili protokolování modulu nebo bloku skriptu v systému, můžete zobrazit události v protokolech událostí Systému Windows pro každý příkaz, který uživatel spustí v relaci JEA. Pokud chcete tyto události najít, otevřete Microsoft-Windows-PowerShell nebo protokol provozních událostí a vyhledejte události s ID události 4104.
Každá položka protokolu událostí obsahuje informace o relaci, ve které byl příkaz spuštěn. U relací JEA obsahuje událost informace o Připojení edUser a RunAsUser. Připojení edUser je skutečný uživatel, který vytvořil relaci JEA. RunAsUser je účet JEA použitý ke spuštění příkazu.
Protokoly událostí aplikace zobrazují změny provedené uživatelem RunAsUser. Aby bylo povolené protokolování modulů a skriptů, je potřeba k trasování konkrétního vyvolání příkazu zpět do Připojení edUser.
Protokoly událostí aplikace
Příkazy se spouští v relaci JEA, která komunikuje s externími aplikacemi nebo službami, můžou protokolovat události do vlastních protokolů událostí. Na rozdíl od protokolů a přepisů PowerShellu ostatní mechanismy protokolování nezachytí připojeného uživatele relace JEA. Místo toho tyto aplikace protokolují pouze virtuální spustit jako uživatele. Pokud chcete zjistit, kdo příkaz spustil, musíte se podívat na přepis relace nebo korelovat protokoly událostí PowerShellu s časem a uživatelem zobrazeným v protokolu událostí aplikace.
Protokol WinRM vám také může pomoct korelovat spuštění jako uživatele s připojeným uživatelem v protokolu událostí aplikace. ID události 193 v protokolu Vzdálená správa /Operační protokol systému Microsoft-Windows zaznamenává identifikátor zabezpečení (SID) a název účtu pro uživatele, který se připojuje, a běží jako uživatel pro každou novou relaci JEA.
Přepisy relací
Pokud jste nakonfigurovali JEA tak, aby vytvořil přepis pro každou uživatelskou relaci, uloží se v zadané složce textová kopie akcí každého uživatele.
Následující příkaz (jako správce) najde všechny adresáře přepisu.
Get-PSSessionConfiguration |
Where-Object { $_.TranscriptDirectory -ne $null } |
Format-Table Name, TranscriptDirectory
Každý přepis začíná informacemi o čase spuštění relace, ke kterému se uživatel připojil k relaci a ke které identitě JEA byla přiřazena.
**********************
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)
[...]
Tělo přepisu obsahuje informace o každém příkazu, který uživatel vyvolal. Přesná syntaxe použitého příkazu není v relacích JEA dostupná kvůli způsobu, jakým se příkazy transformují pro vzdálené komunikace PowerShellu. Přesto ale můžete určit efektivní příkaz, který byl proveden. Níže je příklad fragmentu přepisu od uživatele spuštěného Get-Service Dns
v relaci 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
Řádek CommandInvocation se zapisuje pro každý příkaz, který uživatel spustí. ParametrBindings zaznamenává každý parametr a hodnotu zadanou příkazem. V předchozím příkladu vidíte, že parametr Name byl zadán s hodnotou Dns pro rutinu Get-Service
.
Výstup každého příkazu také aktivuje CommandInvocation, obvykle na Out-Default
. InputObject je Out-Default
objekt PowerShellu vrácený příkazem. Podrobnosti o objektu jsou vytištěny několik řádků níže, úzce mimicking, co by uživatel viděl.