Получить подробную информацию о событии от System.Diagnostics.EventLogEntry - PullRequest
1 голос
/ 25 сентября 2019

Я пишу сценарий PowerShell, чтобы следить за некоторыми записями журнала событий.Я могу подписаться на журнал безопасности и вызвать блок сценария, когда одно из событий регистрируется.Тем не менее, я не могу найти, как получить соответствующие данные из объекта события.Объект события, с которым я взаимодействую, имеет тип System.Diagnostics.EventLogEntry.Я проверил документацию этого класса и записал все доступные свойства в консоль с помощью блока скриптов:

$CredentialGuardEventIds = 5379,5381,5382
$SecurityLog = Get-EventLog -List | Where-Object {$_.Log -eq 'Security'}

Register-ObjectEvent -InputObject $SecurityLog -SourceIdentifier NewCredentialEvent -EventName EntryWritten -Action {
    $entry = $event.SourceEventArgs.Entry
    if ($CredentialGuardEventIds -contains $entry.EventID) {
        Write-Host "Event $($entry.EventID) occured"
        Write-Host "CanRaiseEvents: $($entry.CanRaiseEvents)"
        Write-Host "Category: $($entry.Category)"
        Write-Host "CategoryNumber: $($entry.CategoryNumber)"
        Write-Host "Container: $($entry.Container)"
        Write-Host "Data: $($entry.Data)"
        Write-Host "DesignMode: $($entry.DesignMode)"
        Write-Host "EntryType: $($entry.EntryType)"
        Write-Host "EventID: $($entry.EventID)"
        Write-Host "Events: $($entry.Events)"
        Write-Host "Index: $($entry.Index)"
        Write-Host "InstanceId: $($entry.InstanceId)"
        Write-Host "MachineName: $($entry.MachineName)"
        Write-Host "Message: $($entry.Message)"
        Write-Host "ReplacementStrings: $($entry.ReplacementStrings)"
        Write-Host "Site: $($entry.Site)"
        Write-Host "Source: $($entry.Source)"
        Write-Host "TimeGenerated: $($entry.TimeGenerated)"
        Write-Host "TimeWritten: $($entry.TimeWritten)"
        Write-Host "UserName: $($entry.UserName)"
    }
}

, который выводит следующие данные:

CanRaiseEvents:
Category: (13824)
CategoryNumber: 13824
Container:
Data:
DesignMode:
EntryType: SuccessAudit
EventID: 5381
Events:
Index: 771286
InstanceId: 5381
MachineName: REDACTED
Message: Vault credentials were read.

Subject:
        Security ID:            S-1-5-26-2325928431-9938217593-9384716351-3004
        Account Name:           redacted
        Account Domain:         REDACTED
        Logon ID:               0x44d9f

This event occurs when a user enumerates stored vault credentials.
ReplacementStrings: S-1-5-21-2356930457-929305828-1234252251-1534 redacted REDACTED 0x3459f 142 6 2019-09-20T23:33:31.671135000Z 15136
Site:
Source: Microsoft-Windows-Security-Auditing
TimeGenerated: 09/24/2019 21:26:27
TimeWritten: 09/24/2019 21:26:27
UserName:

Однако интересующие меня данные отображаются на вкладке «Сведения» средства просмотра событий:

enter image description here

Как получить доступ к данным впанель сведений из объекта System.Diagnostics.EventLogEntry?

Примечание

Указанные события были добавлены в недавнем выпуске Windows 10 (я полагаю, 1903 г.) и связаны с защитником учетных данных Защитника Windows.,Я не могу найти много документации для них, но хорошее видео о том, почему они были добавлены, можно найти здесь: https://www.youtube.com/watch?v=1JJAob5fkWs&t=736s

Ответы [ 3 ]

0 голосов
/ 25 сентября 2019

Хотя у меня нет событий с этими идентификаторами, следующий демонстрационный код должен помочь вам понять.
Используя Get-WinEvent, вы можете получить данные XML следующим образом:

$result = Get-WinEvent -FilterHashtable @{LogName="Security";Id=4624} -MaxEvents 100 | ForEach-Object {
    # convert the event to XML and grab the Event node
    $eventXml = ([xml]$_.ToXml()).Event

    # get the 'TargetDomainName' value and check it does not start with 'NT AUTHORITY'
    $domain = $eventXml.EventData.Data[$dataItems['TargetDomainName']].'#text'
    if ($domain -ne 'NT AUTHORITY' ) {
        [PSCustomObject]@{
            Domain    = $domain
            UserName  = $eventXml.EventData.Data[$dataItems['TargetUserName']].'#text'
            UserSID   = $eventXml.EventData.Data[$dataItems['TargetUserSid']].'#text'
            LogonType = $logonTypes[[int]$eventXml.EventData.Data[$dataItems['LogonType']].'#text'] 
            Date      = [DateTime]$eventXml.System.TimeCreated.SystemTime
            Computer  = $eventXml.System.Computer
        }
    }
}

$result | Format-Table -AutoSize

Надеюсь, что это поможет

0 голосов
/ 26 сентября 2019

Get-EventLog предоставляет вам сообщение журнала событий для события.Данные, которые вы пытаетесь извлечь, являются частью манифеста события и не представлены в сообщении журнала.Чтобы получить эти данные, используйте «Get-WinEvent».

$result = Get-WinEvent -FilterHashtable @{LogName="Security";Id=5381} -MaxEvents 100 | ForEach-Object {
    # convert the event to XML and extract properties
    $eventXml = ([xml]$_.ToXml()).Event
    $domain = $eventXml.EventData.Data[$dataItems['CountOfCredentialsReturned']].'#text'
}

$result | Format-Table -AutoSize
0 голосов
/ 25 сентября 2019

Мне кажется, что информация находится в свойстве сообщения, но у меня нет событий, которые вы ищете.

enter image description here

...