# 僵尸网络自检程序 - 技术深度调研附录
> 基于 11 轮网络深度调研,覆盖开源工具、检测算法代码、Sysmon配置、YARA/Sigma规则、内存取证、C2框架检测等
> 编制日期:2026-07-14 | 版本:v3 技术增强版
---
## 一、开源工具与项目参考(可直接借鉴/集成)
### 1.1 网络层检测工具
| 项目 | 地址 | 核心能力 | 借鉴价值 |
|------|------|----------|----------|
| **botnet_detection** | github.com/FKammerer45/botnet_detection | 网络监控GUI,Beaconing检测、DGA启发式、DNS隧道(NXDOMAIN率)、JA3/JA3S指纹、威胁评分(0-100)、IP/DNS/JA3黑名单自动更新 | 威胁评分模型、Beaconing参数配置、黑名单自动更新机制 |
| **BotHunter** | github.com/0xwataru/bothunter | C2检测(njRAT/DarkComet/NanoCore/Quasar等12种RAT)+P2P检测(Sality/ZeroAccess/GameOverZeus),Shodan集成 | RAT家族特征库、P2P僵尸网络检测方法 |
| **p2p-botnet-detector** | github.com/deut-erium/p2p-botnet-detector | 从pcap中提取流特征,ML训练检测P2P僵尸网络 | 流特征提取方法(27个特征:熵值/包大小/频率/比率等) |
| **botnet-detection-using-ML** | github.com/krishna9588/botnet-detection-using-ml | 基于CTU-13数据集,Random Forest训练,Streamlit可视化面板 | ML检测Pipeline、特征工程参考 |
| **DNS-Analyser** | github.com/CipherxHub/Dns-Analyser | DNS流量捕获、Shannon熵计算、DNS标志解析、JSON+PDF报告 | DNS分析模块参考、报告生成方式 |
### 1.2 关键借鉴点
**botnet_detection 项目的威胁评分模型(可直接参考):**
- 每个检测组件独立评分,最终聚合 0-100 总分
- 按组件细分:destinations/protocols/threat_info/DNS/scans/rate_anomaly/beaconing/DNS_analysis/local_network/scoring
- 白名单:IP/CIDR/域名三级白名单抑制已知正常流量
- 黑名单:IP/DNS/JA3/JA3S 四类,支持自动下载更新
**p2p-botnet-detector 的流特征提取(27个特征):**
```
src_ip, src_port, dst_ip, dst_port, protocol # 基础元组
total_data, sent_packets, recv_packets # 流量统计
sent_data, recv_data # 方向性数据
total_sent_payload, total_recv_payload # 载荷统计
max_payload_size, max_payload_entropy # 载荷极值+熵
min_payload_size, min_payload_entropy # 载荷极值+熵
net_entropy # 整体载荷熵
average_payload_size, average_packet_length # 均值
average_packet_per_sec, average_packet_size_per_sec # 速率
num_protocols, total_time # 协议多样性+时长
incoming_outgoing_ratio # 收发比
num_small_packets # 小包数量
label # 标签
```
---
## 二、Beaconing 检测算法(含 Python 实现代码)
### 2.1 变异系数(CV)检测法 — 核心算法
**原理:** C2 Beacon 的连接间隔高度规律,即使加了 Jitter,间隔分布的变异系数(CV)仍远低于正常流量。
```python
import pandas as pd
import numpy as np
def detect_beacons(df, time_col='timestamp', src_col='src_ip',
dst_col='dst_host', min_connections=10):
"""
检测 Beaconing:按 (src, dst) 分组,计算连接间隔的变异系数
CV < 0.3 且连接数 > 20 → 疑似 Beacon
"""
results = []
for (src, dst), group in df.groupby([src_col, dst_col]):
if len(group) < min_connections:
continue
ts = np.sort(group[time_col].astype(float).values)
deltas = np.diff(ts) # 连接间隔
mean_interval = deltas.mean()
if mean_interval == 0:
continue
std_interval = deltas.std()
cv = std_interval / mean_interval # 变异系数
results.append({
'src': src,
'dst': dst,
'connection_count': len(ts),
'mean_interval_sec': round(mean_interval),
'std_interval_sec': round(std_interval),
'coefficient_of_variation': round(cv, 3),
'beacon_score': 1 - min(cv, 1) # 越高越可疑
})
results_df = pd.DataFrame(results)
# 筛选:低CV + 多连接 = 可疑 Beacon
suspicious = results_df[
(results_df['coefficient_of_variation'] < 0.3) &
(results_df['connection_count'] > 20)
].sort_values('beacon_score', ascending=False)
return suspicious
```
**阈值参考:**
- CV < 0.1 → 极强 Beacon 信号(几乎无 Jitter)
- CV 0.1-0.3 → 中等信号(有 Jitter 但仍规律)
- CV > 0.3 → 噪声大,不太可能是 Beacon
- 连接数 < 20 → 样本不足,不下结论
### 2.2 傅里叶变换检测 Jitter Beacon(高阶)
当攻击者使用大 Jitter(如 40%)时,CV 方法失效,需转向频域分析:
```python
def has_periodicity(ts, bin_seconds=10):
"""
FFT 频域检测:将连接时间序列分箱,做傅里叶变换,
如果存在一个主导频率远超噪声底,说明有周期性 Beacon
"""
start, end = ts.min(), ts.max()
bins = np.arange(start, end + bin_seconds, bin_seconds)
counts = np.histogram(ts, bins=bins)[0].astype(float)
counts -= counts.mean()
power = np.abs(np.fft.rfft(counts)) ** 2
# 主导频率功率 vs 平均功率的比值
return power[1:].max() / (power[1:].mean() + 1e-9)
```
**开源参考实现:** RITA (Real Intelligence Threat Analytics) 项目使用了同类方法。
### 2.3 减少误报的策略
| 策略 | 说明 |
|------|------|
| 目标白名单 | 排除已知正常服务(Windows Update、EDR厂商、CDN) |
| 权重外部+稀有目标 | 连接到环境中无人访问的IP,比连CDN更可疑 |
| 载荷大小方差 | Beacon 请求大小通常高度一致,低方差+低CV=强信号 |
| 域名注册时间 | 连接到30天内新注册域名 = 高危 |
---
## 三、TLS 指纹检测(JA3/JA3S/JARM)
### 3.1 三种指纹的区别
| 指纹 | 采集方 | 采集内容 | 检测目标 |
|------|--------|----------|----------|
| **JA3** | 客户端 | TLS ClientHello(版本+密码套件+扩展+曲线+点格式) | 识别 C2 植入物(客户端指纹) |
| **JA3S** | 服务端 | TLS ServerHello(版本+密码套件+扩展) | 识别 C2 服务器(服务端指纹) |
| **JARM** | 主动扫描 | 发送10个定制ClientHello,分析响应 | C2 服务器集群指纹 |
### 3.2 Python 实现
```python
# JA3 提取(使用 pyja3 库)
pip install pyja3
# JARM 扫描(使用 pyjarm 库)
pip install pyjarm
from jarm.scanner.scanner import Scanner
# 扫描目标服务器的 JARM 指纹
result = Scanner.scan("target.com", 443)
jarm_hash = result[0] # 如 "27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d"
# 比对已知 C2 JARM 指纹库
if jarm_hash in known_c2_jarm_set:
alert(f"C2 JARM match: {jarm_hash}")
```
### 3.3 已知 C2 框架 TLS 指纹
| C2 框架 | 特征 |
|---------|------|
| **Cobalt Strike** | JARM指纹已公开(Salesforce/Fastly发布),默认证书CN异常,Malleable C2可修改HTTP特征但无法改变TLS栈 |
| **Sliver** | mTLS/HTTP/DNS/WireGuard 多传输,Protobuf编码消息,默认命名管道特征 |
| **Havoc** | 默认特征较明显,JA3指纹可识别 |
| **Metasploit** | 默认分段URI模式:随机4字符校验和(checksum8) |
### 3.4 C2 框架检测四维评分模型
```python
def detect_c2_tls(pkt):
"""
四维加权打分检测 C2 TLS 通信
JA3偏差(0.3) + SNI熵值(0.25) + 证书匹配(0.25) + 时序特征(0.2)
"""
ja3 = compute_ja3(pkt)
cluster_id, deviation = ja3_lsh.query(ja3) # JA3 局部敏感哈希
sni = extract_sni(pkt)
entropy = calc_entropy(sni)
cert_match = verify_sni_cert_chain(sni, pkt)
timing = get_first_appdata_delay(pkt)
b64_ratio = calc_base64_ratio(pkt)
score = (0.30 * deviation
+ 0.25 * (1 - entropy / 5.0)
+ 0.25 * (0 if cert_match else 1)
+ 0.20 * (1 if timing < 0.05 and b64_ratio > 0.85 else 0))
return score > 0.68 # 阈值 0.68
```
---
## 四、Sysmon 事件 ID 配置指南
### 4.1 核心 Sysmon Event IDs(必开)
| Event ID | 名称 | 检测用途 | MITRE |
|----------|------|----------|-------|
| **1** | Process Creation | 进程执行、命令行审计 | T1059, T1036 |
| **3** | Network Connection | C2外连、扫描、数据外传 | T1071, T1571 |
| **7** | Image Loaded | DLL注入/劫持 | T1055, T1574 |
| **8** | CreateRemoteThread | 进程注入 | T1055 |
| **10** | Process Access | LSASS访问(Mimikatz) | T1003 |
| **11** | File Create | 恶意文件投递 | T1105 |
| **12/13/14** | Registry Event | 持久化机制 | T1547, T1546 |
| **15** | FileCreateStreamHash | NTFS ADS隐藏 | T1564 |
| **22** | DNS Query | DNS C2、DGA、隧道 | T1071.004 |
| **25** | Process Tampering | 进程镂空/替换 | T1055 |
### 4.2 关键配置最佳实践
1. **HashAlgorithms**: 配置 `MD5,SHA256,IMPHASH`
- IMPHASH(导入哈希)用于检测重命名的恶意软件变种
- SHA256 用于威胁情报比对
- MD5 用于快速匹配
2. **Event ID 1**: 必须保留 ParentCommandLine(父进程命令行)
- 很多配置禁用了它,这会杀死进程树调查能力
3. **Event ID 3**: 按目的IP范围/端口排除,不要按 image 名排除
- "排除 chrome.exe 的所有网络连接"是典型错误——攻击者会劫持浏览器进程
4. **Event ID 7**: 过滤到未签名模块 + 用户可写路径加载
- 将量减少一个数量级且保留信号
5. **Event ID 11**: 覆盖 %TEMP%、%APPDATA%\Roaming、%LOCALAPPDATA%、%PUBLIC%
- 几乎捕获每个 dropper
6. **日志量预估**: 合理调优后 5-20 MB/终端/天,1000终端 = 5-20 GB/天
### 4.3 Sysmon 配置参考
- **SwiftOnSecurity Sysmon Config**: 社区最广泛使用的基线配置
- **Olaf Hartong Sysmon-Modular**: 模块化配置,按ATT&CK技术分类
---
## 五、YARA 规则集成
### 5.1 YARA 规则生态
| 来源 | 规则数量 | 更新频率 | 特点 |
|------|----------|----------|------|
| **Valhalla (Nextron)** | 24,212+ YARA / 4,622+ Sigma | 每日 | 商业级,含APT/恶意软件/黑客工具 |
| **Emerging Threats** | 持续更新 | 每日 | 开源+PRO版,含botnet C2规则 |
| **YARA Rules Community** | 社区维护 | 不定期 | GitHub开源共享 |
| **F5 Detection** | 每月30+新增 | 月度 | 覆盖Stealer/Backdoor/Loader/Packer/RAT |
### 5.2 适用本项目的 YARA 规则示例
```yara
// 检测 Mirai 僵尸网络变种(使用特定锁文件防多实例)
rule MAL_LNX_Mirai_Variant {
meta:
description = "Detects Mirai botnet variant using lock file"
date = "2026-06-10"
strings:
$lock = "/var/run/bot.lock"
$telnet = "telnet" ascii nocase
$self_replicate = "selfrep" ascii nocase
condition:
any of them and filesize < 500KB
}
// 检测 UPX 加壳可执行文件
rule Packed_PE_UPX {
strings:
$upx0 = "UPX0" ascii
$upx1 = "UPX1" ascii
$upx_magic = { 55 50 58 21 }
condition:
uint16(0) == 0x5A4D and ($upx0 and $upx1) or $upx_magic
}
// 检测高熵PE文件(加壳/加密)
import "pe"
import "math"
rule Suspicious_PE_High_Entropy {
condition:
uint16(0) == 0x5A4D and
for any section in pe.sections: (
math.entropy(section.raw_data_offset, section.raw_data_size) > 7.0
) and
pe.number_of_imports < 3 // 恶意软件常动态解析,导入少
}
// 检测 Python RAT(含shell执行/文件窃取/token提取)
rule MAL_PY_RAT {
strings:
$help = "shell execution" ascii nocase
$harvest = "file harvesting" ascii nocase
$token = "token extraction" ascii nocase
condition:
2 of them
}
// 检测 TLS 反向 Shell(加密C2管道)
rule MAL_TLS_Reverse_Shell {
strings:
$openssl = "SSL_connect" ascii
$pipe = "CreatePipe" ascii
$cmd = "cmd.exe" ascii
condition:
all of them
}
```
### 5.3 集成方案
- 安装 `yara-python`,加载社区规则集
- 对系统目录和临时目录的可执行文件批量扫描
- 与文件哈希比对互补:YARA抓特征模式,哈希抓已知样本
---
## 六、Sigma 规则参考
### 6.1 关键 Sigma 检测规则(适用于本项目)
```yaml
# 检测:从可疑位置发起的网络连接
title: Network Connection From Suspicious Location
id: 7b434893-c57d-4f41-908d-6a17bf1ae98f
status: test
author: Florian Roth
logsource:
category: network_connection
product: windows
detection:
selection:
Initiated: 'true'
Image|contains:
- ':\$Recycle.bin'
- ':\Temp\'
- ':\Users\Public\'
- ':\Windows\Tasks\'
- '\config\systemprofile\'
condition: selection
level: high
tags:
- attack.command_and_control
- attack.t1105
```
### 6.2 其他高价值 Sigma 规则
| 规则 | 检测目标 | ATT&CK |
|------|----------|--------|
| Rundll32 无参数执行 | CS 反射加载 | T1218.011 |
| Cobalt Strike 默认命名管道 | CS SMB Beacon | T1055 |
| WMI 事件订阅创建 | WMI持久化 | T1546.003 |
| LSASS 进程访问 | Mimikatz凭据窃取 | T1003 |
| 临时目录可执行文件创建 | Dropper投递 | T1105 |
| 编码PowerShell执行 | 混淆脚本 | T1059.001 |
| 新服务创建(随机名) | 权限提升 | T1543.003 |
| DNS高熵域名查询 | DGA域名 | T1568.002 |
### 6.3 Sigma 规则生态
- SigmaHQ: github.com/SigmaHQ/sigma — 2000+ 规则
- Valhalla: 4,622+ Sigma 规则,每日更新
- 可直接转换为 Splunk/Elastic/QRadar 查询
---
## 七、内存取证深度指南(Volatility 3)
### 7.1 标准取证工作流
```
步骤1: 进程树分析
python3 vol.py -f memory.dmp windows.pstree
→ 寻找异常父子链:Word→cmd→PowerShell→rundll32
步骤2: 进程扫描(含隐藏/已终止)
python3 vol.py -f memory.dmp windows.psscan
→ 对比 pslist,找出隐藏进程
步骤3: 注入检测(核心)
python3 vol.py -f memory.dmp windows.malfind
→ 检测 RWX 内存区域 + 非文件映射的PE头(MZ)
→ --dump 参数可转储注入代码供逆向
步骤4: 网络连接
python3 vol.py -f memory.dmp windows.netscan
→ 内存中的活跃C2连接(即使netstat看不到)
步骤5: 命令行审计
python3 vol.py -f memory.dmp windows.cmdline
→ grep "enc|base64|http|temp" 找编码命令
步骤6: DLL 模块分析
python3 vol.py -f memory.dmp windows.dlllist --pid <PID>
→ 检查无路径/匿名DLL = 反射注入
步骤7: 进程内存转储
python3 vol.py -f memory.dmp windows.memmap --pid <PID> --dump
→ 转储可疑进程内存供YARA扫描/逆向
```
### 7.2 malfind 判读要点
**真阳性特征(确认注入):**
- 内存保护 = PAGE_EXECUTE_READWRITE (RWX)
- PrivateMemory = 1(私有内存,非文件映射)
- 十六进制头 = `4D 5A` (MZ头 = PE文件注入)
- 汇编 = `55 8B EC` (PUSH EBP; MOV EBP,ESP = 函数序言)
**假阳性排除:**
- 全零字节 `00 00 00 00...` → 空内存,不是代码
- 汇编 = `00 00 00 00` 解码为 `add [rax], al` → 垃圾,非注入
### 7.3 高级插件
| 插件 | 用途 |
|------|------|
| `windows.hollowfind` | 进程镂空检测(内存映像与磁盘不匹配) |
| `windows.vadinfo` | VAD树异常分析 |
| `windows.threads` | 线程注入检测(异常起始地址) |
| `windows.modscan` | 内核驱动/Rootkit检测 |
| `windows.bitlocker` | BitLocker密钥提取 |
### 7.4 内存采集工具
- **winpmem**: 开源,支持Windows/Linux
- **DumpIt**: 一键采集
- **Magnet RAM Capture**: 商业免费
- 采集后必须计算SHA256,确保证据链完整
---
## 八、DNS 隧道与 DGA 检测
### 8.1 DGA 域名检测(Python 实现)
```python
import math
from collections import Counter
def calculate_entropy(s):
"""计算字符串的 Shannon 熵"""
if not s:
return 0.0
counter = Counter(s)
length = len(s)
entropy = 0.0
for count in counter.values():
prob = count / length
entropy -= prob * math.log2(prob)
return entropy
def detect_dga(domain):
"""
DGA 检测多维度评分
返回: (is_suspicious, score, reasons)
"""
reasons = []
score = 0
subdomain = domain.split('.')[0]
# 1. 熵值检测
entropy = calculate_entropy(subdomain)
if entropy > 3.5:
score += 30
reasons.append(f"高熵值({entropy:.2f})")
elif entropy > 4.5:
score += 50
reasons.append(f"极高熵值({entropy:.2f})")
# 2. 子域长度
if len(subdomain) > 15:
score += 20
reasons.append(f"子域过长({len(subdomain)}字符)")
# 3. 数字字符比例
digit_ratio = sum(c.isdigit() for c in subdomain) / len(subdomain)
if digit_ratio > 0.5:
score += 20
reasons.append(f"数字占比高({digit_ratio:.0%})")
# 4. 元音比例(DGA域名通常元音少)
vowels = sum(c.lower() in 'aeiou' for c in subdomain)
vowel_ratio = vowels / len(subdomain)
if vowel_ratio < 0.15:
score += 15
reasons.append(f"元音占比低({vowel_ratio:.0%})")
# 5. 正则模式匹配
import re
if re.search(r'[a-f0-9]{16,}', subdomain):
score += 30
reasons.append("长十六进制串")
if re.search(r'[A-Za-z0-9+/]{20,}={0,2}', subdomain):
score += 25
reasons.append("Base64编码模式")
return (score >= 50, score, reasons)
```
### 8.2 DNS 隧道检测
| 特征 | 正常 | 恶意 |
|------|------|------|
| 查询频率 | 低频突发 | 高频周期性(每30秒) |
| 子域长度 | <50字符 | >50字符 |
| 域名熵值 | 低(有意义单词) | 高(随机串>4.5) |
| 响应类型 | A/AAAA为主 | TXT/NULL/CNAME频繁 |
| TTL值 | 300-3600 | 极短(60秒)或异常 |
| NXDOMAIN率 | 低 | DGA常>80%失败 |
### 8.3 DNS 异常特征提取清单
```
特征类别 具体指标 说明
域名结构 长度/熵值/元音比例 高熵=随机性增强
解析行为 NXDOMAIN率/TTL分布 DGA伴随高频失败+极低TTL
时间序列 请求频率/间隔波动 周期性或突发性
上下文关联 源IP/目标域名/AS归属 结合情报判断
协议层 DoH使用/端口/UA 非标准DNS=隐蔽通道
拓扑关系 子域层级深度/父域重复 DGA=扁平子域结构
注册信息 WHOIS缺失/新注册占比 DGA域名生命周期短
聚类特征 同源IP请求多个相似域名 批量生成迹象
```
---
## 九、Windows 持久化深度检测(2025 最新实战)
### 9.1 2025 年新型持久化技术
| 技术 | 检测方法 | ATT&CK |
|------|----------|--------|
| **纯内存持久化** (WMI事件+COM劫持+多进程自修复) | Volatility malfind + WMI订阅扫描 + COM注册表检查 | T1546.003/015 |
| **SleepMask加密** (Cobalt Strike休眠时自我加密内存) | 内存扫描时机:活动态时采集 | T1055 |
| **不死后门** (重启后WMI事件触发自动回连) | WMI事件订阅全量扫描 | T1546.003 |
| **EDRChoker** (滥用QoS策略致EDR失明) | 检查WMI QoS策略 `MSFT_NetQosPolicySettingData` | T1562 |
| **反射加载Beacon** (CS/BR/Sliver/Havoc) | Sysmon EID10 + Image为空 + GrantedAccess含0x40 | T1055 |
### 9.2 检测命令速查
```powershell
# WMI 永久事件订阅(国内红队70%使用)
Get-CimInstance -Namespace root\subscription -ClassName __EventFilter
Get-CimInstance -Namespace root\subscription -ClassName __EventConsumer
Get-CimInstance -Namespace root\subscription -ClassName __FilterToConsumerBinding
# 注册表 Run 键(含 WOW6432Node)
$paths = @(
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Run",
"HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce",
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Run",
"HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce",
"HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run"
)
foreach ($path in $paths) {
Get-ItemProperty -Path $path -ErrorAction SilentlyContinue | Select-Object *
}
# 24小时内修改的 exe/dll
Get-ChildItem -Path C:\ -Recurse -Include *.exe,*.dll -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -gt (Get-Date).AddHours(-24) }
# 计算可疑文件哈希
Get-FileHash -Path C:\path\to\suspicious.exe -Algorithm SHA256
# 登录失败事件(暴力破解)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 50
# 进程创建事件(含命令行)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688} -MaxEvents 100
```
### 9.3 Sysmon 检测链(进程注入→C2回连)
```
Event ID 10 (ProcessAccess) → Beacon打开注入目标句柄
Event ID 8 (CreateRemoteThread) → 线程注入到目标进程
Event ID 17 (PipeCreated) → 命名管道打开用于输出
Event ID 3 (NetworkConnect) → 被注入进程外联回连C2
→ 10→8→17→3 在同一进程上短时间出现 = 高置信度 C2 指标
```
---
## 十、C2 框架检测专题
### 10.1 主流 C2 框架特征库
| 框架 | 传输方式 | 关键特征 | 检测方法 |
|------|----------|----------|----------|
| **Cobalt Strike** | HTTP/HTTPS/DNS/SMB | checksum8算法URI、默认命名管道(\msagent_*)、Malleable C2可自定义全部HTTP特征、JARM指纹已公开 | JARM匹配+命名管道+Beaconing+进程注入链 |
| **Sliver** | mTLS/HTTP/DNS/WireGuard | Protobuf编码、默认命名管道(postex_*)、植入物ID | 命名管道+传输协议指纹 |
| **Havoc** | HTTP/HTTPS | 默认特征明显、JA3可识别 | JA3指纹+Beaconing |
| **Metasploit** | HTTP/HTTPS/TCP | TLV协议结构、默认分段URI(4字符校验和) | URI模式+协议结构 |
| **Mythic** | 多模块(Apollo/Athena等) | 模块化设计,特征因agent而异 | 多维度行为分析 |
| **njRat** | HTTP | 固定URI模式、特定Cookie格式 | 网络指纹+行为分析 |
| **DarkComet** | HTTP | 固定端口和协议特征 | 网络指纹 |
### 10.2 Cobalt Strike 深度检测
**1. 命名管道检测(Sigma规则):**
```yaml
title: Cobalt Strike Default Named Pipe
logsource:
product: windows
category: pipe_created # Sysmon EID 17
detection:
selection:
PipeName|re: '\\(msagent_|postex_|status_|MSSE-).*'
condition: selection
level: high
```
**2. checksum8 算法检测 CS Staging URI:**
```python
def checksum8(text):
"""CS Beacon 的 staging URI 通过 checksum8 算法生成"""
text = text.replace("/", "")
if len(text) < 4:
return 0
return sum(ord(c) for c in text) % 256
# CS 默认 staging URI 的 checksum8 = 92
# 检测:遍历HTTP请求URI,计算checksum8,匹配92或93
```
**3. Malleable C2 Profile 检测:**
- 即使自定义了HTTP特征,GET/POST交替+固定间隔的结构无法改变
- 请求体大小低方差 + 时间间隔低CV = 强 Beacon 信号
- 检查 User-Agent 非预期变化、Cookie字段异常长度
**4. CS 进程注入检测链:**
```
Sysmon 10 (ProcessAccess) → Beacon进程打开 dllhost.exe 句柄
Sysmon 8 (CreateRemoteThread) → 线程注入 dllhost.exe
Sysmon 17 (PipeCreated) → 命名管道打开
Sysmon 3 (NetworkConnect) → dllhost.exe 外联
```
### 10.3 域前置(Domain Fronting)检测
- SNI 域名 vs HTTP Host 头不匹配
- 需要 TLS 检查代理才能检测
- AWS CloudFront / Azure CDN 已禁用,但其他CDN可能仍允许
---
## 十一、检测规则与框架集成方案
### 11.1 规则层次架构
```
┌─────────────────────────────────────────────────┐
│ 检测规则引擎 │
├─────────────────┬───────────────┬───────────────┤
│ YARA 规则 │ Sigma 规则 │ 自定义规则 │
│ (文件特征) │ (日志事件) │ (行为分析) │
├─────────────────┼───────────────┼───────────────┤
│ 社区规则集 │ SigmaHQ │ CV Beaconing │
│ Valhalla 24K+ │ 2000+规则 │ DGA 熵值检测 │
│ ET Ruleset │ Valhalla │ TLS 指纹匹配 │
│ 自定义规则 │ FortiSIEM │ 进程注入链 │
├─────────────────┴───────────────┴───────────────┤
│ ATT&CK 映射层 │
│ 每条规则标注 ATT&CK ID → 自动映射到攻击链 │
├─────────────────────────────────────────────────┤
│ 评分与关联引擎 │
│ 多规则命中加权 + 交叉验证 + 情报增强 │
└─────────────────────────────────────────────────┘
```
### 11.2 规则更新机制
- YARA: 每周从 Valhalla / Emerging Threats 拉取更新
- Sigma: 每周从 SigmaHQ 同步
- IoC 黑名单: 每日从 ThreatFox / OTX / AbuseIPDB 更新
- JARM 指纹库: 每周更新已知 C2 指纹
---
## 十二、对原有方案的 v3 优化建议
### 12.1 新增检测维度
| 新增项 | 来源 | 说明 |
|--------|------|------|
| **checksum8 URI检测** | CS逆向 | 检测 Cobalt Strike 默认 staging URI |
| **命名管道检测** | Sysmon EID17/18 | 检测 CS/Sliver 默认命名管道模式 |
| **进程注入检测链** | Sysmon 10→8→17→3 | 四事件序列在同一进程 = 高置信C2 |
| **EDRChoker检测** | 2025新发现 | 检查WMI QoS策略是否被滥用致EDR失明 |
| **SleepMask检测** | CS新功能 | 内存采集时机必须在Beacon活动态 |
| **域前置检测** | CDN滥用 | SNI vs Host头不匹配 |
| **IMPHASH追踪** | Sysmon配置 | 检测重命名恶意软件变种 |
| **NTFS ADS检测** | Sysmon EID15 | 隐藏在交替数据流中的载荷 |
| **傅里叶Beaconing** | 频域分析 | 检测大Jitter(40%+)的Beacon |
### 12.2 技术栈补充
| 新增组件 | 用途 | 来源 |
|----------|------|------|
| `pyja3` | JA3/JA3S 指纹提取 | Salesforce 开源 |
| `pyjarm` | JARM 指纹扫描 | SparkITSolutions 开源 |
| `yara-python` | YARA 规则引擎 | VirusTotal 开源 |
| `zat` | Zeek日志解析 | Zeek Analysis Tools |
| `scapy` | 网络包构造/分析 | 开源 |
| `numpy` + `scipy` | 统计分析(FFT/CV) | 科学计算 |
### 12.3 开源工具集成建议
| 工具 | 集成方式 | 价值 |
|------|----------|------|
| **Volatility 3** | 子进程调用,解析输出 | 内存取证自动化 |
| **Sysinternals Autoruns** | 导出自启项清单,程序内比对 | 持久化基线 |
| **Sysinternals sigcheck** | 子进程调用,验证签名 | 签名验证 |
| **RITA** | 参考其 Beaconing 检测算法 | 统计检测参考 |
| **YARA 社区规则** | 批量加载,文件扫描 | 恶意文件检测 |
---
## 十三、参考资料汇总(v3 新增)
### 开源项目
| # | 项目 | 地址 |
|---|------|------|
| 1 | botnet_detection (网络监控GUI) | github.com/FKammerer45/botnet_detection |
| 2 | BotHunter (C2+P2P检测) | github.com/0xwataru/bothunter |
| 3 | p2p-botnet-detector (ML检测) | github.com/deut-erium/p2p-botnet-detector |
| 4 | botnet-detection-using-ML | github.com/krishna9588/botnet-detection-using-ml |
| 5 | DNS-Analyser | github.com/CipherxHub/Dns-Analyser |
| 6 | c2-beaconing-detection (CV算法) | github.com/Mithileshan/c2-beaconing-detection |
| 7 | pyja3 (JA3 Python库) | github.com/salesforce/ja3 |
| 8 | pyjarm (JARM Python库) | github.com/SparkITSolutions/pyjarm |
| 9 | c2detect (C2框架识别) | pip install cognis-c2detect |
| 10 | Sysmon Cheatsheet | github.com/ultrew/sysmon_event_cheatsheet |
### 技术文章与指南
| # | 标题 | 来源 |
|---|------|------|
| 11 | Hunting C2 Beaconing with Python | gtkcyber.com |
| 12 | Detect C2 Beaconing: Network Log Analysis | decryptiondigest.com |
| 13 | Sysmon Configuration for SOC Teams | decryptiondigest.com |
| 14 | Sysmon Deployment Guide | decryptiondigest.com |
| 15 | 捕获真实攻击者的Sysmon配置 | evtxparser.com |
| 16 | Memory Forensics with Volatility 3 | hivesecurity.gitlab.io |
| 17 | Volatility 3 实战指南 | blog.it-learn.io |
| 18 | Windows后门排查(2025持续更新) | cnblogs.com/Neur0toxin |
| 19 | Windows权限维持深度分析 | blog.csdn.net/weixin_41905135 |
| 20 | Cobalt Strike Detection Playbook | hivesecurity.gitlab.io |
| 21 | CS深度威胁狩猎与流量指纹 | tsight.io |
| 22 | C2框架签名检测 | blue.tymyrddin.dev |
| 23 | TLS指纹识别C2通信 | ask.csdn.net |
| 24 | DNS隧道与DGA检测 | yidun.csdn.net |
| 25 | DNS请求识别恶意软件通信 | ask.csdn.net |
| 26 | MITRE ATT&CK TA0011 指南 | cybersergeants.org |
| 27 | ManageEngine C2检测(85条规则) | manageengine.com |
| 28 | Valhalla YARA规则(24K+) | valhalla.nextron-systems.com |
| 29 | YARA规则配置指南 | oneuptime.com |
| 30 | Sigma规则(可疑位置网络连接) | detection.wiki |
| 31 | WMI Persistence深度分析 | blog.hunterstrategy.net |
| 32 | MITRE ATT&CK COM Hijacking | attack.mitre.org/techniques/T1546/015 |
| 33 | 蓝队PowerShell应急响应指南 | aisec.blog.csdn.net |
| 34 | 内存取证Volatility malfind | cyberengage.org |
| 35 | 进程注入检测技术 | lobehub.com (killvxk skill) |
| 36 | C2通信分析 | lobehub.com (killvxk skill) |
| 37 | Windows应急响应实战 | aisec.blog.csdn.net |
| 38 | DNS安全风险评估 | hackernoob.tips |
| 39 | Sysmon实战指南(9.3) | blog.csdn.net/weixin_47431459 |
| 40 | F5检测月报(30+ YARA) | f5.pm |