marvioncriddle/Authentication-Artifact-Analysis
GitHub: marvioncriddle/Authentication-Artifact-Analysis
一个基于 Windows 安全事件日志的 DFIR 实战实验,通过分析身份验证失败和账户锁定事件来识别潜在的密码喷洒攻击行为。
Stars: 0 | Forks: 0
# 身份验证取证分析
## 概述
身份验证失败是安全监控中最常见的指标之一。虽然反复的登录失败可能仅仅是由于用户忘记密码造成的,但也可能意味着密码喷洒、暴力破解攻击、凭据过期或服务配置错误。
我们已从模拟的企业环境中提取了一份 Windows 安全事件日志(Security.evtx)供您分析。其中故意生成了登录失败事件,以创建用于调查的真实数据集,让您能够分析这些模式,并判断该行为是正常的用户活动还是潜在的攻击。
在本实验中,您将使用 Windows 安全事件日志中的原生取证工件来调查 Windows 账户锁定问题。您的目标是通过关联身份验证事件来确定所观察到的行为是代表恶意活动还是正常用户行为,并像在真实的数字取证与事件响应(DFIR)调查中那样记录您的发现。
## 场景
一名用户报告说他们的 Windows 账户一整天都在反复被锁定。管理层已要求安全团队确定这些锁定是由正常的用户行为引起的,还是由于对该账户的暴力破解攻击造成的。
作为分配到此案件的 DFIR 分析师,您已获得了保存的身份验证证据。您的任务是分析可用数据,识别发起系统,并根据您的发现提供建议。
## 学习目标
完成本实验后,您应该能够:
- 分析 Windows 身份验证事件
- 调查 Windows 账户锁定
- 解释与身份验证相关的安全事件 ID
- 区分失败和成功的登录尝试
- 识别身份验证尝试的来源
- 关联多个身份验证工件以确定根本原因
- 使用专业的 DFIR 方法论记录调查结果
## 检查的 Windows 工件
本次调查侧重于几个关键的 Windows 安全事件。
|
### 步骤 3:分析失败的身份验证尝试
过滤安全日志以查找事件 ID 4625
事件 ID 4625 = 登录失败事件:
将失败的登录事件导出为 CSV 文件:
```
Get-WinEvent -Path .\Evidence\Security.evtx |
Where-Object {$_.Id -eq 4625} |
Select-Object `
TimeCreated,
@{Name='Username';Expression={$_.Properties[5].Value}},
@{Name='Workstation';Expression={$_.Properties[13].Value}},
@{Name='SourceIP';Expression={$_.Properties[19].Value}},
@{Name='LogonType';Expression={$_.Properties[10].Value}},
@{Name='Status';Expression={$_.Properties[7].Value}},
@{Name='SubStatus';Expression={$_.Properties[9].Value}} |
Export-Csv .\Evidence\FailedLogins.csv -NoTypeInformation
```
确定哪些用户名登录失败:
```
Import-Csv .\Evidence\FailedLogins.csv | Format-Table
$events = Import-Csv .\Evidence\FailedLogins.csv
$events | Group-Object Username | Sort-Object Count -Descending
```
确定失败发生的时间:
```
$events |
Sort-Object TimeCreated |
Select-Object TimeCreated, Username, Workstation, SourceIP, LogonType
```
确定每个用户的失败尝试次数
```
$events | Group-Object Username | Select-Object Name, Count
```
识别状态代码:
```
$events | Group-Object Status | Select-Object Name, Count
```
-1073741715 = Bad username or authentication information. The given credentials aren't correct. This issue might occur due to an incorrect user/password combination or username format
识别子状态代码:
```
$events | Group-Object SubStatus | Select-Object Name, Count
```
-1073741718 = User logon with misspelled or bad password
-1073741724 = 指定的账户不存在
### 步骤 4:分析账户锁定
过滤安全日志以查找事件 ID 4740
事件 ID 4740 = 账户锁定事件:
显示 XML 字段名称以确定哪个用户账户被锁定
```
Get-WinEvent -Path ".\Evidence\Security.evtx" |
Where-Object {$_.Id -eq 4740} |
Select-Object -First 1 |
ForEach-Object {
[xml]$xml = $_.ToXml()
$xml.Event.EventData.Data
}
```
确定用户账户何时被锁定
```
Get-WinEvent -Path ".\Evidence\Security.evtx" |
Where-Object {$_.Id -eq 4740} |
Select-Object TimeCreated
```
## MITRE ATT&CK 映射
|
## 概述
身份验证失败是安全监控中最常见的指标之一。虽然反复的登录失败可能仅仅是由于用户忘记密码造成的,但也可能意味着密码喷洒、暴力破解攻击、凭据过期或服务配置错误。
我们已从模拟的企业环境中提取了一份 Windows 安全事件日志(Security.evtx)供您分析。其中故意生成了登录失败事件,以创建用于调查的真实数据集,让您能够分析这些模式,并判断该行为是正常的用户活动还是潜在的攻击。
在本实验中,您将使用 Windows 安全事件日志中的原生取证工件来调查 Windows 账户锁定问题。您的目标是通过关联身份验证事件来确定所观察到的行为是代表恶意活动还是正常用户行为,并像在真实的数字取证与事件响应(DFIR)调查中那样记录您的发现。
## 场景
一名用户报告说他们的 Windows 账户一整天都在反复被锁定。管理层已要求安全团队确定这些锁定是由正常的用户行为引起的,还是由于对该账户的暴力破解攻击造成的。
作为分配到此案件的 DFIR 分析师,您已获得了保存的身份验证证据。您的任务是分析可用数据,识别发起系统,并根据您的发现提供建议。
## 学习目标
完成本实验后,您应该能够:
- 分析 Windows 身份验证事件
- 调查 Windows 账户锁定
- 解释与身份验证相关的安全事件 ID
- 区分失败和成功的登录尝试
- 识别身份验证尝试的来源
- 关联多个身份验证工件以确定根本原因
- 使用专业的 DFIR 方法论记录调查结果
## 检查的 Windows 工件
本次调查侧重于几个关键的 Windows 安全事件。
| 事件 ID
|描述
| | ----------------- | -------------------------- | |4625
|登录失败尝试
| |4624
|成功登录
| |4740
|账户被锁定
| 主要证据:Security.evtx ## 调查问题 在本次调查中,请回答以下问题: - 哪些用户账户经历了身份验证失败? - 哪些工作站发起了这些尝试? - 哪个源 IP 生成了身份验证请求? - 观察到了哪些状态和子状态代码? - 哪个账户被锁定了? - 哪种 MITRE ATT&CK 技术最符合观察到的活动? - 最可能的根本原因是什么? ## 调查工作流 本次调查遵循企业 DFIR 任务中常用的方法论。 ### 步骤 1:审查证据 您已获得了一份保存的 Windows 安全事件日志(Security.evtx)。 请确保您使用的是此证据文件,而不是实时系统。保持原始证据的完整性是基本的取证原则,它允许调查人员在不改变源数据的情况下重新审视发现。 ### 步骤 2:筛选关键身份验证事件 过滤安全日志以查找与身份验证相关的关键事件 ID ``` Get-WinEvent -Path .\Evidence\Security.evtx | Where-Object {$_.Id -in 4625, 4624, 4740} | Group-Object Id | Sort-Object Count -Descending | Select-Object @{Name='EventID';Expression={$_.Name}}, Count | Format-Table -AutoSize ```
### 步骤 3:分析失败的身份验证尝试
过滤安全日志以查找事件 ID 4625
事件 ID 4625 = 登录失败事件:
将失败的登录事件导出为 CSV 文件:
```
Get-WinEvent -Path .\Evidence\Security.evtx |
Where-Object {$_.Id -eq 4625} |
Select-Object `
TimeCreated,
@{Name='Username';Expression={$_.Properties[5].Value}},
@{Name='Workstation';Expression={$_.Properties[13].Value}},
@{Name='SourceIP';Expression={$_.Properties[19].Value}},
@{Name='LogonType';Expression={$_.Properties[10].Value}},
@{Name='Status';Expression={$_.Properties[7].Value}},
@{Name='SubStatus';Expression={$_.Properties[9].Value}} |
Export-Csv .\Evidence\FailedLogins.csv -NoTypeInformation
```
确定哪些用户名登录失败:
```
Import-Csv .\Evidence\FailedLogins.csv | Format-Table
$events = Import-Csv .\Evidence\FailedLogins.csv
$events | Group-Object Username | Sort-Object Count -Descending
```
确定失败发生的时间:
```
$events |
Sort-Object TimeCreated |
Select-Object TimeCreated, Username, Workstation, SourceIP, LogonType
```
确定每个用户的失败尝试次数
```
$events | Group-Object Username | Select-Object Name, Count
```
识别状态代码:
```
$events | Group-Object Status | Select-Object Name, Count
```
-1073741715 = Bad username or authentication information. The given credentials aren't correct. This issue might occur due to an incorrect user/password combination or username format
识别子状态代码:
```
$events | Group-Object SubStatus | Select-Object Name, Count
```
-1073741718 = User logon with misspelled or bad password
-1073741724 = 指定的账户不存在
### 步骤 4:分析账户锁定
过滤安全日志以查找事件 ID 4740
事件 ID 4740 = 账户锁定事件:
显示 XML 字段名称以确定哪个用户账户被锁定
```
Get-WinEvent -Path ".\Evidence\Security.evtx" |
Where-Object {$_.Id -eq 4740} |
Select-Object -First 1 |
ForEach-Object {
[xml]$xml = $_.ToXml()
$xml.Event.EventData.Data
}
```
确定用户账户何时被锁定
```
Get-WinEvent -Path ".\Evidence\Security.evtx" |
Where-Object {$_.Id -eq 4740} |
Select-Object TimeCreated
```
## MITRE ATT&CK 映射
| 技术
|名称
|理由
| | ----------------- | -------------------------- | ------------- | |T1110.003
|密码喷洒
| 观察到来自单个源工作站针对多个用户账户的多次失败网络身份验证尝试。观察到的行为符合 MITRE ATT&CK 对密码喷洒的定义。 | ## 撰写事件报告 对事件 ID 4625 的分析发现了针对 Sarah、Jonathan 和 df1admin 账户的反复失败网络登录尝试,这些尝试源自 IP 地址 98.122.240.33。观察到的 Logon Type 3 表明,身份验证尝试是通过网络发生的,而不是通过本地控制台访问。主要状态值 -1073741715(十六进制值=0xC000006D)结合子状态 -1073741718(十六进制值=0xC000006A),表明有人使用正确的用户名和错误的密码进行了反复的身份验证尝试。此外,有一个事件包含子状态 -1073741724(十六进制值=0xC0000064),表明存在针对不存在账户的身份验证尝试。 事件 ID 4740 确认 Sarah 账户在 7/1/2026 3:14:50 AM 被锁定。Caller Computer Name 字段识别出 DESKTOP-OUPA0T1 是负责生成锁定事件的系统。同一台工作站也被观察到是针对 Sarah、Jonathan 和 df1admin 账户进行失败身份验证尝试的来源。 基于这些身份验证工件的关联,观察到的活动与密码喷洒攻击一致,其中单个源系统尝试使用一个或多个密码对多个用户账户进行身份验证。虽然诸如端点遥测、网络日志或账户锁定策略配置等额外证据将加强评估,但可用的 Windows 安全事件日志工件与这些发现是一致的。 ## 经验教训 Windows 身份验证工件为确定账户锁定和登录失败活动的原因提供了有价值的证据。通过关联事件 ID 4625、4624 和 4740,调查人员可以重建身份验证行为,区分良性的用户失误和恶意活动,并得出基于证据的结论。 更重要的是,本实验表明,有效的 DFIR 调查依赖于在适当的上下文中关联多个工件,而不是从单一事件得出结论。这种方法论构成了专业 Windows 取证调查的基础,并可直接扩展到企业事件响应任务中。标签:AI合规, Windows事件日志分析, 安全取证, 账号锁定调查, 身份验证分析