Controle en rapportage over JEA

Nadat u JEA hebt geïmplementeerd, moet u de JEA-configuratie regelmatig controleren. Met controle kunt u 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

Als u wilt controleren welke JEA-sessies zijn geregistreerd op een computer, gebruikt u de 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

De effectieve rechten voor het eindpunt worden weergegeven 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 worden alle functiemogelijkheden gevonden 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

Met de cmdlet Get-PSSessionCapability worden alle opdrachten opgesomd die beschikbaar zijn op een JEA-eindpunt op basis van groepslidmaatschappen van een gebruiker. De uitvoer van Get-PSSessionCapability is 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, wordt deze cmdlet mogelijk niet weergegeven met deze extra machtigingen. Dit gebeurt wanneer u Just-In-Time bevoegde toegangsbeheersystemen gebruikt om gebruikers toe te staan tijdelijk 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, ziet u gebeurtenissen in de Windows-gebeurtenislogboeken 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 ConnectedUser en de RunAsUser. De ConnectedUser is de werkelijke gebruiker die de JEA-sessie heeft gemaakt. RunAsUser is het account dat JEA gebruikt om de opdracht uit te voeren.

Logboeken van toepassingsgebeurtenissen tonen wijzigingen die worden aangebracht door RunAsUser. Het is dus vereist dat module- en scriptlogboekregistratie is ingeschakeld om een specifieke opdracht weer aan te roepen naar de ConnectedUser.

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 verbindingsgebruiker in een gebeurtenislogboek van een toepassing. Gebeurtenis-id 193 in het Microsoft-Windows-Windows Remote Management/Operationeel logboek registreert de beveiligings-id (SID) en de accountnaam voor zowel de verbindende gebruiker als gebruiker voor elke nieuwe JEA-sessie.

Sessietranscripties

Als u JEA hebt geconfigureerd voor het maken van een transcriptie voor elke gebruikerssessie, wordt er 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 de tijd waarop de sessie is gestart, welke gebruiker is verbonden 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 van PowerShell. U kunt echter nog steeds de effectieve opdracht bepalen die is uitgevoerd. Hieronder ziet u een voorbeeld van een transcriptfragment 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 registreren 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, waarbij de gebruiker nauwkeurig nabootst wat de gebruiker zou hebben gezien.

Zie ook

PowerShell ♥ de blogpost van het Blue Team over beveiliging