news 2026/9/12 8:55:20

基于 Shannon 熵、DGA 机器学习与 Beaconing 分析的 DNS C2 隧道检测实战指南(Anthropic-Cybersecurity-Skills)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 Shannon 熵、DGA 机器学习与 Beaconing 分析的 DNS C2 隧道检测实战指南(Anthropic-Cybersecurity-Skills)

基于 Shannon 熵、DGA 机器学习与 Beaconing 分析的 DNS C2 隧道检测实战指南(Anthropic-Cybersecurity-Skills)

【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills

导读

本篇文章以 detecting-command-and-control-over-dns 技能为核心,系统讲解如何利用 Shannon 熵分析、TXT 记录载荷检测、ML 驱动的 DGA 域名分类、DNS Beaconing 周期性识别以及 Zeek/Suricata 签名,检测 Iodine、dnscat2、dns2tcp、Cobalt Strike DNS Beacon、Sliver DNS 等工具构造的 DNS 隧道 C2 通信。读完本文,你将掌握从 DNS 日志采集、特征提取、威胁评分到 SIEM 规则落地与应急响应的完整检测流水线,并可直接复用仓库中的可执行 Agent 脚本 scripts/agent.py 与配套的 API 参考文档。

授权与免责声明:本文提到的 DNS 隧道工具(Iodine、dnscat2、dns2tcp 等)属于双用途工具,既有绕过强制门户、安全研究等合法用途,也可能被用作 C2 通道与数据外渗。检测工作只能在你有权监控的网络中开展;测试隧道工具必须获得明确授权。


何时使用该技能

该技能适用于以下安全分析场景:

  • 调查疑似用于 C2 通信或数据外渗的 DNS 隧道;
  • 分析 DNS 查询日志中子域名字符串中的编码载荷迹象;
  • 使用统计或 ML 方法将域名分类为 DGA 生成域名与合法域名;
  • 检测 DNS Beaconing 模式(固定间隔、一致的查询大小);
  • 狩猎 Iodine、dnscat2、dns2tcp、Cobalt Strike DNS、Sliver DNS 流量;
  • 监控 TXT 记录被滥用于命令投递或分阶段载荷下载;
  • 为 SOC/SIEM 构建 DNS 异常检测规则。

不要使用该技能处理通用 DNS 性能监控或 DNS 配置审计,这些应交给 DNS 健康监控工具;HTTP/HTTPS 协议的 C2 检测则属于 Web 协议流量分析技能范畴。

前置条件

在开始检测工作前,需要准备以下数据源与工具环境:

  • 来自递归解析器、Zeek/Bro、Suricata 或被动 DNS 探针的 DNS 查询日志;
  • Python 3.9+,并安装numpyscikit-learnpandastldextractdnspython
  • Zeek(前身 Bro)的 dns.log 输出,或 Suricata 的 DNS EVE JSON 日志;
  • SIEM 访问权限(Splunk、Elastic、Microsoft Sentinel)用于日志关联;
  • 被动 DNS 数据库(CIRCL pDNS、Farsight DNSDB 或内部 pDNS)用于富化;
  • Wireshark/tshark 用于数据包级 DNS 检查;
  • 已知良好域名白名单(Alexa/Tranco top 1M 或 Majestic Million)。

Step 1:采集并解析 DNS 查询日志

从网络传感器摄取 DNS 流量并解析为可分析格式,是整条检测流水线的第一步。以下命令覆盖 Zeek、Suricata、tshark 三种主流数据源。

