rashedtech1/Adversary-Emulation-Detection-Lab
GitHub: rashedtech1/Adversary-Emulation-Detection-Lab
一个基于 Splunk 的蓝队对手模拟与检测工程实验室,通过 Atomic Red Team 执行攻击技术并开发对应的检测规则。
Stars: 0 | Forks: 0
# 网络安全对手模拟与检测实验室
## 概述
本仓库记录了一个专注于对手模拟、安全监控和检测工程的动手网络安全实验室,该实验室使用 **Splunk Enterprise** 实现。本项目旨在模拟真实世界的攻击技术,从 Windows 系统收集主机遥测数据,并开发能够通过 Splunk 搜索处理语言 (SPL) 识别恶意活动的检测逻辑。
实验室环境由一台充当目标主机的 Windows Server 2019 虚拟机和一台托管 Splunk Enterprise 服务器的 Kali Linux 虚拟机组成。Windows 事件使用 **Sysmon** 收集,并通过 **Splunk Universal Forwarder** 转发到 Splunk,为安全监控、威胁狩猎和事件调查提供高保真遥测数据。
为了模拟对手行为,针对 Windows Server 执行了 **Atomic Red Team** 测试,涵盖了 **MITRE ATT&CK 框架**中的多种战术和技术。通过开发相应的 SPL 检测查询来验证每次攻击,展示了完整的检测工程生命周期——从攻击执行到日志分析和威胁检测。
本实验室的主要目标是通过了解攻击者行为、提高日志可见性以及针对常见攻击技术创建可靠的检测,来增强蓝队的能力。
# 系统信息
以下硬件规格用于构建本实验室的虚拟化环境。这些资源提供了足够的性能来同时运行多个虚拟机,同时保持稳定的 Splunk 索引和日志分析。
| 组件 | 规格 |
|-----------|---------------|
| **CPU** | Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz (睿频最高可达 1.90 GHz) |
| **内存 (RAM)** | 16 GB |
| **存储** | 256 GB SSD |
| **主板** | HP ZBook 14u G5 |
| **宿主操作系统** | Microsoft Windows 11 Pro |
# 网络拓扑图
下图说明了实验室环境的总体架构。两台虚拟机通过 **NAT 网络**连接,允许 Windows Server 与托管 Splunk Enterprise 的 Kali Linux 系统进行安全通信。
所有 Windows 安全事件均使用 Splunk Universal Forwarder 转发到 Splunk 服务器,从而实现集中的日志收集、监控和检测。
# 虚拟机配置
实验室环境由两台虚拟机组成,每台虚拟机都分配了专门的资源,以支持对手模拟、日志收集和安全监控。
| 虚拟机 | CPU (核心数) | 内存 (GB) | 网络类型 |
|-----------------|------------:|---------:|--------------|
| Kali Linux | 2 | 2 | NAT |
| Windows Server 2019 | 2 | 2 | NAT |
## Kali Linux 机器
Kali Linux 虚拟机在本实验室中充当 **安全运营中心 (SOC) 监控服务器**。它托管 **Splunk Enterprise**,通过 Splunk Universal Forwarder 接收来自 Windows Server 的遥测数据,对传入的事件进行索引,并提供用于日志分析、威胁狩猎和检测工程的平台。
## Windows Server 2019 机器
Windows Server 2019 虚拟机在此实验室环境中充当 **目标端点**。它用于执行对手模拟场景、生成 Windows 和 Sysmon 遥测数据,并验证蓝队的检测能力。此系统上生成的所有安全事件都通过 Splunk Universal Forwarder 转发到 Splunk Enterprise 服务器,以进行集中监控和分析。
# Splunk Enterprise 安装说明
本部分涵盖了 **Splunk Enterprise** 的安装和初始配置,它作为集中式的安全信息和事件管理 (SIEM) 平台,用于收集、索引、搜索和分析整个实验室中生成的安全日志。
## 下载 Splunk Enterprise (版本 10.2.2)
从 Splunk 官方网站下载 **Splunk Enterprise (版本 10.2.2)** 的最新兼容版本。
## 安装 Splunk Enterprise
使用下载的安装包在 Kali Linux 虚拟机上安装 Splunk Enterprise。此系统将作为集中式 SIEM 服务器,负责接收、索引和分析 Windows 安全遥测数据。
## 启动 Splunk Enterprise
安装完成后,启动 Splunk 服务并访问 Splunk Web 界面。通过配置管理员帐户并验证 Splunk 实例是否成功运行来完成初始设置。
# Splunk Universal Forwarder 配置
为了收集 Windows 事件日志并将其转发到 Splunk Enterprise,需要在 Windows Server 上安装 **Splunk Universal Forwarder**。此轻量级代理持续将 Windows 事件日志和 Sysmon 遥测数据转发到集中式 Splunk 服务器。
## 下载 Splunk Universal Forwarder
为 Windows Server 操作系统下载适当版本的 Splunk Universal Forwarder。
## 安装 Splunk Universal Forwarder
使用默认安装向导安装 Universal Forwarder。在安装过程中,配置 forwarder 以便与 Splunk Enterprise 部署进行通信。
## 配置 Splunk Receiver
通过启用接收端口 **9997**,配置 Splunk Enterprise 服务器以监听来自 forwarder 的传入数据。
## 确定 Splunk 服务器 IP 地址
确定分配给 Kali Linux 虚拟机的 IP 地址。Windows Server 将使用此地址与 Splunk Deployment Server 建立通信。
**Splunk 服务器 IP 地址:** `192.168.65.129`
## 配置 Deployment Server
使用以下参数配置 Splunk Universal Forwarder 以连接到 Splunk Deployment Server:
- **主机:** `192.168.65.129`
- **管理端口:** `8089`
这实现了集中的配置管理,并简化了将应用程序和配置更新部署到 forwarder 的过程。
## 验证 Forwarder 连接性
完成配置后,验证 Splunk Universal Forwarder 是否已成功连接并正在与 Splunk Enterprise 服务器进行活动通信。
# Sysmon 安装说明
为了提高端点可见性并增强检测能力,在 Windows Server 上部署了 **Sysmon (System Monitor)**。Sysmon 生成详细的遥测数据,包括进程创建、网络连接、注册表修改、驱动程序加载和文件创建事件,与原生的 Windows 事件日志相比,这些数据显著提高了威胁检测能力。
## 下载并解压 Sysmon
从 Microsoft 的 Sysinternals Suite 下载 Sysmon 包,并将文件解压到以下目录:
```
C:\Tools\Sysmon
```
此目录将包含 Sysmon 可执行文件及其安装期间使用的配置文件。
## 配置 Sysmon 配置文件
为了确保 Sysmon 捕获有意义的安全遥测数据,请在 Sysmon 可执行文件所在的同一目录中保存一个 Sysmon 配置文件。该配置定义了应监视和记录哪些事件,例如进程创建、网络连接、注册表修改、驱动程序加载、文件创建以及其他与安全相关的活动。
## 安装 Sysmon
使用上一步中准备的配置文件安装 Sysmon。在安装过程中,Sysmon 将自身注册为 Windows 服务,并根据指定的配置立即开始收集端点遥测数据。
## 验证 Sysmon 安装
安装完成后,验证 Sysmon 服务是否成功运行并正在主动生成 Windows 事件日志。这确认了正在收集端点遥测数据并准备将其转发到 Splunk。
## 为 Sysmon 配置 Splunk Universal Forwarder
为了将 Sysmon 遥测数据摄取到 Splunk Enterprise 中,请为 Splunk Universal Forwarder 创建一个自定义的本地应用程序,并配置所需的 `inputs.conf` 文件。
创建以下目录结构:
```
C:\Program Files\SplunkUniversalForwarder\etc\apps\TA-local-sysmon\local\
```
然后在 `local` 目录中创建 `inputs.conf` 文件,以定义将转发到 Splunk 的 Windows 事件日志输入。
## 重启 Splunk Universal Forwarder
更新配置后,重启 Splunk Universal Forwarder 服务以应用新设置,并开始将 Sysmon 事件转发到 Splunk Enterprise 服务器。
## 在 Splunk 中验证事件摄取
Forwarder 重启后,确认 Windows 事件日志和 Sysmon 遥测数据已成功在 Splunk 中建立索引。
在本实验中,所有 Windows 事件都存储在自定义的 **`win`** 索引中,允许在威胁狩猎和检测工程练习期间搜索、分析和关联安全事件。
## 启用额外的 Windows 事件日志记录
为了提高整个 Windows 环境的可见性,启用了几个高价值事件通道,这些通道为 PowerShell 活动、任务计划程序操作和 Microsoft Defender 事件提供遥测数据。
这些日志通过记录通常与执行、持久化、权限提升和防御规避技术相关的攻击者行为,显著增强了检测能力。
```
wevtutil sl "Microsoft-Windows-PowerShell/Operational" /e:true
wevtutil sl "Microsoft-Windows-TaskScheduler/Operational" /e:true
wevtutil sl "Microsoft-Windows-Windows Defender/Operational" /e:true
```
## 安装 Splunk Add-on for Sysmon
安装 **Splunk Add-on for Sysmon** 以确保在 Splunk Enterprise 中正确解析 Sysmon 事件。该附加组件提供字段提取、事件规范化和公共信息模型 (CIM) 兼容性,使搜索、仪表板和检测查询更加可靠且更易于开发。
# 安装 Atomic Red Team
## 安装 Atomic Red Team 框架
Atomic Red Team 是一个开源的对手模拟框架,提供直接映射到 MITRE ATT&CK 框架的小型且高度专注的测试。这些测试使防御者能够安全地模拟攻击者的技术并验证其检测规则的有效性。
执行以下 PowerShell 命令以安装所需的模块并下载 Atomic Red Team 测试库。
```
[Net.ServicePointManager]::SecurityProtocol =[Net.SecurityProtocolType]::Tls12
Set-ExecutionPolicy Bypass -Scope Process -Force
Install-Module -Name invoke-atomicredteam,powershell-yaml -Scope CurrentUser -Force
IEX (IWR 'https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/install-atomicredteam.ps1' -UseBasicParsing)
Install-AtomicRedTeam -getAtomics
Import-Module Invoke-AtomicRedTeam
```
## 导入模块并验证安装
安装完成后,导入 **Invoke-AtomicRedTeam** 模块,指定下载的 Atomic 测试的位置,并验证框架是否已成功安装。
`Get-Command Invoke-AtomicTest` 命令确认模块已正确加载,并且 Atomic Red Team 命令可用于对手模拟。
```
Set-ExecutionPolicy Bypass -Scope Process -Force
Import-Module "C:\AtomicRedTeam\invoke-atomicredteam\Invoke-AtomicRedTeam.psd1" -Force
$PSDefaultParameterValues = @{
"Invoke-AtomicTest:PathToAtomicsFolder" = "C:\AtomicRedTeam\atomics"
}
Get-Command Invoke-AtomicTest
```
# 对手模拟
完成实验室环境设置后,下一阶段将重点放在使用 **Atomic Red Team** 进行**对手模拟**上。每个 Atomic 测试都映射到 **MITRE ATT&CK 框架**,并执行以针对 Windows Server 模拟真实的攻击者行为。
对于每种技术,根据实验室要求选择最合适的 Atomic 测试。成功执行后,生成的遥测数据将由 **Sysmon** 收集,通过 **Splunk Universal Forwarder** 转发,并在 **Splunk Enterprise** 中建立索引,用于随后的威胁狩猎和检测工程。
# T1053.005 (持久化) | 计划任务
**目标:** 创建一个定期执行隐藏脚本的计划任务,以模拟对手常用的持久化机制。
## 查看可用的 Atomic 测试
在执行攻击之前,查看与 **MITRE ATT&CK 技术 T1053.005 (计划任务)** 相关的可用 Atomic Red Team 测试。
## 执行选定的 Atomic 测试
在可用选项中,**Atomic Test 8 (T1053.005-8)** 通过从启用了 **Hidden** 属性的 XML 文件导入计划任务,最符合实验室目标。这有效地模拟了一种持久化技术,即计划任务在例行检查中保持隐藏。
执行 Atomic 测试并验证其是否成功完成。
# T1218.005 (防御规避) | MSHTA
**目标:** 使用 **mshta.exe** 执行恶意的远程 `.hta` 文件,以模拟绕过传统应用程序控制机制的防御规避技术。
## 查看可用的 Atomic 测试
查看可用于 **MITRE ATT&CK 技术 T1218.005 (MSHTA)** 的所有 Atomic Red Team 测试。
## 执行选定的 Atomic 测试
根据实验室目标,**Atomic Test 3 (T1218.005-3)** 通过使用 **mshta.exe** 执行远程 HTA payload,最能代表预期的攻击场景。这种技术经常被威胁行为者滥用,以规避应用程序控制策略并执行恶意代码。
# T1003.001 (凭据访问) | LSASS 内存转储
**目标:** 使用 **ProcDump** 转储 **本地安全机构子系统服务 (LSASS)** 的内存,模拟凭据窃取。
## 查看可用的 Atomic 测试
查看映射到 **MITRE ATT&CK 技术 T1003.001 (LSASS 内存)** 的可用 Atomic Red Team 测试。
## 执行选定的 Atomic 测试
**Atomic Test 1 (T1003.001-1)** 通过使用 **ProcDump** 访问并转储 LSASS 进程的内存,与实验室目标直接一致。这种技术被攻击者广泛用于获取存储在系统内存中的凭据。
执行测试并验证攻击是否成功完成。
# T1059.001 (执行) | PowerShell
**目标:** 通过下载并执行远程脚本来模拟恶意的 PowerShell 活动。
## 查看用的 Atomic 测试
查看可用于 **MITRE ATT&CK 技术 T1059.001 (PowerShell)** 的 Atomic Red Team 测试。
## 执行选定的 Atomic 测试
**Atomic Test 6** 和 **Atomic Test 8** 都适用于此场景。但是,**Atomic Test 6** 完全依赖原生的 PowerShell 功能,使其成为在不引入额外依赖的情况下演示基于 PowerShell 的执行技术的更合适选择。
执行 **Atomic Test 6** 并验证命令是否成功执行。
# T1112 (防御规避) | 修改注册表
**目标:** 模拟修改与 Windows Defender 相关的注册表设置的尝试,以规避端点安全控制。
## 查看可用的 Atomic 测试
查看映射到 **MITRE ATT&CK 技术 T1112 (修改注册表)** 的可用 Atomic Red Team 测试。
## 执行选定的 Atomic 测试
为了模拟多种 Defender 修改场景,执行了以下 Atomic 测试:
- **T1112-38** – 抑制 Windows Defender 通知
- **T1112-51** – 禁用 Windows Defender 通知
- **T1112-56** – 篡改 Windows Defender 保护
这些测试模拟了对手在试图减少端点可见性和绕过安全控制时常用的防御规避技术。
## 执行结果
**T1112-38** 和 **T1112-51** 均成功完成,并按预期修改了 Defender 通知设置。
**T1112-56** 被 **Windows 安全中心**阻止,因为 **防篡改保护** 阻止了此修改。但是,由于之前的两个 Atomic 测试已经抑制了 Defender 通知,因此在尝试篡改操作期间未显示任何安全通知。
此行为证明了 Windows 防篡改保护的有效性,同时也凸显了攻击者如何将多种技术结合起来,在尝试进行更高权限的安全修改之前降低端点的可见性。
# 日志分析
在成功收集 Windows 和 Sysmon 遥测数据后,下一阶段重点放在使用 Splunk Enterprise 进行**日志分析**和**检测工程**上。
由于 **Splunk Add-on for Sysmon** 已经安装,必须将其启用,以便 Splunk 能够正确解析、规范化和提取 Sysmon 事件中的字段。这显著提高了搜索准确性,并简化了检测查询的开发。
导航至:
**Apps → Manage Apps → Splunk Add-on for Sysmon → Edit → Visible (Yes)**
# 蓝队检测工程
以下检测查询是为了识别在 Atomic Red Team 模拟期间执行的对手活动而开发的。
每个检测都映射到其相应的 **MITRE ATT&CK 技术**,并旨在使用由 Splunk Universal Forwarder 收集的 **Sysmon 遥测数据**来识别关键的攻击者行为。
这些检测侧重于高保真指标,例如进程创建、命令行参数、父子进程关系、注册表修改和进程访问事件。目的是演示如何利用端点遥测数据从蓝队的角度检测真实世界的攻击技术。
## 1. T1053.005 (持久化) | 计划任务
### 检测策略
此检测利用 **Sysmon Event ID 1 (进程创建)** 来识别负责创建或修改计划任务的 PowerShell 进程。
该查询搜索常见的计划任务创建命令,例如 **Register-ScheduledTask**、**New-ScheduledTask**、**Set-ScheduledTask** 以及基于 XML 的任务导入。这些行为通常与攻击者的持久化技术相关联。
```
index="win" ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=1 OR EventID=1)
(Image="*\\powershell.exe" OR Image="*\\pwsh.exe")
(
CommandLine="*Register-ScheduledTask*"
OR CommandLine="*New-ScheduledTask*"
OR CommandLine="*Set-ScheduledTask*"
OR CommandLine="*-Xml*"
OR CommandLine="*ScheduledTask*"
OR CommandLine="*TaskScheduler*"
)
| eval Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval Process_Name=mvindex(split(Image,"\\"),-1)
| eval Command_Line=CommandLine
| table Time host User EventCode EventID Process_Name Image Command_Line ParentImage ParentCommandLine ProcessId ParentProcessId
```
### 检测结果
以下搜索结果确认已通过 Sysmon 进程创建遥测数据成功检测到计划任务创建活动。
**证明**
## 2. T1218.005 (防御规避) | MSHTA
### 检测策略
此检测使用 **Sysmon Event ID 1 (进程创建)** 来识别 **mshta.exe** 的执行情况,这是一个经常被攻击者滥用以执行远程或本地 HTA payload 的合法 Windows 二进制文件。
该查询搜索可疑的命令行指标,例如远程 HTTP/HTTPS URL、HTA 文件、VBScript 和 JavaScript 执行。
```
index=win ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=1 OR EventID=1)
(Image="*\\mshta.exe" OR OriginalFileName="MSHTA.EXE")
(
CommandLine="*http://*"
OR CommandLine="*https://*"
OR CommandLine="*.hta*"
OR CommandLine="*vbscript:*"
OR CommandLine="*javascript:*"
)
| eval Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval Process_Name=mvindex(split(Image,"\\"),-1)
| eval Command_Line=CommandLine
| table Time host User EventCode EventID Process_Name Image Command_Line ParentImage ParentCommandLine ProcessId ParentProcessId
```
### 检测结果
该检测成功识别了 **mshta.exe** 的执行以及相关的恶意命令行。
**证明**
## 3. T1003.001 (凭据访问) | LSASS 内存转储
### 检测策略
凭据转储通常涉及进程获得对 **lsass.exe** 的特权访问。
此检测主要依赖 **Sysmon Event ID 10 (进程访问)** 来识别试图访问 LSASS 内存的进程。由于 Event ID 10 并不总是包含完整的进程创建信息,因此该查询使用 **Process GUID** 将事件与 **Sysmon Event ID 1** 进行关联。
这种关联为以下内容提供了完整的可见性:
- 进程名
- 命令行
- 父进程
- 执行时间
- 授予的访问权限
使得该检测在事件调查期间显著更加有用。
```
index=win ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=10 OR EventID=10)
TargetImage="*\\lsass.exe"
(
SourceImage="*\\procdump.exe"
OR SourceImage="*\\procdump64.exe"
OR GrantedAccess="0x1fffff"
OR GrantedAccess="0x1010"
OR GrantedAccess="0x1410"
OR GrantedAccess="0x143a"
)
| eval Access_Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval ProcessGuid=coalesce(SourceProcessGuid, SourceProcessGUID, source_process_guid)
| eval Event10_Process_Path=coalesce(SourceImage, source_image)
| eval Event10_Process_Name=mvindex(split(Event10_Process_Path,"\\"),-1)
| join type=left ProcessGuid [
search index=win ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=1 OR EventID=1)
| eval ProcessGuid=coalesce(ProcessGuid, process_guid)
| eval Created_Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval Created_Process_Name=mvindex(split(Image,"\\"),-1)
| rename Image as Created_Image
| rename CommandLine as Created_CommandLine
| table ProcessGuid Created_Time Created_Process_Name Created_Image Created_CommandLine ParentImage ParentCommandLine ProcessId ParentProcessId
]
| eval Time=coalesce(Created_Time, Access_Time)
| eval Process_Name=coalesce(Created_Process_Name, Event10_Process_Name)
| eval Image=coalesce(Created_Image, Event10_Process_Path)
| eval Command_Line=coalesce(Created_CommandLine, CommandLine, "Command line not stored in Event ID 10; correlated with Event ID 1 if available")
| table Time host User EventCode EventID Process_Name Image Command_Line SourceImage TargetImage GrantedAccess CallTrace ParentImage ParentCommandLine ProcessId ParentProcessId ProcessGuid
```
### 检测结果
该查询成功关联了进程创建和进程访问事件,提供了 LSASS 凭据转储活动的完整证据。
**证明**
## 4. T1059.001 (执行) | PowerShell
### 检测策略
此检测使用 **Sysmon Event ID 1** 来识别同时涉及 **Web 下载**和**代码执行**的可疑 PowerShell 执行。
该查询搜索与下载相关的关键字(例如 **Invoke-WebRequest**、**DownloadString**、**Net.WebClient** 和 **curl**),随后是执行指标,例如 **Invoke-Expression (IEX)**、**EncodedCommand** 和 **ExecutionPolicy Bypass**。
与独立搜索任一行为相比,将两种行为结合可显著减少误报。
```
index=win ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=1 OR EventID=1)
(Image="*\\powershell.exe" OR Image="*\\pwsh.exe")
(
CommandLine="*http://*"
OR CommandLine="*https://*"
OR CommandLine="*Invoke-WebRequest*"
OR CommandLine="*iwr*"
OR CommandLine="*wget*"
OR CommandLine="*curl*"
OR CommandLine="*DownloadString*"
OR CommandLine="*DownloadFile*"
OR CommandLine="*Net.WebClient*"
OR CommandLine="*System.Net.WebClient*"
)
(
CommandLine="*iex*"
OR CommandLine="*Invoke-Expression*"
OR CommandLine="*-enc*"
OR CommandLine="*-EncodedCommand*"
OR CommandLine="*-ExecutionPolicy Bypass*"
OR CommandLine="*-nop*"
OR CommandLine="*-NoProfile*"
)
| eval Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval Process_Name=mvindex(split(Image,"\\"),-1)
| eval Command_Line=CommandLine
| table Time host User EventCode EventID Process_Name Image Command_Line ParentImage ParentCommandLine ProcessId ParentProcessId
```
### 检测结果
该检测成功识别了 PowerShell 下载远程内容并在目标端点上执行它的行为。
**证明**
## 5. T1112 (防御规避) | 修改注册表
### 检测策略
此检测监视 **Sysmon Event ID 1** 以识别针对 Microsoft Defender 配置的注册表修改尝试。
该查询在检查与 Defender 设置相关的命令行参数时,会搜索诸如 **reg.exe** 和 **PowerShell** 之类的进程,包括 **TamperProtection**、**DisableRealtimeMonitoring**、**DisableNotifications** 和 **Set-MpPreference**。
监视这些行为使防御者能够在发生后续恶意活动之前识别出削弱或禁用端点保护的尝试。
```
index=win ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=1 OR EventID=1)
(
Image="*\\reg.exe"
OR Image="*\\powershell.exe"
OR Image="*\\pwsh.exe"
)
(
CommandLine="*Windows Defender*"
OR CommandLine="*DisableAntiSpyware*"
OR CommandLine="*TamperProtection*"
OR CommandLine="*DisableNotifications*"
OR CommandLine="*Notification_Suppress*"
OR CommandLine="*DisableRealtimeMonitoring*"
OR CommandLine="*DisableBehaviorMonitoring*"
OR CommandLine="*DisableOnAccessProtection*"
OR CommandLine="*Set-MpPreference*"
OR CommandLine="*Add-MpPreference*"
)
| eval Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval Process_Name=mvindex(split(Image,"\\"),-1)
| eval Command_Line=CommandLine
| table Time host User EventCode EventID Process_Name Image Command_Line ParentImage ParentCommandLine ProcessId ParentProcessId
```
**证明:**

