Agent1b/extrasploit-agent-detection-research
GitHub: Agent1b/extrasploit-agent-detection-research
一个面向蓝队的自定义Windows植入物检测研究项目,通过完整记录攻击技术的规避原理和对应的Sigma检测规则,帮助SOC分析师建立对自定义.NET威胁的防御能力。
Stars: 0 | Forks: 0
# 💉 Extrasploit Agent — 专注于检测的自定义 .NET payload 规避研究。包括 MITRE ATT&CK 映射、IOC 分析以及面向蓝队的 Sigma 检测规则。
## 📋 概述
为研究以下内容而开发的自定义 Windows 植入物:
- 单文件 .NET 可执行文件的 Payload 构建技术
- 通过 PE 头操作和控制台隐藏实现的端点检测绕过
- 从 Linux 到 Windows 的交叉编译作为攻击性开发工作流
- 从防御者角度进行的行为分析 — 自定义 payload 会留下什么特征?
**研究问题:** 现代端点安全解决方案如何检测(或未能检测)自定义构建的 .NET payload,SOC 分析师可以使用哪些指标来识别它们?
## 🎯 目标
1. 从零开始构建功能完备的 Windows 植入物 — 不使用现有框架
2. 从攻击者 OS (Linux) 交叉编译到目标 OS (Windows),无需 Windows 开发环境
3. 在 Windows 11 上实现零可见指标的静默执行
4. 在启用 Windows Defender 的情况下测试检测率
5. 记录所有 IOC,用于蓝队训练和检测规则开发
6. 将所有技术映射到 MITRE ATT&CK 框架
## ⚙️ Payload 特征
| 属性 | 详情 |
|----------|---------|
| **语言** | C# (.NET 6.0) |
| **目标操作系统** | Windows 10 / 11 (x64) |
| **投递方式** | 直接执行(社会工程学、USB 或 dropper 不在研究范围内) |
| **Payload 类型** | 功能完备的 agent,具有到 C2 的加密反向连接 |
| **加密** | AES-256-CBC,使用预共享密钥,每条消息使用全新的 IV |
| **大小** | ~67MB(包含嵌入式 .NET 运行时的自包含单文件) |
| **持久化** | 注册表 Run 键 + 文件复制到 %LOCALAPPDATA% |
| **可见性** | 完全不可见 — 无控制台、无窗口、无托盘图标 |
| **编译** | 使用 dotnet publish + PE patching 从 Kali Linux 交叉编译 |
## 🔬 使用的技术
### 投递
- **方法:** Agent 是一个独立的 .exe 文件,在执行时连接回 C2 服务器。投递机制(网络钓鱼、USB、dropper)不在本研究范围内 — 焦点在于植入物本身。
- **MITRE ATT&CK:** T1204.002 — 用户执行:恶意文件
### 执行
- **方法:** 标准 PE 执行。Agent 在启动时立即调用 `FreeConsole()`,然后建立到 C2 的加密 TCP 连接。PE 头在构建后被修补,将子系统设置为 WINDOWS_GUI (2),以防止 Windows 11 的 Terminal 在 Main() 运行之前创建可见的控制台窗口。
- **MITRE ATT&CK:** T1106 — 原生 API (FreeConsole, Win32 P/Invoke)
### 规避技术
#### 1. PE 头子系统修补
**内容:** 修改已编译可执行文件的 PE 头,将子系统字段从 CONSOLE (3) 更改为 WINDOWS_GUI (2)。
**原因:** Windows 11 引入了新的 Terminal 应用程序,它会在任何应用程序代码运行之前,在操作系统级别拦截控制台进程的创建。传统的基于代码的隐藏(ShowWindow, FreeConsole)运行得太晚。
**实现:** 构建后的 Python 脚本从 DOS 头的 0x3C 处读取 PE 偏移量,定位到 PE_OFFSET + 0x5C 处的子系统字段,将 2 字节的值从 03 00 覆盖为 02 00。
**MITRE ATT&CK:** T1027.009 — 混淆文件:嵌入式 Payload
#### 2. 无控制台架构
**内容:** 整个代码库中零控制台输出 — 没有任何 Console.WriteLine、Console.Write 或 Console.ReadLine。
**原因:** .NET 中任何 Console.* 调用都会导致运行时分配一个控制台窗口,即使在 WinExe 应用程序中也是如此。
**实现:** 自定义 Logger 类专门写入文件。日志文件仅在从 AppData 运行时(持久化之后)创建,而不是在从桌面/下载文件夹初始执行期间创建。
**MITRE ATT&CK:** T1564.003 — 隐藏痕迹:隐藏窗口
#### 3. 自包含单文件部署
**内容:** Agent 以单个 .exe 文件(约 67MB)发布,包含整个 .NET 6.0 运行时、所有依赖项和应用程序代码。
**原因:** 不依赖于目标机器上是否安装了 .NET。不会在可执行文件旁边释放 DLL 文件。单文件更易于部署,且留下更少的文件系统特征。
**实现:** dotnet publish 附带 `/p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true /p:EnableCompressionInSingleFile=true`
**MITRE ATT&CK:** T1027.002 — 混淆文件:软件加壳
#### 4. 加密通信
**内容:** 所有 C2 流量都使用 AES-256-CBC 加密,使得在没有密钥的情况下无法进行深度包检测。
**原因:** 纯文本 C2 流量很容易被 IDS/IPS 检测到。加密迫使防御者依赖流量分析(模式、时间、体量)而不是内容检查。
**实现:** 预共享的 256 位密钥(在配置中为十六进制编码),每条消息随机生成 16 字节的 IV,PKCS7 填充。在 Python(控制器)和 C#(agent)中实现了相同的实现,并通过跨语言测试向量进行了验证。
**MITRE ATT&CK:** T1573.001 — 加密通道:对称加密
#### 5. 条件日志记录
**内容:** Agent 仅在从其持久化安装目录 运行时创建日志文件,在初始执行期间从不创建。
**原因:** 日志文件是取证证据。在从桌面或下载文件夹初始执行期间,不会创建任何可能警告用户或留下额外特征的文件。
**实现:** Logger.Init() 检查 AppDomain.CurrentDomain.BaseDirectory — 如果路径包含 "AppData",则启用日志记录;否则为 null(不记录日志)。
**MITRE ATT&CK:** T1070.004 — 指标移除:文件删除(预防而非移除)
### 持久化
- **方法:** 位于 `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` 的注册表 Run 键 + 完整的文件副本(exe + 运行时)到 `%LOCALAPPDATA%\WindowsSystemUpdate\`
- **实现细节:** 使用逐文件 try/catch 复制构建目录中的所有文件(以跳过锁定的文件)。通过 AppDomain.CurrentDomain.BaseDirectory 使用绝对路径(而不是相对路径 — 从启动项运行时,相对路径会解析到 system32)。
- **MITRE ATT&CK:** T1547.001 — 启动/登录自动启动:注册表 Run 键
### 命令与控制
- **方法:** 具有自动重连(10 秒重试)的持久 TCP 连接。4 字节小端长度前缀帧。带有基于类型路由的 JSON 消息 payload。30 秒心跳间隔,带有失效会话清理。
- **MITRE ATT&CK:** T1571 — 非标准端口,T1095 — 非应用层协议
## 🧪 测试结果
### 检测率
| 安全工具 | 是否检测到? | 检测类型 | 备注 |
|--------------|-----------|---------------|-------|
| Windows Defender (实时) | 否 | N/A | 自定义代码没有已知签名。Defender 依赖签名匹配进行静态检测。 |
| Windows Defender (行为) | 部分 | 行为 | 用于键盘记录器的 SetWindowsHookEx 在某些测试运行中触发了行为警报 |
| Sysmon | 是 | 遥测 | 进程创建 (Event 1)、网络连接 (Event 3) 和注册表修改 (Event 13) 均被正确记录 |
| Wireshark | 可见 | 流量分析 | 加密流量可见但内容不可读。时间模式(30 秒心跳)可被检测到 |
### 生成的 IOC
| IOC 类型 | 值 | 描述 |
|----------|-------|-------------|
| 文件路径 | `%LOCALAPPDATA%\WindowsSystemUpdate\Agent.exe` | 持久化安装位置 |
| 文件大小 | ~67MB 单个 .exe | 对于合法实用程序来说异常巨大 |
| 注册表键 | `HKCU\Software\Microsoft\Windows\CurrentVersion\Run\WindowsSystemUpdate` | 持久化机制 |
| 网络 | 到攻击者 IP 端口 4444 的持久 TCP 连接 | C2 回调通道 |
| 网络模式 | 30 秒间隔心跳 | 定期的信标模式 |
| 进程 | Agent.exe (无可见窗口) | 具有图形用户界面 (GUI) 子系统但没有 GUI 的进程 |
| 文件 | `%LOCALAPPDATA%\WindowsSystemUpdate\agent.log` | Agent 日志文件(仅在持久化后) |
| PE 头 | 子系统 = 2 (GUI) 但未创建窗口 | 可疑的 PE 特征 |
## 🛡️ 蓝队要点
**SOC 分析师应如何检测此 payload:**
1. **网络层:** 寻找以固定间隔发往非标准端口的持久出站 TCP 连接,带有加密(高熵)payload。30 秒的心跳会创建一个可检测的信标模式。工具:Zeek、RITA (Real Intelligence Threat Analytics)、Suricata。
2. **端点层:** 监控 SetWindowsHookEx 调用(键盘记录器)、GDI+ CopyFromScreen(屏幕截图)、%LOCALAPPDATA% 中带有 GUI 子系统但没有可见窗口的新进程。工具:Sysmon、CrowdStrike Falcon、Carbon Black。
3. **日志分析:** Sysmon Event ID 1 (进程创建) — 来自 AppData 的新未签名 exe。Event ID 3 (网络连接) — 异常端口上的持久出站连接。Event ID 13 (注册表) — 新的 Run 键条目。将这三者关联起来可实现高置信度检测。
4. **行为指标:** 带有嵌入式 .NET 运行时的大型单文件 .exe(约 67MB),运行时无可见窗口,持续的网络活动,指向 AppData 的注册表启动项。
**推荐的 Sigma 检测规则:**
```
# 检测:通过 Registry Run 键实现 Extrasploit 风格的持久化
title: Suspicious Run Key Pointing to AppData
description: Detects registry Run key modifications that point to executables in user AppData
logsource:
product: windows
service: sysmon
detection:
selection:
EventID: 13
TargetObject|contains: '\CurrentVersion\Run'
Details|contains: '\AppData\Local\'
condition: selection
level: high
tags:
- attack.persistence
- attack.t1547.001
```
```
# 检测:来自异常位置的大型单文件 .NET 可执行文件
title: Large Executable in AppData with No Window
description: Detects execution of unusually large executables from user AppData
logsource:
product: windows
service: sysmon
detection:
selection:
EventID: 1
Image|contains: '\AppData\Local\'
filter:
Image|contains:
- '\Microsoft\'
- '\Google\'
- '\Mozilla\'
condition: selection and not filter
level: medium
tags:
- attack.execution
- attack.t1204.002
```
```
# 检测:发往非标准端口的定期 Beaconing 模式
title: Potential C2 Beaconing - Regular Interval Connections
description: Detects processes making regular-interval outbound connections
logsource:
product: windows
service: sysmon
detection:
selection:
EventID: 3
Initiated: 'true'
DestinationPort|gt: 1024
Image|contains: '\AppData\'
condition: selection
level: medium
tags:
- attack.command_and_control
- attack.t1571
```
## 🧪 实验环境
- **攻击者:** VMware 上的 Kali Linux 2024.x — Python 3.13,用于交叉编译的 .NET SDK 6.0
- **目标:** VMware 上的 Windows 11 Pro 22H2 — .NET Runtime 6.0,Windows Defender 已启用(实时保护开启)
- **网络:** VMware 仅主机适配器,完全隔离,无互联网访问
- **AV 状态:** 在所有测试期间均启用了 Windows Defender 实时保护
- **监控:** 在目标机器上安装 Sysmon 以收集遥测数据,在攻击者机器上使用 Wireshark 进行流量分析
## 📸 截图
| 截图 | 描述 |
|-----------|-------------|
|  | 从 Kali Linux 交叉编译 agent — 显示构建标志和 PE 补丁成功 |
|  | Agent 在任务管理器中运行,无可见窗口 — 确认 GUI 子系统 |
|  | Windows Defender 扫描显示未检测到自定义 agent |
|  | Wireshark 中的加密 C2 流量 — 可见 4 字节长度前缀 + AES 加密的 payload |
|  | 显示进程创建、网络连接和注册表修改的 Sysmon 事件 |
|  | 在 regedit 中可见的注册表 Run 键显示持久化条目 |
|  | 连接断开后 Agent 自动重连 — 控制器显示会话重用 |
|  | PE 头分析 (PE-bear 或 CFF Explorer) 显示子系统 = 2 (GUI) |
## 📚 核心经验
1. **自定义 payload 可以轻易绕过基于签名的 AV** — Windows Defender 从未标记过该 agent,因为它没有已知签名。这从根本上说明了为什么企业需要行为检测 (EDR) 并且不能仅仅依赖传统的 AV。
2. **PE 头是操作系统级别的守门人** — 根据PE头中的单个 2 字节字段决定是否创建控制台窗口。了解 Windows 加载器的这一层级对于攻击(静默执行)和防御(可疑的 PE 特征)都至关重要。
3. **交叉编译消除了对 Windows 开发环境的需求** — 整个 agent 都是使用 `dotnet publish` 在 Kali Linux 上构建的。这意味着攻击者无需接触 Windows 即可创建 Windows 恶意软件 — 这是威胁建模的重要背景。
4. **尽管有加密,网络流量模式依然存在** — 定期的心跳、一致的包大小和持久的连接会创建可检测的签名,即使内容已加密。这验证了 RITA 和 Zeek 等网络流量分析工具的价值。
5. **持久化特征是最可靠的 IOC** — 虽然运行中的 agent 可以很隐蔽,但持久化机制(注册表键 + AppData 中的文件)会留下持久的特征,这些特征能在重启后存活,并可通过标准的取证程序发现。
6. **Sigma 规则可以捕获自定义工具** — 上面的三个检测规则可以捕获此 payload,尽管它没有签名。行为模式(来自 AppData 的大型 exe、指向 AppData 的 Run 键、定期的出站连接)比基于哈希的 IOC 更持久。
## 🔗 相关项目
- [自定义 RAT — C2 框架研究](link-to-rat-repo) — 用于控制此 payload 的 C2 基础设施
- [家庭安全实验室](link-to-homelab-repo) — 进行测试的隔离 VMware 环境
## 📬 联系方式
**Michael Baazov**
[LinkedIn](https://www.linkedin.com/in/michael-baazov-87417823b/) | [GitHub](https://github.com/Agent1b) | michbz@proton.me
*了解 payload 是如何构建的以及它们如何规避检测,对于制定有效的防御措施至关重要。这里记录的每一种技术都包含了相应的检测方法和 Sigma 规则 — 因为攻击为防御提供参考。*
标签:AMSI绕过, ATT&CK映射, C2通信, DNS 反向解析, DNS 解析, EDR绕过, ESC8, IOC分析, .NET开发, PE头混淆, Sigma规则, Windows Defender, Windows Implant, 中高交互蜜罐, 免杀技术, 威胁检测, 恶意软件开发, 持久化控制, 暴力破解检测, 目标导入, 社会工程学, 端点安全, 网络信息收集, 网络安全, 蓝军培训, 蓝军研究, 补丁管理, 跨平台编译, 逆向工具, 速率限制处理, 隐私保护, 高交互蜜罐