Delen via


Controle en rapportage over JEA

Nadat u JEA hebt geïmplementeerd, moet u de JEA-configuratie regelmatig controleren. Controle helpt u te beoordelen of de juiste personen toegang hebben tot het JEA-eindpunt en hun toegewezen rollen nog steeds geschikt zijn.

Geregistreerde JEA-sessies zoeken op een computer

Gebruik de cmdlet Get-PSSessionConfiguration om te controleren welke JEA-sessies zijn geregistreerd op een computer.

# 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

De effectieve rechten voor het eindpunt worden vermeld in de eigenschap Machtiging . Deze gebruikers hebben het recht om verbinding te maken met het JEA-eindpunt. De rollen en opdrachten waartoe ze toegang hebben, worden echter bepaald door de eigenschap RoleDefinitions in het sessieconfiguratiebestand dat is gebruikt om het eindpunt te registreren. Vouw de eigenschap RoleDefinitions uit om de roltoewijzingen in een geregistreerd JEA-eindpunt te evalueren.

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

Beschikbare functiemogelijkheden zoeken op de computer

JEA haalt rolmogelijkheden op uit de .psrc bestanden die zijn opgeslagen in de map RoleCapabilities in een PowerShell-module. Met de volgende functie vindt u alle functiemogelijkheden die beschikbaar zijn op een 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
}

Notitie

De volgorde van resultaten van deze functie is niet noodzakelijkerwijs de volgorde waarin de functiemogelijkheden worden geselecteerd als meerdere functiemogelijkheden dezelfde naam hebben.

Effectieve rechten voor een specifieke gebruiker controleren

De cmdlet Get-PSSessionCapability bevat alle opdrachten die beschikbaar zijn op een JEA-eindpunt op basis van groepslidmaatschappen van een gebruiker. De uitvoer is Get-PSSessionCapability identiek aan die van de opgegeven gebruiker die wordt uitgevoerd Get-Command -CommandType All in een JEA-sessie.

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

Als uw gebruikers geen permanente leden van groepen zijn die hen extra JEA-rechten zouden verlenen, geeft deze cmdlet deze extra machtigingen mogelijk niet weer. Dit gebeurt wanneer u Just-In-Time bevoegde toegangsbeheersystemen gebruikt om gebruikers tijdelijk toe te staan deel te uitmaken van een beveiligingsgroep. Evalueer zorgvuldig de toewijzing van gebruikers aan rollen en mogelijkheden om ervoor te zorgen dat gebruikers alleen het toegangsniveau krijgen dat nodig is om hun taken uit te voeren.

PowerShell-gebeurtenislogboeken

Als u module- of scriptblokkeringslogboeken op het systeem hebt ingeschakeld, kunt u gebeurtenissen in de Windows-gebeurtenislogboeken zien voor elke opdracht die een gebruiker uitvoert in een JEA-sessie. Als u deze gebeurtenissen wilt vinden, opent u microsoft-Windows-PowerShell/operationeel gebeurtenislogboek en zoekt u naar gebeurtenissen met gebeurtenis-id 4104.

Elke vermelding in het gebeurtenislogboek bevat informatie over de sessie waarin de opdracht is uitgevoerd. Voor JEA-sessies bevat de gebeurtenis informatie over de Verbinding maken edUser en de RunAsUser. De Verbinding maken edUser is de werkelijke gebruiker die de JEA-sessie heeft gemaakt. RunAsUser is het account dat JEA gebruikt om de opdracht uit te voeren.

Toepassingsgebeurtenislogboeken tonen wijzigingen die worden aangebracht door RunAsUser. Het is dus vereist dat module- en scriptlogboekregistratie is ingeschakeld om een specifieke opdracht aanroep terug te traceren naar de Verbinding maken edUser.

Gebeurtenislogboeken van toepassingen

Opdrachten worden uitgevoerd in een JEA-sessie die interactie heeft met externe toepassingen of services, kunnen gebeurtenissen registreren in hun eigen gebeurtenislogboeken. In tegenstelling tot PowerShell-logboeken en transcripties leggen andere mechanismen voor logboekregistratie de verbonden gebruiker van de JEA-sessie niet vast. In plaats daarvan registreren deze toepassingen alleen de virtuele run-as-gebruiker. Als u wilt bepalen wie de opdracht heeft uitgevoerd, moet u een sessietranscriptie raadplegen of PowerShell-gebeurtenislogboeken correleren met de tijd en gebruiker die wordt weergegeven in het gebeurtenislogboek van de toepassing.

Het WinRM-logboek kan u ook helpen run-as-gebruikers te correleren met de verbindende gebruiker in een gebeurtenislogboek van een toepassing. Gebeurtenis-id 193 in het externe beheer/operationele logboek van Microsoft-Windows registreert de beveiligings-id (SID) en de accountnaam voor zowel de verbindende gebruiker als de uitvoering als gebruiker voor elke nieuwe JEA-sessie.

Sessietranscripties

Als u JEA hebt geconfigureerd voor het maken van een transcriptie voor elke gebruikerssessie, wordt een tekstkopie van de acties van elke gebruiker opgeslagen in de opgegeven map.

Met de volgende opdracht (als beheerder) worden alle transcriptmappen gevonden.

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

Elke transcriptie begint met informatie over het tijdstip waarop de sessie is gestart, welke gebruiker verbinding heeft gemaakt met de sessie en welke JEA-identiteit aan hen is toegewezen.

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

De hoofdtekst van het transcript bevat informatie over elke opdracht die de gebruiker heeft aangeroepen. De exacte syntaxis van de gebruikte opdracht is niet beschikbaar in JEA-sessies vanwege de manier waarop opdrachten worden getransformeerd voor externe communicatie met PowerShell. U kunt echter nog steeds de effectieve opdracht bepalen die is uitgevoerd. Hieronder ziet u een voorbeeld van een transcriptiefragment van een gebruiker die wordt uitgevoerd Get-Service Dns in een JEA-sessie:

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

Een CommandInvocation-regel wordt geschreven voor elke opdracht die een gebruiker uitvoert. ParameterBindings registreert elke parameter en waarde die bij de opdracht wordt geleverd. In het vorige voorbeeld ziet u dat de parameternaam de waarde Dns voor de Get-Service cmdlet heeft opgegeven.

De uitvoer van elke opdracht activeert ook een CommandInvocation, meestal naar Out-Default. Het InputObject van Out-Default is het PowerShell-object dat wordt geretourneerd door de opdracht. De details van dat object worden een paar regels hieronder afgedrukt, waardoor de gebruiker nauwkeurig nabootst wat de gebruiker zou hebben gezien.

Zie ook

PowerShell ♥ de blogpost van het Blue Team over beveiliging