# 虚拟机配置
实验室环境由两台虚拟机组成,每台虚拟机都分配了专门的资源,以支持对手模拟、日志收集和安全监控。
| 虚拟机 | CPU (核心数) | 内存 (GB) | 网络类型 |
|-----------------|------------:|---------:|--------------|
| Kali Linux | 2 | 2 | NAT |
| Windows Server 2019 | 2 | 2 | NAT |
## Kali Linux 机器
Kali Linux 虚拟机在本实验室中充当 **安全运营中心 (SOC) 监控服务器**。它托管 **Splunk Enterprise**,通过 Splunk Universal Forwarder 接收来自 Windows Server 的遥测数据,对传入的事件进行索引,并提供用于日志分析、威胁狩猎和检测工程的平台。
## Windows Server 2019 机器
Windows Server 2019 虚拟机在此实验室环境中充当 **目标端点**。它用于执行对手模拟场景、生成 Windows 和 Sysmon 遥测数据,并验证蓝队的检测能力。此系统上生成的所有安全事件都通过 Splunk Universal Forwarder 转发到 Splunk Enterprise 服务器,以进行集中监控和分析。
# Splunk Enterprise 安装说明
本部分涵盖了 **Splunk Enterprise** 的安装和初始配置,它作为集中式的安全信息和事件管理 (SIEM) 平台,用于收集、索引、搜索和分析整个实验室中生成的安全日志。
## 下载 Splunk Enterprise (版本 10.2.2)
从 Splunk 官方网站下载 **Splunk Enterprise (版本 10.2.2)** 的最新兼容版本。
## 安装 Splunk Enterprise
使用下载的安装包在 Kali Linux 虚拟机上安装 Splunk Enterprise。此系统将作为集中式 SIEM 服务器,负责接收、索引和分析 Windows 安全遥测数据。
## 启动 Splunk Enterprise
安装完成后,启动 Splunk 服务并访问 Splunk Web 界面。通过配置管理员帐户并验证 Splunk 实例是否成功运行来完成初始设置。
# Splunk Universal Forwarder 配置
为了收集 Windows 事件日志并将其转发到 Splunk Enterprise,需要在 Windows Server 上安装 **Splunk Universal Forwarder**。此轻量级代理持续将 Windows 事件日志和 Sysmon 遥测数据转发到集中式 Splunk 服务器。
## 下载 Splunk Universal Forwarder
为 Windows Server 操作系统下载适当版本的 Splunk Universal Forwarder。
## 安装 Splunk Universal Forwarder
使用默认安装向导安装 Universal Forwarder。在安装过程中,配置 forwarder 以便与 Splunk Enterprise 部署进行通信。
## 配置 Splunk Receiver
通过启用接收端口 **9997**,配置 Splunk Enterprise 服务器以监听来自 forwarder 的传入数据。
## 确定 Splunk 服务器 IP 地址
确定分配给 Kali Linux 虚拟机的 IP 地址。Windows Server 将使用此地址与 Splunk Deployment Server 建立通信。
**Splunk 服务器 IP 地址:** `192.168.65.129`
## 配置 Deployment Server
使用以下参数配置 Splunk Universal Forwarder 以连接到 Splunk Deployment Server:
- **主机:** `192.168.65.129`
- **管理端口:** `8089`
这实现了集中的配置管理,并简化了将应用程序和配置更新部署到 forwarder 的过程。
## 验证 Forwarder 连接性
完成配置后,验证 Splunk Universal Forwarder 是否已成功连接并正在与 Splunk Enterprise 服务器进行活动通信。
# Sysmon 安装说明
为了提高端点可见性并增强检测能力,在 Windows Server 上部署了 **Sysmon (System Monitor)**。Sysmon 生成详细的遥测数据,包括进程创建、网络连接、注册表修改、驱动程序加载和文件创建事件,与原生的 Windows 事件日志相比,这些数据显著提高了威胁检测能力。
## 下载并解压 Sysmon
从 Microsoft 的 Sysinternals Suite 下载 Sysmon 包,并将文件解压到以下目录:
```
C:\Tools\Sysmon
```
此目录将包含 Sysmon 可执行文件及其安装期间使用的配置文件。
## 配置 Sysmon 配置文件
为了确保 Sysmon 捕获有意义的安全遥测数据,请在 Sysmon 可执行文件所在的同一目录中保存一个 Sysmon 配置文件。该配置定义了应监视和记录哪些事件,例如进程创建、网络连接、注册表修改、驱动程序加载、文件创建以及其他与安全相关的活动。
## 安装 Sysmon
使用上一步中准备的配置文件安装 Sysmon。在安装过程中,Sysmon 将自身注册为 Windows 服务,并根据指定的配置立即开始收集端点遥测数据。
## 验证 Sysmon 安装
安装完成后,验证 Sysmon 服务是否成功运行并正在主动生成 Windows 事件日志。这确认了正在收集端点遥测数据并准备将其转发到 Splunk。
## 为 Sysmon 配置 Splunk Universal Forwarder
为了将 Sysmon 遥测数据摄取到 Splunk Enterprise 中,请为 Splunk Universal Forwarder 创建一个自定义的本地应用程序,并配置所需的 `inputs.conf` 文件。
创建以下目录结构:
```
C:\Program Files\SplunkUniversalForwarder\etc\apps\TA-local-sysmon\local\
```
然后在 `local` 目录中创建 `inputs.conf` 文件,以定义将转发到 Splunk 的 Windows 事件日志输入。
## 重启 Splunk Universal Forwarder
更新配置后,重启 Splunk Universal Forwarder 服务以应用新设置,并开始将 Sysmon 事件转发到 Splunk Enterprise 服务器。
## 在 Splunk 中验证事件摄取
Forwarder 重启后,确认 Windows 事件日志和 Sysmon 遥测数据已成功在 Splunk 中建立索引。
在本实验中,所有 Windows 事件都存储在自定义的 **`win`** 索引中,允许在威胁狩猎和检测工程练习期间搜索、分析和关联安全事件。
## 启用额外的 Windows 事件日志记录
为了提高整个 Windows 环境的可见性,启用了几个高价值事件通道,这些通道为 PowerShell 活动、任务计划程序操作和 Microsoft Defender 事件提供遥测数据。
这些日志通过记录通常与执行、持久化、权限提升和防御规避技术相关的攻击者行为,显著增强了检测能力。
```
wevtutil sl "Microsoft-Windows-PowerShell/Operational" /e:true
wevtutil sl "Microsoft-Windows-TaskScheduler/Operational" /e:true
wevtutil sl "Microsoft-Windows-Windows Defender/Operational" /e:true
```
## 安装 Splunk Add-on for Sysmon
安装 **Splunk Add-on for Sysmon** 以确保在 Splunk Enterprise 中正确解析 Sysmon 事件。该附加组件提供字段提取、事件规范化和公共信息模型 (CIM) 兼容性,使搜索、仪表板和检测查询更加可靠且更易于开发。
# 安装 Atomic Red Team
## 安装 Atomic Red Team 框架
Atomic Red Team 是一个开源的对手模拟框架,提供直接映射到 MITRE ATT&CK 框架的小型且高度专注的测试。这些测试使防御者能够安全地模拟攻击者的技术并验证其检测规则的有效性。
执行以下 PowerShell 命令以安装所需的模块并下载 Atomic Red Team 测试库。
```
[Net.ServicePointManager]::SecurityProtocol =[Net.SecurityProtocolType]::Tls12
Set-ExecutionPolicy Bypass -Scope Process -Force
Install-Module -Name invoke-atomicredteam,powershell-yaml -Scope CurrentUser -Force
IEX (IWR 'https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/install-atomicredteam.ps1' -UseBasicParsing)
Install-AtomicRedTeam -getAtomics
Import-Module Invoke-AtomicRedTeam
```
## 导入模块并验证安装
安装完成后,导入 **Invoke-AtomicRedTeam** 模块,指定下载的 Atomic 测试的位置,并验证框架是否已成功安装。
`Get-Command Invoke-AtomicTest` 命令确认模块已正确加载,并且 Atomic Red Team 命令可用于对手模拟。
```
Set-ExecutionPolicy Bypass -Scope Process -Force
Import-Module "C:\AtomicRedTeam\invoke-atomicredteam\Invoke-AtomicRedTeam.psd1" -Force
$PSDefaultParameterValues = @{
"Invoke-AtomicTest:PathToAtomicsFolder" = "C:\AtomicRedTeam\atomics"
}
Get-Command Invoke-AtomicTest
```
# 对手模拟
完成实验室环境设置后,下一阶段将重点放在使用 **Atomic Red Team** 进行**对手模拟**上。每个 Atomic 测试都映射到 **MITRE ATT&CK 框架**,并执行以针对 Windows Server 模拟真实的攻击者行为。
对于每种技术,根据实验室要求选择最合适的 Atomic 测试。成功执行后,生成的遥测数据将由 **Sysmon** 收集,通过 **Splunk Universal Forwarder** 转发,并在 **Splunk Enterprise** 中建立索引,用于随后的威胁狩猎和检测工程。
# T1053.005 (持久化) | 计划任务
**目标:** 创建一个定期执行隐藏脚本的计划任务,以模拟对手常用的持久化机制。
## 查看可用的 Atomic 测试
在执行攻击之前,查看与 **MITRE ATT&CK 技术 T1053.005 (计划任务)** 相关的可用 Atomic Red Team 测试。
## 执行选定的 Atomic 测试
在可用选项中,**Atomic Test 8 (T1053.005-8)** 通过从启用了 **Hidden** 属性的 XML 文件导入计划任务,最符合实验室目标。这有效地模拟了一种持久化技术,即计划任务在例行检查中保持隐藏。
执行 Atomic 测试并验证其是否成功完成。
# T1218.005 (防御规避) | MSHTA
**目标:** 使用 **mshta.exe** 执行恶意的远程 `.hta` 文件,以模拟绕过传统应用程序控制机制的防御规避技术。
## 查看可用的 Atomic 测试
查看可用于 **MITRE ATT&CK 技术 T1218.005 (MSHTA)** 的所有 Atomic Red Team 测试。
## 执行选定的 Atomic 测试
根据实验室目标,**Atomic Test 3 (T1218.005-3)** 通过使用 **mshta.exe** 执行远程 HTA payload,最能代表预期的攻击场景。这种技术经常被威胁行为者滥用,以规避应用程序控制策略并执行恶意代码。
# T1003.001 (凭据访问) | LSASS 内存转储
**目标:** 使用 **ProcDump** 转储 **本地安全机构子系统服务 (LSASS)** 的内存,模拟凭据窃取。
## 查看可用的 Atomic 测试
查看映射到 **MITRE ATT&CK 技术 T1003.001 (LSASS 内存)** 的可用 Atomic Red Team 测试。
## 执行选定的 Atomic 测试
**Atomic Test 1 (T1003.001-1)** 通过使用 **ProcDump** 访问并转储 LSASS 进程的内存,与实验室目标直接一致。这种技术被攻击者广泛用于获取存储在系统内存中的凭据。
执行测试并验证攻击是否成功完成。
# T1059.001 (执行) | PowerShell
**目标:** 通过下载并执行远程脚本来模拟恶意的 PowerShell 活动。
## 查看用的 Atomic 测试
查看可用于 **MITRE ATT&CK 技术 T1059.001 (PowerShell)** 的 Atomic Red Team 测试。
## 执行选定的 Atomic 测试
**Atomic Test 6** 和 **Atomic Test 8** 都适用于此场景。但是,**Atomic Test 6** 完全依赖原生的 PowerShell 功能,使其成为在不引入额外依赖的情况下演示基于 PowerShell 的执行技术的更合适选择。
执行 **Atomic Test 6** 并验证命令是否成功执行。
# T1112 (防御规避) | 修改注册表
**目标:** 模拟修改与 Windows Defender 相关的注册表设置的尝试,以规避端点安全控制。
## 查看可用的 Atomic 测试
查看映射到 **MITRE ATT&CK 技术 T1112 (修改注册表)** 的可用 Atomic Red Team 测试。
## 执行选定的 Atomic 测试
为了模拟多种 Defender 修改场景,执行了以下 Atomic 测试:
- **T1112-38** – 抑制 Windows Defender 通知
- **T1112-51** – 禁用 Windows Defender 通知
- **T1112-56** – 篡改 Windows Defender 保护
这些测试模拟了对手在试图减少端点可见性和绕过安全控制时常用的防御规避技术。
## 执行结果
**T1112-38** 和 **T1112-51** 均成功完成,并按预期修改了 Defender 通知设置。
**T1112-56** 被 **Windows 安全中心**阻止,因为 **防篡改保护** 阻止了此修改。但是,由于之前的两个 Atomic 测试已经抑制了 Defender 通知,因此在尝试篡改操作期间未显示任何安全通知。
此行为证明了 Windows 防篡改保护的有效性,同时也凸显了攻击者如何将多种技术结合起来,在尝试进行更高权限的安全修改之前降低端点的可见性。
# 日志分析
在成功收集 Windows 和 Sysmon 遥测数据后,下一阶段重点放在使用 Splunk Enterprise 进行**日志分析**和**检测工程**上。
由于 **Splunk Add-on for Sysmon** 已经安装,必须将其启用,以便 Splunk 能够正确解析、规范化和提取 Sysmon 事件中的字段。这显著提高了搜索准确性,并简化了检测查询的开发。
导航至:
**Apps → Manage Apps → Splunk Add-on for Sysmon → Edit → Visible (Yes)**
# 蓝队检测工程
以下检测查询是为了识别在 Atomic Red Team 模拟期间执行的对手活动而开发的。
每个检测都映射到其相应的 **MITRE ATT&CK 技术**,并旨在使用由 Splunk Universal Forwarder 收集的 **Sysmon 遥测数据**来识别关键的攻击者行为。
这些检测侧重于高保真指标,例如进程创建、命令行参数、父子进程关系、注册表修改和进程访问事件。目的是演示如何利用端点遥测数据从蓝队的角度检测真实世界的攻击技术。
## 1. T1053.005 (持久化) | 计划任务
### 检测策略
此检测利用 **Sysmon Event ID 1 (进程创建)** 来识别负责创建或修改计划任务的 PowerShell 进程。
该查询搜索常见的计划任务创建命令,例如 **Register-ScheduledTask**、**New-ScheduledTask**、**Set-ScheduledTask** 以及基于 XML 的任务导入。这些行为通常与攻击者的持久化技术相关联。
```
index="win" ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=1 OR EventID=1)
(Image="*\\powershell.exe" OR Image="*\\pwsh.exe")
(
CommandLine="*Register-ScheduledTask*"
OR CommandLine="*New-ScheduledTask*"
OR CommandLine="*Set-ScheduledTask*"
OR CommandLine="*-Xml*"
OR CommandLine="*ScheduledTask*"
OR CommandLine="*TaskScheduler*"
)
| eval Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval Process_Name=mvindex(split(Image,"\\"),-1)
| eval Command_Line=CommandLine
| table Time host User EventCode EventID Process_Name Image Command_Line ParentImage ParentCommandLine ProcessId ParentProcessId
```
### 检测结果
以下搜索结果确认已通过 Sysmon 进程创建遥测数据成功检测到计划任务创建活动。
**证明**
## 2. T1218.005 (防御规避) | MSHTA
### 检测策略
此检测使用 **Sysmon Event ID 1 (进程创建)** 来识别 **mshta.exe** 的执行情况,这是一个经常被攻击者滥用以执行远程或本地 HTA payload 的合法 Windows 二进制文件。
该查询搜索可疑的命令行指标,例如远程 HTTP/HTTPS URL、HTA 文件、VBScript 和 JavaScript 执行。
```
index=win ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=1 OR EventID=1)
(Image="*\\mshta.exe" OR OriginalFileName="MSHTA.EXE")
(
CommandLine="*http://*"
OR CommandLine="*https://*"
OR CommandLine="*.hta*"
OR CommandLine="*vbscript:*"
OR CommandLine="*javascript:*"
)
| eval Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval Process_Name=mvindex(split(Image,"\\"),-1)
| eval Command_Line=CommandLine
| table Time host User EventCode EventID Process_Name Image Command_Line ParentImage ParentCommandLine ProcessId ParentProcessId
```
### 检测结果
该检测成功识别了 **mshta.exe** 的执行以及相关的恶意命令行。
**证明**
## 3. T1003.001 (凭据访问) | LSASS 内存转储
### 检测策略
凭据转储通常涉及进程获得对 **lsass.exe** 的特权访问。
此检测主要依赖 **Sysmon Event ID 10 (进程访问)** 来识别试图访问 LSASS 内存的进程。由于 Event ID 10 并不总是包含完整的进程创建信息,因此该查询使用 **Process GUID** 将事件与 **Sysmon Event ID 1** 进行关联。
这种关联为以下内容提供了完整的可见性:
- 进程名
- 命令行
- 父进程
- 执行时间
- 授予的访问权限
使得该检测在事件调查期间显著更加有用。
```
index=win ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=10 OR EventID=10)
TargetImage="*\\lsass.exe"
(
SourceImage="*\\procdump.exe"
OR SourceImage="*\\procdump64.exe"
OR GrantedAccess="0x1fffff"
OR GrantedAccess="0x1010"
OR GrantedAccess="0x1410"
OR GrantedAccess="0x143a"
)
| eval Access_Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval ProcessGuid=coalesce(SourceProcessGuid, SourceProcessGUID, source_process_guid)
| eval Event10_Process_Path=coalesce(SourceImage, source_image)
| eval Event10_Process_Name=mvindex(split(Event10_Process_Path,"\\"),-1)
| join type=left ProcessGuid [
search index=win ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=1 OR EventID=1)
| eval ProcessGuid=coalesce(ProcessGuid, process_guid)
| eval Created_Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval Created_Process_Name=mvindex(split(Image,"\\"),-1)
| rename Image as Created_Image
| rename CommandLine as Created_CommandLine
| table ProcessGuid Created_Time Created_Process_Name Created_Image Created_CommandLine ParentImage ParentCommandLine ProcessId ParentProcessId
]
| eval Time=coalesce(Created_Time, Access_Time)
| eval Process_Name=coalesce(Created_Process_Name, Event10_Process_Name)
| eval Image=coalesce(Created_Image, Event10_Process_Path)
| eval Command_Line=coalesce(Created_CommandLine, CommandLine, "Command line not stored in Event ID 10; correlated with Event ID 1 if available")
| table Time host User EventCode EventID Process_Name Image Command_Line SourceImage TargetImage GrantedAccess CallTrace ParentImage ParentCommandLine ProcessId ParentProcessId ProcessGuid
```
### 检测结果
该查询成功关联了进程创建和进程访问事件,提供了 LSASS 凭据转储活动的完整证据。
**证明**
## 4. T1059.001 (执行) | PowerShell
### 检测策略
此检测使用 **Sysmon Event ID 1** 来识别同时涉及 **Web 下载**和**代码执行**的可疑 PowerShell 执行。
该查询搜索与下载相关的关键字(例如 **Invoke-WebRequest**、**DownloadString**、**Net.WebClient** 和 **curl**),随后是执行指标,例如 **Invoke-Expression (IEX)**、**EncodedCommand** 和 **ExecutionPolicy Bypass**。
与独立搜索任一行为相比,将两种行为结合可显著减少误报。
```
index=win ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=1 OR EventID=1)
(Image="*\\powershell.exe" OR Image="*\\pwsh.exe")
(
CommandLine="*http://*"
OR CommandLine="*https://*"
OR CommandLine="*Invoke-WebRequest*"
OR CommandLine="*iwr*"
OR CommandLine="*wget*"
OR CommandLine="*curl*"
OR CommandLine="*DownloadString*"
OR CommandLine="*DownloadFile*"
OR CommandLine="*Net.WebClient*"
OR CommandLine="*System.Net.WebClient*"
)
(
CommandLine="*iex*"
OR CommandLine="*Invoke-Expression*"
OR CommandLine="*-enc*"
OR CommandLine="*-EncodedCommand*"
OR CommandLine="*-ExecutionPolicy Bypass*"
OR CommandLine="*-nop*"
OR CommandLine="*-NoProfile*"
)
| eval Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval Process_Name=mvindex(split(Image,"\\"),-1)
| eval Command_Line=CommandLine
| table Time host User EventCode EventID Process_Name Image Command_Line ParentImage ParentCommandLine ProcessId ParentProcessId
```
### 检测结果
该检测成功识别了 PowerShell 下载远程内容并在目标端点上执行它的行为。
**证明**
## 5. T1112 (防御规避) | 修改注册表
### 检测策略
此检测监视 **Sysmon Event ID 1** 以识别针对 Microsoft Defender 配置的注册表修改尝试。
该查询在检查与 Defender 设置相关的命令行参数时,会搜索诸如 **reg.exe** 和 **PowerShell** 之类的进程,包括 **TamperProtection**、**DisableRealtimeMonitoring**、**DisableNotifications** 和 **Set-MpPreference**。
监视这些行为使防御者能够在发生后续恶意活动之前识别出削弱或禁用端点保护的尝试。
```
index=win ("Sysmon" OR "Microsoft-Windows-Sysmon") (EventCode=1 OR EventID=1)
(
Image="*\\reg.exe"
OR Image="*\\powershell.exe"
OR Image="*\\pwsh.exe"
)
(
CommandLine="*Windows Defender*"
OR CommandLine="*DisableAntiSpyware*"
OR CommandLine="*TamperProtection*"
OR CommandLine="*DisableNotifications*"
OR CommandLine="*Notification_Suppress*"
OR CommandLine="*DisableRealtimeMonitoring*"
OR CommandLine="*DisableBehaviorMonitoring*"
OR CommandLine="*DisableOnAccessProtection*"
OR CommandLine="*Set-MpPreference*"
OR CommandLine="*Add-MpPreference*"
)
| eval Time=strftime(_time,"%Y-%m-%d %H:%M:%S")
| eval Process_Name=mvindex(split(Image,"\\"),-1)
| eval Command_Line=CommandLine
| table Time host User EventCode EventID Process_Name Image Command_Line ParentImage ParentCommandLine ProcessId ParentProcessId
```
**证明:**

标签:AI合规, BurpSuite集成, 攻击模拟, 管理员页面发现, 网络安全, 隐私保护, 驱动签名利用