# Hunting For Beaconing With Frequency Analysis

> 通过对网络流量应用统计频率分析、抖动计算和变异系数评分，识别命令与控制（C2）信标模式，检测被攻陷终端的周期性回调行为。

- Skill: `killvxk/hunting-for-beaconing-with-frequency-analysis` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add killvxk/hunting-for-beaconing-with-frequency-analysis`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/hunting-for-beaconing-with-frequency-analysis/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/hunting-for-beaconing-with-frequency-analysis

---


# 使用频率分析狩猎信标（Beaconing）

## 适用场景

- 主动搜索回调 C2 基础设施的被攻陷终端时
- 威胁情报报告显示针对您所在行业的活跃 C2 框架时
- 网络日志显示向陌生目标的周期性出站连接时
- 紫队演练验证 C2 检测能力时
- 调查潜在入侵事件并需要识别活跃 C2 通道时

## 前置条件

- 带时间戳和目标数据的网络代理/防火墙日志（至少 24 小时）
- Zeek conn.log、dns.log 和 ssl.log 或等效的 NetFlow/IPFIX 数据
- 具备统计分析能力的 SIEM 平台（Splunk、Elastic、Microsoft Sentinel）
- 用于自动化信标分析的 RITA（Real Intelligence Threat Analytics）或 AC-Hunter
- 用于域名/IP 信誉丰富化的威胁情报 feeds

## 工作流程

1. **定义信标参数**：建立检测阈值——变异系数（CV）低于 0.20 表示强周期性，24 小时内最少 50 次连接，平均间隔在 30 秒到 24 小时之间。
2. **收集网络遥测数据**：将代理日志、DNS 查询、防火墙连接日志和 Zeek 元数据汇总到分析平台。
3. **计算连接间隔**：对每个源-目标对，计算连续连接之间的时间差，推导平均间隔、标准差和变异系数。
4. **应用抖动分析**：Cobalt Strike 等复杂 C2 框架会向信标间隔添加抖动（随机性）。Sunburst 后门每 15 分钟信标一次，前后偏差 90 秒。分析抖动模式以检测甚至是随机化的信标行为。
5. **过滤合法的周期性流量**：排除已知合法的信标来源，包括 Windows Update、防病毒定义更新、NTP 同步、SaaS 心跳服务和 CDN 健康检查。
6. **分析数据量一致性**：C2 心跳包通常具有一致的 payload 大小。计算每次连接传输字节的变异系数——低方差表明是自动化通信。
7. **用威胁情报丰富**：将识别出的信标目标与 VirusTotal、WHOIS 注册数据（标记 30 天内新域名）、证书透明度日志和被动 DNS 历史交叉验证。
8. **与终端遥测关联**：通过 DHCP 日志将信标来源 IP 映射到终端主机名，然后与进程创建事件（Sysmon 事件 ID 1、3）关联以识别责任进程。
9. **评分并排序**：根据变异系数、域名年龄、威胁情报匹配、数据量一致性和可疑端口使用分配风险评分。上报高置信度发现。

## 核心概念

| 概念 | 描述 |
|------|------|
| T1071.001 | 应用层协议：Web 协议——HTTP/HTTPS 信标 |
| T1071.004 | 应用层协议：DNS——基于 DNS 的 C2 隧道 |
| T1573 | 加密通道——TLS/SSL 加密的 C2 通信 |
| T1568.002 | 动态解析：域名生成算法（DGA） |
| 变异系数（CV） | 标准差除以均值；低于 0.20 表示周期性 |
| 抖动（Jitter） | 向信标间隔添加的随机变化，用于规避检测 |
| RITA 信标评分 | 综合连接规律性、数据量一致性和连接数的评分 |
| JA3/JA4 指纹 | TLS 客户端指纹，用于识别 C2 框架签名 |
| Fast-Flux DNS | 快速变化的 DNS 解析，用于保护 C2 基础设施 |

## 工具与系统

| 工具 | 用途 |
|------|------|
| RITA（Real Intelligence Threat Analytics） | 基于 Zeek 日志的自动化信标评分 |
| AC-Hunter | 带信标检测的商业威胁狩猎平台 |
| Splunk | 使用 streamstats 进行基于 SPL 的统计信标分析 |
| Elastic Security | 周期性网络行为的 ML 异常检测 |
| Zeek | 网络元数据收集（conn.log、dns.log、ssl.log） |
| Suricata | 带 JA3/JA4 TLS 指纹提取的网络 IDS |
| FLARE | C2 配置文件和信标模式检测 |
| VirusTotal | 域名和 IP 信誉丰富化 |

## 检测查询

### Splunk——HTTP/S 信标频率分析
```spl
index=proxy OR index=firewall
| where NOT match(dest, "(?i)(microsoft|google|amazonaws|cloudflare|akamai)")
| bin _time span=1s
| stats count by src_ip dest _time
| streamstats current=f last(_time) as prev_time by src_ip dest
| eval interval=_time-prev_time
| stats count avg(interval) as avg_interval stdev(interval) as stdev_interval
  min(interval) as min_interval max(interval) as max_interval by src_ip dest