# Zeek - 提取 dns.log 字段 # 默认 Zeek dns.log 列: # ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto trans_id rtt query # qclass qclass_name qtype qtype_name rcode rcode_name AA TC RD RA Z # answers TTLs rejected # 过滤潜在可疑的记录类型 cat dns.log | zeek-cut ts id.orig_h query qtype_name answers rcode_name | \ grep -E "TXT|NULL|CNAME|MX" > suspicious_qtypes.log # 提取唯一查询域名 cat dns.log | zeek-cut query | sort -u > unique_domains.txt # Suricata EVE JSON - 提取 DNS 事件 cat eve.json | jq -r 'select(.event_type=="dns") | [.timestamp, .src_ip, .dns.rrname, .dns.rrtype, .dns.rcode] | @tsv' > dns_events.tsv # tshark - 从 pcap 提取 DNS 查询 tshark -r capture.pcap -T fields \ -e frame.time -e ip.src -e ip.dst \ -e dns.qry.name -e dns.qry.type \ -e dns.resp.type -e dns.txt \ -Y "dns" > dns_queries.tsv # 按域名统计查询次数(发现高流量目标) cat dns.log | zeek-cut query | \ awk -F. '{print $(NF-1)"."$NF}' | \ sort | uniq -c | sort -rn | head -50

关键日志字段的取证用途

从源码层面看,仓库 scripts/agent.py 内置了三种日志解析器(parse_zeek_dns_logparse_suricata_eveparse_csv_dns),对应--format zeek|suricata|csv参数。解析结果统一归一化为timestamp / src_ip / query / qtype / answers五元组,供下游各检测器共用。

根据 API 参考文档,Zeek dns.log 中值得重点关注的字段包括:

字段类型取证用途
tstime查询时间戳
uidstring连接 UID
id.orig_haddr源 IP(受害主机)
id.resp_haddrDNS 解析器 IP
querystring完整查询域名
qtype_namestring查询类型(A、TXT、NULL、CNAME)
rcode_namestring响应码(NOERROR、NXDOMAIN)
answersvector响应记录
TTLsvector应答 TTL 值
rejectedbool查询是否被拒绝

Suricata EVE DNS 事件则包含timestampsrc_ipdest_ipdns.type(query/answer)、dns.rrnamedns.rrtypedns.rcodedns.answersdns.tx_id等字段。

DNS 记录类型在 C2 中的典型用途

记录类型C2 典型用途单次查询最大数据量
ABeacon 回连、小响应(IP 编码)4 字节(IPv4 地址)
AAAABeacon 回连、稍大响应16 字节(IPv6 地址)
TXT命令投递、大载荷传输每条字符串约 255 字节,可多串拼接
CNAME子域名数据外渗、响应隧道约 253 字节
MX通过 preference + exchange 字段传数据约 253 字节
NULLIodine 隧道主用记录类型约 65535 字节
SRV携带端口/优先级元数据的 C2约 253 字节

TXT 记录之所以成为 C2 载荷投递的首选,是因为它支持跨多条字符串累积,最大可达 65535 字节——这为分阶段载荷下载和命令回传提供了远超 A 记录的容量。


Step 2:DNS 查询的 Shannon 熵分析

熵分析是识别隧道流量的第一道统计关卡。合法域名标签通常由可发音词汇构成、字符分布偏斜,熵值较低;而隧道工具在子域名中编码的加密或编码数据近似随机,熵值显著升高。

阈值参考

根据 API 参考文档,Shannon 熵阈值可按如下区间划分:

熵范围分类典型来源
0.0 – 2.0极低单字符或平凡标签
2.0 – 3.0正常常见英文域名标签
3.0 – 3.5偏高长标签或大小写混合标签、部分 CDN
3.5 – 4.0可疑Hex 编码数据、base32 编码、DGA
4.0 – 4.5DNS 隧道(Iodine、dnscat2、dns2tcp)
4.5+极高加密或 base64 编码载荷

熵分析参考实现

技能文档 SKILL.md 给出了完整的参考实现(核心函数shannon_entropyextract_subdomainanalyze_dns_entropy)。其评分逻辑为:

  • 熵值超过阈值(默认 3.5,常用 3.5–4.0)时,按(熵-阈值)*25累加分数;
  • 子域名长度超过阈值(默认 30,常用 30–50)时按超出长度加分;
  • 标签数量超过 4 个时加分;
  • Hex 字符占比 > 0.85 且长度 > 20 判定为hex_encoded(+20 分);
  • base32 字符集占比 > 0.95 且长度 > 20 判定为base32_encoded(+15 分)。

