htrap001/Active-Directory-Threat-Detection-Lab
GitHub: htrap001/Active-Directory-Threat-Detection-Lab
一个 Active Directory 威胁检测实验室项目,通过模拟 SMB 暴力破解攻击并使用 Splunk SIEM 进行日志采集、归一化与检测分析,展示完整的安全运营检测工程流程。
Stars: 1 | Forks: 0
# Active Directory 威胁检测实验室
一个功能完备的家庭实验室,旨在模拟来自攻击机(Kali Linux)的真实网络攻击,记录目标企业网络(Windows Server 2022 Active Directory 域控制器)上的恶意活动,并使用集中式 SIEM(**Splunk enterprise**)摄取、解析和分析生成的遥测数据。
## 实验室架构与组件
该环境分布在两台物理主机上,以准确模拟网络边界,并利用 **Splunk universal forwarder** 安全地发送事件日志。
**虚拟化:** Oracle virtualbox。
```
[ Kali linux VM ] (Attacker)
│
▼ (SMB brute force attacks)
```
```
[ Windows server 2022 DC ] (Target core)
│
▼ (Splunk universal forwarder)
[ Splunk enterprise ] (SIEM engine)
```
* **SIEM 节点(主机 1 - i5 笔记本电脑):**
* **OS:** Windows 11 home 本地主机
* **部署:** Splunk enterprise 服务器(Indexer & search head)
* **目标与攻击环境(主机 2 - i7 笔记本电脑):**
* **域控制器:** Windows Server 2022 评估副本(Active Directory Services, DNS)。
* **端点遥测代理:** Splunk Universal Forwarder + Microsoft Sysmon。
* **攻击者平台:** 全面装载了网络漏洞利用工具集的 Kali Linux VM。
## 攻击模拟场景
### 阶段 1:高频身份验证滥用(标准暴力破解)
* **目标:** 通过针对目标用户名系统地测试大量潜在密码字符串,来获取对 Active Directory 域账户的未授权访问。
* **执行(在 kali linux 中):** 使用预编译的密码字典列表针对域用户,目标指向 Active Directory SMB 服务。
crackmapexec smb 192.168.0.109 -u /usr/share/wordlists/metasploit/namelist.txt -p 'Password123!'
* **机制:** 随着攻击平台针对域控制器快速循环测试潜在的凭证组合,这会立即产生高密度的身份验证失败激增。
## SIEM 工程与遥测分析
### 检测暴力破解战术
标准的 Windows 事件日志记录将这些恶意访问异常映射到 **Windows Event ID 4625**(账户登录失败)。
在 SMB 攻击发生时,我已经在另一台笔记本电脑(即配备 i5 的那台)上打开了 splunk enterprise。搜索查询:
```
index=wineventlog
```
并且我选择了实时模式。因此,带有事件代码 4625(登录失败尝试)的警报开始大量涌入。
由于不同的摄取 pipeline 会根据日志格式(纯文本与结构化 XML)以独特的方式映射 Windows 变量,因此在 Splunk 文档和一些 Google 搜索的帮助下,我编写了一个搜索查询,将不同的 schema 输出(`IpAddress`、`Source_Network_Address`、`src_ip`)统一标准化为清晰的分析视图。
#### Splunk SPL 查询:
```
index=wineventlog EventCode=4625
| eval Attacker_IP = coalesce(IpAddress, Source_Network_Address, src_ip)
| eval Targeted_User = coalesce(TargetUserName, Account_Name, user)
| stats count min(_time) as first_seen max(_time) as last_seen by Attacker_IP, Targeted_User
| eval first_seen=strftime(first_seen, "%Y-%m-%d %H:%M:%S"), last_seen=strftime(last_seen, "%Y-%m-%d %H:%M:%S")
| sort - count
```
#### 上述搜索查询后捕获的遥测输出:
当暴力破解攻击部署时,Splunk 工程 pipeline 成功地聚合、隔离并突出了威胁行为者的确切特征:
## 实验室优化与加固步骤
1. **Sysmon 集成:** 部署了 Microsoft System Monitor,利用自定义规则集来弥补在身份验证洪流期间发起的进程生成层级和网络钩子相关的可见性盲区。[cite: 1]
2. **字段提取调优:** 在 Splunk 的配置解析层(`props.conf`)中实施了结构化的字段别名规则,以实现数据标准化自动化,而无需依赖手动运行时评估。[cite: 1]
3. **阈值摄取规则:** 配置了警报规则,以便在唯一内部资产于六十秒时间窗口内产生超过二十次登录中断时进行标记。[cite: 1]
## 将其转化为 Splunk dashboard
*作为展示在安全运营、SIEM 工程、日志标准化和 Active Directory 威胁向量方面精通程度的顶点项目而开发。*
## SIEM 工程与遥测分析
### 检测暴力破解战术
标准的 Windows 事件日志记录将这些恶意访问异常映射到 **Windows Event ID 4625**(账户登录失败)。
在 SMB 攻击发生时,我已经在另一台笔记本电脑(即配备 i5 的那台)上打开了 splunk enterprise。搜索查询:
```
index=wineventlog
```
并且我选择了实时模式。因此,带有事件代码 4625(登录失败尝试)的警报开始大量涌入。
由于不同的摄取 pipeline 会根据日志格式(纯文本与结构化 XML)以独特的方式映射 Windows 变量,因此在 Splunk 文档和一些 Google 搜索的帮助下,我编写了一个搜索查询,将不同的 schema 输出(`IpAddress`、`Source_Network_Address`、`src_ip`)统一标准化为清晰的分析视图。
#### Splunk SPL 查询:
```
index=wineventlog EventCode=4625
| eval Attacker_IP = coalesce(IpAddress, Source_Network_Address, src_ip)
| eval Targeted_User = coalesce(TargetUserName, Account_Name, user)
| stats count min(_time) as first_seen max(_time) as last_seen by Attacker_IP, Targeted_User
| eval first_seen=strftime(first_seen, "%Y-%m-%d %H:%M:%S"), last_seen=strftime(last_seen, "%Y-%m-%d %H:%M:%S")
| sort - count
```
#### 上述搜索查询后捕获的遥测输出:
当暴力破解攻击部署时,Splunk 工程 pipeline 成功地聚合、隔离并突出了威胁行为者的确切特征:
## 实验室优化与加固步骤
1. **Sysmon 集成:** 部署了 Microsoft System Monitor,利用自定义规则集来弥补在身份验证洪流期间发起的进程生成层级和网络钩子相关的可见性盲区。[cite: 1]
2. **字段提取调优:** 在 Splunk 的配置解析层(`props.conf`)中实施了结构化的字段别名规则,以实现数据标准化自动化,而无需依赖手动运行时评估。[cite: 1]
3. **阈值摄取规则:** 配置了警报规则,以便在唯一内部资产于六十秒时间窗口内产生超过二十次登录中断时进行标记。[cite: 1]
## 将其转化为 Splunk dashboard
*作为展示在安全运营、SIEM 工程、日志标准化和 Active Directory 威胁向量方面精通程度的顶点项目而开发。*