| where count > 50
| eval cv=stdev_interval/avg_interval
| where cv < 0.20 AND avg_interval > 30 AND avg_interval < 86400
| sort cv
| table src_ip dest count avg_interval stdev_interval cv
```

### KQL——Microsoft Sentinel 信标检测
```kql
DeviceNetworkEvents
| where Timestamp > ago(24h)
| where RemoteIPType == "Public"
| summarize ConnectionTimes=make_list(Timestamp), Count=count() by DeviceName, RemoteIP, RemoteUrl
| where Count > 50
| extend Intervals = array_sort_asc(ConnectionTimes)
| mv-apply Intervals on (
    extend NextTime = next(Intervals)
    | where isnotempty(NextTime)
    | extend IntervalSec = datetime_diff('second', NextTime, Intervals)
    | summarize AvgInterval=avg(IntervalSec), StdDev=stdev(IntervalSec)
)
| extend CV = StdDev / AvgInterval
| where CV < 0.2 and AvgInterval > 30
| sort by CV asc
```

### Sigma 规则——信标模式检测
```yaml
title: Potential C2 Beaconing Pattern Detected
status: experimental
logsource:
    category: proxy
detection:
    selection:
        dst_ip|cidr: '!10.0.0.0/8'
    timeframe: 24h
    condition: selection | count(dst) by src_ip > 50
level: medium
tags:
    - attack.command_and_control
    - attack.t1071.001
```

## 常见场景

1. **Cobalt Strike 信标**：默认 60 秒间隔，通过 HTTPS 配置 0-50% 可调抖动。可延展 C2 配置文件可模拟合法流量模式。
2. **Sunburst/SUNSPOT**：12-14 天休眠期，然后每 12-14 分钟信标一次，带随机化抖动，旨在规避频率分析。
3. **DNS 隧道 C2**：通过 DNS TXT/CNAME 查询向攻击者控制的域名进行编码数据外泄，可通过高子域名熵和查询量检测。
4. **Sliver C2**：支持 HTTPS、mTLS 和 WireGuard 协议的现代 C2 框架，具有内置抖动支持的可配置信标间隔。
5. **合法服务滥用**：通过 Slack、Discord、Telegram 或云存储 API 进行 C2 通信，使基于目标的过滤无效。

## 输出格式

```
Hunt ID: TH-BEACON-[DATE]-[SEQ]
Source IP: [内部 IP]
Source Host: [来自 DHCP/DNS 的主机名]
Destination: [域名/IP]
Protocol: [HTTP/HTTPS/DNS]
Beacon Interval: [平均秒数]
Jitter Estimate: [百分比]
Coefficient of Variation: [变异系数值]
Connection Count: [时间窗口内的总连接数]
Data Size CV: [Payload 一致性指标]
Domain Age: [注册以来的天数]
TI Match: [是/否——来源]
Risk Score: [0-100]
Risk Level: [Critical/High/Medium/Low]
Indicators: [触发的风险因素列表]
```