已知隧道工具签名

技能文档内置了 TOOL_SIGNATURES 字典,仓库 agent.py 的对应常量还额外加入了 Sliver DNS:

工具子域名特征常见记录类型典型熵范围
Iodine^[a-z0-9]{50,}长类 Hex 子域名NULL、TXT、CNAME、MX、A3.8 – 4.2
dnscat2^dnscat\.^[a-f0-9]{16,}TXT、CNAME、MX、A3.5 – 4.5
dns2tcp^[a-z2-7]{20,}base32 编码TXT、KEY3.6 – 4.0
Cobalt Strike DNS^[a-f0-9]{12,}\.A、AAAA、TXT3.2 – 4.0
Sliver DNS^[a-z0-9]{30,}字母数字串A、TXT3.5 – 4.2

这些签名在 agent.py 中以编译后的正则(re.compile)+ 记录类型集合 + 熵区间三元组的形式存储,熵分析时一旦命中即追加tool_sig:<tool_name>标志并加 25 分。对应源码见 scripts/agent.py。

降低误报的关键:白名单

agent.py 内置了WHITELIST_PATTERNS正则列表,自动跳过.in-addr.arpa.ip6.arpa_domainkey_dmarc_spf以及 Akamai(akadns.netakamaiedge.net)、CloudFront、Google APIs、Windows/Azure 等 CDN 与云服务的高熵子域名模式,从根本上减少 CDN 类误报。这一点对生产环境落地至关重要——CDN 域名的随机子域名天然具备高熵特征,若不白名单化,告警量将不可控。


Step 3:TXT 记录载荷检测

