JEA 的稽核和報告

部署 JEA 之後,您必須定期稽核 JEA 設定。 稽核可協助您評估正確的人員是否能夠存取 JEA 端點,且其指派的角色仍然適用。

在機器上尋找已註冊的 JEA 會話

若要檢查計算機上已註冊哪些 JEA 會話,請使用 Get-PSSessionConfiguration Cmdlet。

# 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

端點的有效許可權會列在 Permission 屬性中。 這些使用者有權連線到 JEA 端點。 不過,他們可存取的角色和命令是由用來註冊端點之會話組態檔中的 RoleDefinitions 屬性所決定。 展開 RoleDefinitions 屬性,以評估已註冊 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 }
}

在機器上尋找可用的角色功能

JEA 會從 .psrc 儲存在 PowerShell 模組內 RoleCapabilities 資料夾的檔案取得角色功能。 下列函式會尋找電腦上所有可用的角色功能。

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
}

注意

如果多個角色功能共用相同名稱,則此函式的結果順序不一定是選取角色功能的順序。

檢查特定使用者的有效許可權

Get-PSSessionCapability Cmdlet 會根據使用者的群組成員資格列舉 JEA 端點上可用的所有命令。 的輸出與 JEA 工作階段中執行的Get-Command -CommandType All指定使用者輸出Get-PSSessionCapability相同。

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

如果您的使用者不是會授與他們其他 JEA 許可權之群組的永久成員,此 Cmdlet 可能不會反映這些額外的許可權。 當使用 Just-In-Time 特殊許可權存取管理系統讓用戶暫時屬於安全組時,就會發生這種情況。 仔細評估使用者與角色和功能的對應,以確保使用者只能取得成功執行其工作所需的存取層級。

PowerShell 事件記錄

如果您在系統上啟用模組或腳本區塊記錄,您可以在 Windows 事件記錄檔中看到使用者在 JEA 工作階段中執行之每個命令的事件。 若要尋找這些事件,請開啟 Microsoft-Windows-PowerShell/Operational 事件記錄檔,並尋找事件標識碼 為 4104 的事件。

每個事件記錄檔專案都包含命令執行所在的會話相關信息。 針對 JEA 會話,事件包含 連線 edUser 和 RunAsUser 的相關信息連線 EdUser 是建立 JEA 會話的實際使用者。 RunAsUser 是用來執行命令的 JEA 帳戶。

應用程式事件記錄顯示 RunAsUser 正在進行的變更。 因此必須啟用模組和腳本記錄,才能追蹤回 連線edUser的特定命令調用。

應用程式事件記錄檔

命令會在與外部應用程式或服務互動的 JEA 工作階段中執行,可能會將事件記錄到自己的事件記錄檔。 不同於 PowerShell 記錄和文字記錄,其他記錄機制不會擷取 JEA 會話的已連線使用者。 相反地,這些應用程式只會記錄虛擬執行身分使用者。 若要判斷誰執行命令,您必須查閱 會話文字記錄 ,或將PowerShell事件記錄檔與應用程式事件記錄中顯示的時間和使用者相互關聯。

WinRM 記錄檔也可以協助您將執行身分使用者與應用程式事件記錄檔中的連線使用者相互關聯。 Microsoft-Windows-Windows 遠端管理/作業記錄檔中的事件識別碼 193 會記錄連線使用者的安全性標識元 (SID) 和帳戶名稱,並針對每個新的 JEA 會話以使用者身分執行。

會話文字記錄

如果您設定 JEA 為每個使用者工作階段建立文字記錄,則每個使用者動作的文字複本會儲存在指定的資料夾中。

下列命令 (以系統管理員身分) 會尋找所有文字記錄目錄。

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

每個文字記錄都會從會話開始的時間、連線到會話的使用者,以及指派給會話的 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)
[...]

文字記錄的本文包含使用者叫用之每個命令的相關信息。 JEA 會話中所使用的命令確切語法無法使用,因為針對 PowerShell 遠端轉換命令的方式。 不過,您仍然可以判斷已執行的有效命令。 以下是 JEA 工作階段執行 Get-Service Dns 之使用者的範例文字記錄代碼段:

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

針對使用者執行的每個命令,都會撰寫 CommandInvocation 行。 ParameterBindings 會記錄命令所提供的每個參數和值。 在上一個範例中,您可以看到參數 Name 已提供 Cmdlet 的值 DnsGet-Service

每個命令的輸出也會觸發 CommandInvocation,通常為 Out-Default。 的 Out-Default InputObject 是從 命令傳回的 PowerShell 物件。 該物件的詳細數據會印出以下幾行,仔細模仿使用者會看到的內容。

另請參閱

PowerShell ♥ Blue Team 關於安全性的部落格文章