Condividi tramite


Revisione e redazione di rapporti su JEA

Dopo aver distribuito JEA, è necessario controllare regolarmente la configurazione JEA. Il controllo consente di valutare che le persone corrette abbiano accesso all'endpoint JEA e che i ruoli assegnati siano ancora appropriati.

Trovare le sessioni JEA registrate in un computer

Per verificare quali sessioni JEA sono registrate in un computer, usare il 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

I diritti effettivi per l'endpoint sono elencati nella proprietà Permission . Questi utenti hanno il diritto di connettersi all'endpoint JEA. Tuttavia, i ruoli e i comandi a cui hanno accesso sono determinati dalla proprietà RoleDefinitions nel file di configurazione della sessione usato per registrare l'endpoint. Espandere la proprietà RoleDefinitions per valutare i mapping dei ruoli in un endpoint JEA registrato.

# 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 }
}

Trovare le funzionalità del ruolo disponibili nel computer

JEA ottiene le funzionalità del ruolo dai .psrc file archiviati nella cartella RoleCapabilities all'interno di un modulo di PowerShell. La funzione seguente trova tutte le funzionalità del ruolo disponibili in un computer.

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
}

Annotazioni

L'ordine dei risultati di questa funzione non è necessariamente l'ordine in cui verranno selezionate le funzionalità del ruolo se più funzionalità del ruolo condividono lo stesso nome.

Controllare i diritti effettivi per un utente specifico

Il cmdlet Get-PSSessionCapability enumera tutti i comandi disponibili in un endpoint JEA in base alle appartenenze ai gruppi di un utente. L'output di Get-PSSessionCapability è identico a quello dell'utente specificato in esecuzione Get-Command -CommandType All in una sessione JEA.

Get-PSSessionCapability -ConfigurationName 'JEAMaintenance' -Username 'CONTOSO\Alice'

Se gli utenti non sono membri permanenti di gruppi che concedono diritti JEA aggiuntivi, questo cmdlet potrebbe non riflettere tali autorizzazioni aggiuntive. Ciò si verifica quando si usano sistemi di gestione degli accessi con privilegi JIT per consentire agli utenti di appartenere temporaneamente a un gruppo di sicurezza. Valutare attentamente il mapping degli utenti ai ruoli e alle funzionalità per garantire che gli utenti ottengano solo il livello di accesso necessario per svolgere correttamente il proprio lavoro.

Log eventi di PowerShell

Se è stata abilitata la registrazione di blocchi di modulo o script nel sistema, è possibile visualizzare gli eventi nei registri eventi di Windows per ogni comando eseguito da un utente in una sessione JEA. Per trovare questi eventi, aprire il registro eventi Microsoft-Windows-PowerShell/Operational e cercare gli eventi con ID evento 4104.

Ogni voce del registro eventi include informazioni sulla sessione in cui è stato eseguito il comando. Per le sessioni JEA, l'evento include informazioni su ConnectedUser e RunAsUser. ConnectedUser è l'utente effettivo che ha creato la sessione JEA. RunAsUser è l'account JEA usato per eseguire il comando.

I registri eventi dell'applicazione mostrano le modifiche apportate da RunAsUser. Pertanto, è necessario abilitare la registrazione di moduli e script per tracciare una chiamata di comando specifica a ConnectedUser.

Log eventi dell'applicazione

I comandi eseguiti in una sessione JEA che interagiscono con applicazioni o servizi esterni possono registrare eventi nei propri registri eventi. A differenza dei log e delle trascrizioni di PowerShell, altri meccanismi di registrazione non acquisiscono l'utente connesso della sessione JEA. Queste applicazioni registrano invece solo l'utente run-as virtuale. Per determinare chi ha eseguito il comando, è necessario consultare una trascrizione di sessione o correlare i log eventi di PowerShell con l'ora e l'utente visualizzati nel registro eventi dell'applicazione.

Il log WinRM consente anche di correlare gli utenti run-as all'utente che si connette in un registro eventi dell'applicazione. L'ID evento 193 in Microsoft-Windows-Windows gestione remota/log operativo registra l'identificatore di sicurezza (SID) e il nome dell'account per l'utente connesso ed eseguito come utente per ogni nuova sessione JEA.

Trascrizioni di sessione

Se JEA è stato configurato per creare una trascrizione per ogni sessione utente, una copia di testo delle azioni di ogni utente viene archiviata nella cartella specificata.

Il comando seguente (da amministratore) trova tutte le directory di trascrizione.

Get-PSSessionConfiguration |
  Where-Object { $_.TranscriptDirectory -ne $null } |
    Format-Table Name, TranscriptDirectory

Ogni trascrizione inizia con informazioni sull'avvio della sessione, sull'utente connesso alla sessione e sull'identità JEA assegnata.

**********************
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)
[...]

Il corpo della trascrizione contiene informazioni su ogni comando richiamato dall'utente. La sintassi esatta del comando usato non è disponibile nelle sessioni JEA a causa del modo in cui i comandi vengono trasformati per la comunicazione remota di PowerShell. Tuttavia, è comunque possibile determinare il comando effettivo che è stato eseguito. Di seguito è riportato un frammento di trascrizione di esempio da un utente che esegue Get-Service Dns in una sessione 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

Viene scritta una riga CommandInvocation per ogni comando eseguito da un utente. ParameterBindings registra ogni parametro e valore fornito con il comando . Nell'esempio precedente è possibile notare che il parametro Name è stato fornito con il valore Dns per il Get-Service cmdlet.

L'output di ogni comando attiva anche una invocazione di comando, solitamente verso Out-Default. InputObject di Out-Default è l'oggetto PowerShell restituito dal comando . I dettagli dell'oggetto vengono stampati sotto alcune righe, simulando attentamente ciò che l'utente avrebbe visto.

Vedere anche

Post di blog di PowerShell ♥ the Blue Team sulla sicurezza