TXT 记录被滥用于 C2 命令投递或分阶段载荷下载,是该技能的重点检测维度。检测函数analyze_txt_record与批量入口analyze_txt_records_bulk覆盖以下指标:

  1. 超长 TXT 记录:长度 > 500 字节即告警(正常 TXT 用于 SPF/DKIM/域名验证,通常很短);
  2. 高熵载荷:熵 > 4.5 且长度 > 100,提示编码/加密数据;
  3. Base64 检测:匹配^[A-Za-z0-9+/]{40,}={0,2}$后尝试解码,并检查:
    • MZ头 → PE 可执行文件(severity: critical);
    • \x7fELF头 → ELF 可执行文件(severity: critical);
    • PowerShell stager 特征(Invoke-ExpressionIEX(New-Object System.NetDownloadStringFromBase64StringStart-Process-encpowershell.*-e)→ critical;
  4. Hex 编码载荷:纯 Hex 字符串(如^[a-f0-9]{32,}$)提示 Cobalt Strike beacon 配置;
  5. 多段 Base64 拼接:检测到 3 段以上[A-Za-z0-9+/]{50,}={0,2}块提示分阶段载荷投递。

为压制误报,函数内置合法 TXT 模式白名单:v=spf1v=DKIM1v=DMARC1google-site-verification=MS=docusign=apple-domain-verification=facebook-domain-verification=_globalsign-domain-verification=等命中即判为合法。


Step 4:基于机器学习的 DGA 域名分类

DGA(域名生成算法)是恶意软件生成伪随机域名进行 C2 汇合的关键技术,其核心难点在于域名规模庞大导致基于域名黑名单的阻断不可行,只能依赖统计与 ML 分类。

特征工程

extract_domain_features为每个域名提取 14 维数值特征(剔除 TLD,聚焦 SLD+子域名):

  • Shannon 熵;
  • 域名长度;
  • 数字占比、元音占比、辅音占比;
  • 最长连续辅音序列;
  • 与英语的 N-gram 频率偏差(基于 Peter Norvig 英文高频二元组表,如th=0.0356he=0.0307);
  • 不同字符数及占比;
  • 标签数量;
  • Hex 字符占比;
  • 数字-字母转换次数占比;
  • 重复字符占比、特殊字符数等。

从 API 参考文档 的 DGA 特征表可以归纳各维度的 DGA 倾向判据:熵 > 3.5、标签长度 > 15、辅音占比 > 0.7、数字占比 > 0.3、元音/辅音比 < 0.3、英文二元组得分 < 0.002、Hex 字符占比 > 0.8、最长辅音序列 > 4、唯一字符占比 < 0.4、标签含词典词汇为否。

模型训练与评估

train_dga_classifier支持两种模型:

  • RandomForestClassifiern_estimators=200, max_depth=15, min_samples_split=5, n_jobs=-1
  • GradientBoostingClassifiern_estimators=200, max_depth=6, learning_rate=0.1, min_samples_split=10

训练流程为:特征提取 →StandardScaler标准化 → 80/20 分层划分(random_state=42)→ 训练 → 5 折交叉验证(F1 评分),并输出 accuracy、DGA 类 precision/recall/F1、混淆矩阵、特征重要性排序。注意 agent.py 中train_dga_model要求合法域与 DGA 域各不少于 100 条,否则拒绝训练。

classify_domains_dga使用predict_proba输出 DGA 概率,阈值可调(默认 0.65);agent.py 中概率 > 0.85 标记为high置信度、0.65–0.85 为medium。该阈值即 SIEM 部署时的分级告警依据。


Step 5:DNS Beaconing 模式检测

Beaconing 是 C2 回连的标志性行为:受害主机以固定的时间间隔向 C2 域名发起 DNS 查询。检测函数detect_beaconing的核心思路是按(源 IP, 基域名)分组,计算查询时间戳间隔的均值、标准差与变异系数(CV)。

检测参数

参数典型阈值说明
间隔规律性抖动 < 平均间隔的 10%低方差提示自动化 Beacon
最小查询数同一域名 > 50 次保证统计有效性
时间跨度> 1 小时Beacon 须跨时间持续
查询大小一致性标准差 < 5 字节隧道载荷大小稳定
夜间活动00:00–06:00 有查询偏离正常用户浏览行为
单一来源每域名 1–3 个源 IPC2 通常仅来自受害主机

评分逻辑

  • CV < 5% 加 40 分(very_low_jitter),< 15% 加 30 分,< 25%(max_jitter_pct默认值)加 15 分,超过则直接剔除;
  • 活跃时长 > 24 小时加 20 分,> 4 小时加 10 分;
  • 查询量 > 100 加 15 分,> 50 加 10 分;
  • 平均间隔落在常见 C2 间隔(60s、120s、300s、600s、900s、1800s、3600s)±10% 范围内加 10 分(common_c2_interval)。

检测间隔默认限定在 10 秒到 7200 秒(2 小时)之间,活跃隧道(亚秒级间隔)与超长周期 Beacon 都会进入检测范围;时间戳解析支持 ISO 8601 及多种格式,并兼容 epoch 秒。


Step 6:集成式 DNS C2 检测流水线

技能文档 SKILL.md 给出了将全部检测器串联的流水线架构:

数据源 → 预处理 → 并行检测(熵分析 / Beaconing / DGA)→ 并行检测(TXT 载荷 / 工具签名 / 被动 DNS 富化) → 关联引擎 → 告警与响应
  • 数据源:Zeek dns.log、Suricata EVE、递归解析器、被动 DNS、PCAP、EDR DNS 遥测;
  • 预处理:时间戳解析、子域名提取、FQDN 归一化、基域名解析、白名单查询;
  • 关联引擎:加权综合评分熵(30%) + Beacon(25%) + DGA(20%) + TXT 载荷(15%) + 签名(10%),阈值分数 > 60 告警、> 40 调查
  • 告警与响应:生成含全部证据的 SIEM 告警、在 DNS 防火墙/RPZ 中阻断域名、通过 EDR 隔离终端、创建含 IOC 的事件工单。

开箱即用的 Agent 脚本

仓库提供了一个可直接运行的统一实现 scripts/agent.py,将上述各检测器整合进 CLI:

# 全量分析 Zeek 日志 python agent.py --dns-log /path/to/dns.log --format zeek # 全量分析 Suricata EVE JSON python agent.py --dns-log /path/to/eve.json --format suricata # 仅运行熵分析 python agent.py --mode entropy --dns-log dns.log --format zeek # 训练 DGA 分类模型 python agent.py --mode train-dga --legit-domains legit.txt --dga-domains dga.txt \ --model-type random_forest --output-model dga_model.pkl # 使用已训练模型做 DGA 分类 python agent.py --mode dga-classify --dns-log dns.log --format zeek \ --dga-model dga_model.pkl --dga-threshold 0.65

关键 CLI 参数:--entropy-threshold(默认 3.5)、--length-threshold(默认 30)、--beacon-min-queries(默认 10)、--beacon-max-jitter(默认 25)、--dga-threshold(默认 0.65)、--output(默认dns_c2_report.json)。依赖安装为pip install numpy scikit-learn tldextract

full模式依次执行熵分析、Beacon 检测、TXT 记录分析、DGA 分类,最终调用print_report输出分级报告,同时将结果以 JSON 写入--output指定路径,便于与 SIEM 或编排平台集成。


Step 7:SIEM 检测规则

将上述检测逻辑固化为 SIEM 检索语句,是 SOC 长期运营的落脚点。技能文档提供了 Splunk SPL、Elastic KQL 与 Zeek 脚本三种形态。

Splunk SPL

-- 高熵子域名查询 index=dns sourcetype="bro:dns:json" OR sourcetype="suricata:dns" | eval subdomain=mvindex(split(query,"."),0) | eval sub_len=len(subdomain) | where sub_len > 30 | eval char_counts=mvmap(split(subdomain,""),1) | lookup dns_entropy_lookup subdomain OUTPUT entropy | where entropy > 3.5 | stats count as query_count dc(query) as unique_queries avg(sub_len) as avg_sub_len values(query) as sample_queries by src_ip, domain | where query_count > 20 | sort -query_count -- DNS TXT 记录滥用 index=dns (qtype="TXT" OR qtype_name="TXT") NOT (query="*._domainkey.*" OR query="*._dmarc.*" OR query="*._spf.*") | stats count as txt_queries dc(query) as unique_txt_queries values(query) as domains by src_ip | where txt_queries > 50 | sort -txt_queries -- DNS Beaconing(固定间隔查询) index=dns sourcetype="bro:dns:json" | bin _time span=60s | stats count by src_ip, query, _time | streamstats window=10 current=t avg(count) as avg_count stdev(count) as std_count by src_ip, query | eval cv = if(avg_count>0, (std_count/avg_count)*100, 100) | where cv < 20 AND avg_count > 0 | stats count as beacon_windows avg(cv) as avg_jitter min(_time) as first_seen max(_time) as last_seen by src_ip, query | where beacon_windows > 10 | sort -beacon_windows -- 异常记录类型量(NULL、KEY、SRV 用于隧道) index=dns (qtype_name="NULL" OR qtype_name="KEY" OR qtype_name="SRV" OR qtype_name="CNAME" OR qtype_name="MX") NOT qtype_name="A" NOT qtype_name="AAAA" NOT qtype_name="PTR" | stats count by src_ip, qtype_name, query | where count > 10 | sort -count

Elastic KQL

-- 长子域名查询(潜在隧道) dns.question.name: * and not dns.question.name: *.in-addr.arpa | where length(dns.question.subdomain) > 40 -- 单域名高查询量 event.dataset: "zeek.dns" or event.dataset: "suricata.dns" | stats count by source.ip, dns.question.registered_domain | where count > 500 -- 对非标准域名的 TXT 查询 dns.question.type: "TXT" and not dns.question.name: (*._domainkey.* or *._dmarc.* or *._spf.*)

Zeek 脚本检测器

技能文档提供了完整的dns_tunnel_detect.zeek脚本(详见 SKILL.md),定义了三种 Notice 类型:

  • DNS_Tunneling_Suspected
  • DNS_High_Entropy_Query(子域名长度 > 40 且熵 > 3.5);
  • DNS_Excessive_TXT_Queries(单个源 IP 在 5 分钟窗口内 TXT 查询 ≥ 50 次)。

脚本通过const ... &redef暴露可调阈值(entropy_threshold=3.5subdomain_length_threshold=40txt_query_threshold=50tracking_interval=5min),并在dns_request事件中完成 TXT 计数与子域名熵计算的实时判定。Zeek dns.log 的完整字段定义可参考 API 参考文档 中的字段表。


Step 8:针对已知 DNS C2 工具的 Suricata 规则

Suricata 规则将熵统计与签名检测转化为实时告警。技能文档的suricata-dns-c2.rules包含 7 条核心规则,每条都结合了dns.query的 PCRE 正则、dns_query的记录类型匹配(如|00 0a|表示 NULL、|00 10|表示 TXT)与threshold抑制参数:

SID规则主题关键匹配逻辑
2030001Iodine 隧道子域名^[a-z0-9]{50,}+ NULL 查询
2030002dnscat2 握手子域名含dnscat.
2030003dnscat2 数据通道子域名^[a-f0-9]{16,}+ TXT 查询
2030004Cobalt Strike A 记录子域名^[a-f0-9]{12,}+ 60 秒内 20 次阈值
2030005过量 TXT 查询300 秒内 50 次 TXT 阈值
2030006超长子域名52+ 字符子域名,60 秒限 1 次
2030007TXT 载荷分阶段请求子域名前缀匹配stage|payload|cmd|exec|download|update|config

API 参考文档 额外提供了 3 条补充规则(高熵查询、可疑 TXT 查询量、NULL 记录查询),SID 为 9000001–9000003,可作为自建规则集的基础。


核心概念速查

术语定义
DNS 隧道在 DNS 查询/响应中编码数据构建隐蔽通信通道,绕过允许 DNS 流量的防火墙
Shannon 熵度量字符串随机性的信息论指标;合法域名通常低于 3.5,编码隧道数据超过 3.8–4.5
DGA恶意软件算法化生成数千个伪随机域名用于 C2 汇合,使基于域名的阻断不切实际
DNS Beaconing受害主机到 C2 域名的规律周期查询,表现为一致的查询间隔与低时序抖动
TXT 记录滥用用 TXT 记录投递编码命令或分阶段载荷,利用其大容量特性(多字符串累计可达 65535 字节)
被动 DNS(pDNS)通过监控 DNS 流量积累的历史解析数据库,用于识别基础设施复用与域名历史
RPZ递归解析器层的 DNS 防火墙机制,可实时注入覆盖响应以阻断恶意域名
变异系数(CV)标准差除以均值(百分比);用于度量 Beacon 抖动,CV 越低时序越规律(越可疑)
NXDOMAIN查询域名不存在的响应码;单主机高 NXDOMAIN 率提示 DGA 活动(多数生成域名未注册)

实战场景

场景一:调查内网主机的疑似 DNS 隧道

背景:DNS 防火墙告警显示内网主机10.1.5.42在一小时内向c8a3f1e2.tunnelsvc.example.com发起 15000+ 次 TXT 类型 DNS 查询,子域名长且随机;该主机正常 DNS 量约 200 次/小时。

调查步骤

  1. 从 Zeek dns.log 提取 10.1.5.42 过去 24 小时的全部 DNS 查询;
  2. 对子域名做熵分析——隧道编码数据预期 Shannon 熵 > 4.0;
  3. 检查查询时间间隔的 Beaconing 特征(活跃隧道通常为亚秒级);
  4. 检查 TXT 响应的大小异常(隧道工具倾向于使用最大尺寸的 TXT 响应);
  5. 将子域名模式与已知工具签名(Iodine、dnscat2、dns2tcp)比对;
  6. 查询被动 DNS 获取tunnelsvc.example.com的注册日期、NS 记录与历史解析;
  7. 确认后将域名加入 DNS RPZ 黑名单,并通过 EDR 隔离终端;
  8. 抓取完整数据包供取证分析隧道载荷内容。

易犯错误

  • 在取证前就阻断域名(需要保留数据包捕获证据);
  • 认为所有高熵 DNS 都是恶意的(Akamai 等 CDN 子域名天然高熵);
  • 未检查是否存在多个隧道域名(攻击者可能备有回退 C2 通道);
  • 只聚焦 DNS 通道而遗漏初始入侵向量;
  • 未检查其他主机是否存在相似模式(横向移动可能已经发生)。

场景二:为 SOC 构建 DGA 检测模型

背景:威胁情报团队确认某僵尸网络家族使用 DGA 生成 C2 域名,SOC 需要自动化分类 DNS 查询。

实施路径

  1. 收集训练数据:合法域名用 Tranco/Alexa top 1M,DGA 域名用 DGArchive 或 OSINT 源;
  2. 提取字符级特征:熵、长度、数字占比、辅音序列、二元组得分;
  3. 训练 Random Forest 与 Gradient Boosting 分类器,用 5 折交叉验证评估;
  4. 将模型作为评分富化部署到 SIEM(Splunk ML Toolkit 或 Elastic ML);
  5. 设定阈值:DGA 概率 > 0.85 产生告警,> 0.65 产生调查工单;
  6. 建立已知高熵合法域名白名单(CDN、云服务)降低误报;
  7. 每月使用威胁情报源的新 DGA 样本重训。

易犯错误

  • 只针对单一 DGA 家族训练而遗漏其他家族(如 Suppobox 这类基于词典的 DGA 熵很低);
  • 未将 CDN 与云服务的随机子域名加入白名单;
  • 阈值设得过低,误报淹没 SOC;
  • 特征提取未考虑 punycode/国际化域名;
  • 部署后缺少分析师反馈回路,无法用误报标记驱动模型重训。

报告输出格式

技能文档与 agent.py 的print_report都遵循统一的报告结构,输出覆盖熵分析、Beaconing、DGA 分类、TXT 记录分析四个板块并给出分级处置建议。示例如下:

DNS C2 DETECTION ANALYSIS REPORT ==================================== Analysis Period: 2026-03-15 00:00 to 2026-03-19 23:59 Data Source: Zeek dns.log (gateway sensor) Total Queries: 14,283,501 Unique Domains: 892,041 Hosts Analyzed: 3,847 ENTROPY ANALYSIS Queries with entropy > 3.5: 2,847 (0.02%) Queries with subdomain > 40 chars: 1,203 (0.008%) Suspicious base domains: 12 [CRITICAL] tunnelsvc.example[.]com Queries: 15,247 Source: 10.1.5.42 Avg Entropy: 4.21 Avg Subdomain Length: 63 Record Types: TXT (98%), A (2%) Tool Signature: dnscat2 (hex prefix pattern match) BEACONING DETECTION Beacon patterns detected: 4 Score: 85.0 10.1.5.42 -> tunnelsvc.example[.]com Interval: 0.5s +/- 0.1s Jitter: 8.2% Duration: 18.4h DGA CLASSIFICATION Domains classified: 892,041 DGA predictions (>0.85 conf): 47 [HIGH] a8f3k2m1x9.com (DGA prob: 0.97, entropy: 3.92) TXT RECORD ANALYSIS Suspicious TXT responses: 8 [CRITICAL] cmd.staging[.]example.com TXT Length: 4,096 Entropy: 5.82 Finding: Base64-encoded PowerShell stager with IEX pattern RECOMMENDED ACTIONS [CRITICAL] Block tunnelsvc.example[.]com in DNS RPZ [CRITICAL] Isolate hosts 10.1.5.42 for forensic investigation [HIGH] Block 47 high-confidence DGA domains in DNS firewall [MEDIUM] Deploy Suricata rules for dnscat2 and Cobalt Strike signatures

agent.py 生成的 JSON 报告(--output)与终端报告结构一致,包含阈值配置、各检测器结果(截断保存,如熵结果前 100 条)及完整处置建议,方便后续自动化编排。


检测参数调优与运营建议

  • 熵阈值:在流量噪声小的内网可用 3.5 起步;流量复杂的环境建议 3.8–4.0,配合 CDN 白名单使用。
  • Beacon 抖动阈值:C2 工具通常追求规律性以保持时序可控,CV > 25% 的序列可基本排除自动化 Beacon,但也存在带随机抖动的规避实现,建议对 15%–25% 区间保留调查级告警。
  • DGA 阈值分级:0.85 以上直接告警、0.65–0.85 转入调查队列,避免低置信度结果冲击 SOC 工作负载。
  • 被动 DNS 富化:将域名首次出现时间、注册商、历史解析与现有基础设施关联,能显著提升判断置信度。
  • 反馈闭环:将分析师确认的误报/漏报持续回注训练集与白名单,实现模型的迭代优化。

延伸阅读

  • 技能完整文档:SKILL.md
  • Agent 可执行脚本:scripts/agent.py
  • API 参考与 MITRE 映射:references/api-reference.md(含 T1071.004 应用层协议:DNS、T1048 经替代协议外渗、T1568.002 DGA 动态解析、T1572 协议隧道、T1573 加密通道的完整映射)
  • 该技能所属的网络安全技能库总览:README.md
  • 本技能 frontmatter 关联的 NIST CSF 控制项:PR.IR-01(事件响应计划)、DE.CM-01(网络监控)、ID.AM-03(资产管理)、PR.DS-02(数据保护);MITRE ATT&CK 技术:T1046、T1040、T1557、T1071、T1095。

【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 8:54:11

KCP协议解析:如何实现比TCP快40%的低延迟传输

1. KCP协议概述&#xff1a;为什么我们需要另一种传输协议&#xff1f;在网络传输领域&#xff0c;TCP协议已经统治了数十年&#xff0c;几乎成为可靠传输的代名词。但当我们开发实时性要求高的应用时——比如多人竞技游戏、实时音视频通信、远程操作等场景——TCP的某些设计特…

作者头像 李华
网站建设 2026/9/12 8:53:39

春日随记:整理与记录,把平凡的一天过成值得记住的样子

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 8:53:02

如何快速驯服日志雪崩:Skynet的双通道日志体系实践

如何快速驯服日志雪崩&#xff1a;Skynet的双通道日志体系实践 【免费下载链接】skynet A lightweight online game framework 项目地址: https://gitcode.com/GitHub_Trending/sk/skynet 凌晨两点&#xff0c;磁盘告警弹出来&#xff1a;一个游戏进程一晚写出几个 GB 的…

作者头像 李华
网站建设 2026/9/12 8:48:35

蒙特卡洛法在电动汽车充电负荷计算中的应用与实践

1. 项目概述&#xff1a;蒙特卡洛法在电动汽车充电负荷计算中的应用电动汽车充电负荷计算是电力系统规划和运行中的关键问题。随着电动汽车普及率提升&#xff0c;充电行为的不确定性给电网带来了显著影响。传统确定性计算方法难以准确反映用户充电行为的随机性&#xff0c;而蒙…

作者头像 李华