/ 技术深度调研

技术深度调研

40篇参考资料 + 11轮搜索 + 开源工具分析

# 僵尸网络自检程序 - 技术深度调研附录 > 基于 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 |