从安全审计事件日志中导出账户名称、域和时间戳

从安全审计事件日志中导出账户名称、域和时间戳

我目前正在通过 powershell 将过去 7 天的安全微软 Windows 安全审计日志导出到 csv。

它能工作,但细节太多,而且格式不正确。例如,从 csv 中,“消息”单元格包含以下内容

“帐户已成功登录。

主题:安全 ID:X 帐户名称:- 帐户域:- 登录 ID:0x0

登录类型:3

模仿等级:模仿

新登录:安全 ID:X 帐户名称:XXX 帐户域:XXX 登录 ID:XXX 登录 GUID:{XXX}

进程信息:进程 ID:0x0 进程名称:-

网络信息:工作站名称:-源网络地址:XXX.XXX源端口:XXX............

现在为了将上述内容转换为 csv,我正在使用这个 powershell 脚本

[xml]$CustomView = @"
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[(EventID=4624 or EventID=4672 or EventID=4648 or EventID=463) and TimeCreated[timediff(@SystemTime) &lt;= 604800000]]] </Select>
  </Query>
</QueryList>
"@

Get-WinEvent -FilterXML $CustomView | Export-CSV "C:\CustomView_$(Get-Date -format "yyyy-MM-DD").csv"

如何导出包含以下列的 csv?

事件 ID、安全 ID、帐户名称、帐户域、登录 ID、登录、创建时间

答案1

事件消息正文中的详细信息存储在事件 XML 中。您可以将事件转换为 XML,然后提取每个 XML 字段。需要记住的是,只有当多个事件 ID 共享一个共同的架构时,您才应该查询它们,否则事件属性在输出中可能不一致。有一篇很好的文章解释了流程和事件架构问题这里

GitHub 上有一个名为获取 WinEventData它为您完成所有繁重的工作。输出包含所有主要事件字段的属性,如机器名称、提供商名称和消息。它还包含所有 XML 事件数据的属性。要使用它,只需将 Get-WinEvent 命令导入 Get-WinEventData,选择所需的属性,然后导出到 CSV。当然,您需要事先导入 Get-WinEventData 函数。

使用示例:

Get-WinEvent -FilterHashtable @{LogName="Security";Id=4624,4672;StartTime=(Get-Date).AddDays(-1)} | Get-WinEventData | Select-Object TimeCreated,Id,EventDataSubjectUserSid,EventDataSubjectUserName,EventDataSubjectDomainName,EventDataSubjectLogonId | Export-CSV "Output.csv" -NoTypeInformation

相关内容