
基于 Anthropic-Cybersecurity-Skills 的 DNS C2 检测 API 实战参考熵分析、DGA 分类与隧道工具签名识别【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, 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本文是Anthropic-Cybersecurity-Skills仓库中 detecting-command-and-control-over-dns 技能的 API 参考指南。它以api-reference.md为骨架系统梳理了 MITRE ATTCK 战术映射、DNS 记录类型在 C2 场景下的载荷容量、Shannon 熵阈值分级、Iodine/dnscat2/dns2tcp/Cobalt Strike/Sliver 五种已知隧道工具的检测签名以及 DGA 特征提取、Beaconing 检测参数、Zeek/Suricata 日志字段与检测规则、Splunk SPL 查询和 Python API 函数。读者读完本文后可以直接把这些参数表和代码用于构建 SOC/SIEM 的 DNS 异常检测规则或运行仓库内配套的 agent.py 一体化检测管线。MITRE ATTCK 战术与技术映射DNS 型 C2 横跨多个 ATTCK 技术点。api-reference.md给出了本技能对应的核心映射表SKILL.md的 frontmatterskills/detecting-command-and-control-over-dns/SKILL.md#L27-L31还声明了T1071、T1095等 ID共同构成检测的威胁建模基础技术ID说明应用层协议DNST1071.004通过 DNS 协议进行 C2 通信通过替代协议外传T1048通过 DNS 隧道进行数据外泄动态解析域名生成算法T1568.002基于 DGA 的 C2 基础设施协议隧道T1572通过 DNS 隧道化任意流量加密信道T1573DNS 记录中的加密 C2 载荷从仓库的 mappings/mitre-attack/README.md 可以看到整个仓库的 817 个技能被系统映射到 MITRE ATTCKEnterprise v15框架Command and ControlTA0011与 ExfiltrationTA0010两个战术正是本技能的归属位置。这意味着在威胁情报驱动的防御threat-informed defense或紫队演练中本技能可与进攻侧技能成对使用。DNS 记录类型在 C2 中的用法与载荷容量隧道工具对记录类型的选择直接决定了检测面。api-reference.md的表给出每种记录类型的典型 C2 用途与单次查询最大数据量记录类型典型 C2 用途单次查询最大数据量ABeacon 签到、小响应IP 编码4 字节IPv4 地址AAAABeacon 签到、略大的响应16 字节IPv6 地址TXT命令投递、大载荷传输每字符串约 255 字节可多字符串CNAME子域名数据外泄、响应隧道约 253 字节MX通过 preference exchange 字段做数据隧道约 253 字节NULLIodine 隧道的主记录类型约 65535 字节SRV带端口/优先级元数据的 C2约 253 字节TXT 与 NULL 记录的载荷容量是检测的重点。SKILL.md的关键概念表也指出TXT 记录可跨多字符串承载最高 65535 字节的载荷而 NULL 记录是 Iodine 的特有指纹。实际检测中建议对 TXT、NULL、CNAME、MX、SRV、KEY 这类非常规记录类型单独建立统计基线而不是混在 A/AAAA 中统一分析。Shannon 熵阈值分级熵是 DNS 隧道检测最核心的统计特征。api-reference.md给出的分级表可以直接作为规则阈值设计的起点熵范围分类典型来源0.0 – 2.0极低单字符或琐碎标签2.0 – 3.0正常常见英文域名标签3.0 – 3.5偏高长标签或混合大小写部分 CDN3.5 – 4.0可疑Hex 编码数据、base32 编码、DGA4.0 – 4.5高DNS 隧道Iodine、dnscat2、dns2tcp4.5极高加密或 base64 编码载荷值得强调的是高熵本身不是恶意证据。CDN如 Akamai、云服务与部分合法基础设施同样会生成高熵子域名。仓库源码在agent.py中用WHITELIST_PATTERNSagent.py预置了in-addr.arpa、ip6.arpa、_domainkey、_dmarc、_spf、akadns.net、akamaiedge.net、cloudfront.net、googleapis.com、1e100.net等白名单正则用于在熵分析与 Beacon 检测前过滤误报——这是把熵阈值落地到生产环境时不可或缺的配套手段。已知隧道工具签名库api-reference.md针对五类已知工具/框架整理了编码方式、记录类型、子域名模式、熵区间与检测线索agent.py则把这些签名编译为可执行的正则agent.py。Iodine编码Base32、Base64、Base128、Raw记录类型NULL主、TXT、CNAME、MX、A子域名模式长字母数字串50 字符熵区间3.8 – 4.2检测对单一域名的高查询量、NULL 记录类型查询dnscat2编码Hex 编码、加密记录类型TXT、CNAME、MX、A子域名模式Hex 字符串16 字符可选dnscat.前缀熵区间3.5 – 4.5检测一致的查询间隔、纯 hex 子域名标签dns2tcp编码Base32记录类型TXT、KEY子域名模式Base32 字符串20 字符熵区间3.6 – 4.0检测KEY 记录类型使用、base32 字符集Cobalt Strike DNS Beacon编码Hex 编码元数据记录类型A、AAAA、TXT子域名模式短 hex 字符串8–20 字符熵区间3.2 – 4.0检测规律的 Beacon 间隔默认 60 秒、A 记录签到后跟随 TXT 下载Sliver DNS C2编码Base32/自定义记录类型A、TXT子域名模式字母数字串30 字符熵区间3.5 – 4.2检测子域名长度方差大、混合记录类型对应的正则签名实现如下agent.py中TOOL_SIGNATURESTOOL_SIGNATURES { iodine: { pattern: re.compile(r^[a-z0-9]{50,}\., re.IGNORECASE), qtypes: {NULL, TXT, CNAME, MX, A}, entropy_range: (3.8, 4.2), }, dnscat2: { pattern: re.compile(r^(dnscat\.)|^[a-f0-9]{16,}\., re.IGNORECASE), qtypes: {TXT, CNAME, MX, A}, entropy_range: (3.5, 4.5), }, dns2tcp: { pattern: re.compile(r^[a-z2-7]{20,}\., re.IGNORECASE), qtypes: {TXT, KEY}, entropy_range: (3.6, 4.0), }, cobalt_strike_dns: { pattern: re.compile(r^[a-f0-9]{8,20}\., re.IGNORECASE), qtypes: {A, AAAA, TXT}, entropy_range: (3.2, 4.0), }, sliver_dns: { pattern: re.compile(r^[a-z0-9]{30,}\., re.IGNORECASE), qtypes: {A, TXT}, entropy_range: (3.5, 4.2), }, }在analyze_entropy中当子域名同时命中正则、qtype 匹配且熵落在工具典型区间内时会额外追加 25 分的tool_sig:tool标记agent.py让熵异常升级为具体工具归因。DGA 特征提取api-reference.md定义了 10 项用于区分 DGA 域名与合法域名的统计特征及判定阈值特征说明DGA 指示Shannon 熵域名标签每字符比特数 3.5标签长度域名不含 TLD字符数 15 异常辅音比例辅音 / 总字母字符 0.7数字比例数字 / 总字符 0.3元音-辅音比元音 / 辅音 0.3Bigram 频率得分平均英文 bigram 匹配频率 0.002Hex 字符比例Hex 字符 / 总字符 0.8最大连续辅音最长辅音连续串 4唯一字符比例唯一字符 / 总字符 0.4含字典单词标签是否含英文单词无 DGA 指示SKILL.md的 ML 训练代码把特征工程扩展为 14 维向量SKILL.md在熵、长度、数字/元音/辅音比例、最长辅音串、唯一字符数与比例之外还加入了基于 Peter Norvig 英文 bigram 统计的english_bigram_score、标签数、hex 比例、数字-字母转换比、重复字符比例与特殊字符计数。agent.py中的DGA_FEATURE_COLUMNS完全对齐这 14 维agent.py训练与推理共用同一套特征提取逻辑extract_domain_features保证线上线下特征一致。Beaconing 检测参数DNS Beacon周期签到是 C2 的另一大特征。api-reference.md给出可直接落地的参数阈值参数典型阈值说明间隔规律性Jitter 平均间隔的 10%低方差表明自动化 Beacon最小查询数对同一域名 50 次查询保证统计分析的样本量时间跨度 1 小时Beacon 必须跨时间持续一致的查询大小标准差 5 字节隧道载荷大小一致夜间活动00:00–06:00 时段查询对合法用户浏览不寻常单一来源每域名 1–3 个源 IPC2 通常仅来自被攻陷主机agent.py中的detect_beaconing实现更细按(src_ip, base_domain)分组后计算相邻查询间隔用**变异系数CV标准差/均值百分比**衡量抖动CV 5% 得 40 分、 15% 得 30 分、max_jitter_pct默认 25%得 15 分超过即跳过持续超过 24 小时加 20 分、超过 4 小时加 10 分查询量 100 加 15 分平均间隔与 60/120/300/600/900/1800/3600 秒等常见 C2 间隔的 10% 范围内吻合再加 10 分agent.py。SKILL.md 的对应演示代码还额外列出一致查询大小夜间活动单一来源等维度用于人工研判补充。日志字段参考Zeek dns.log 与 Suricata EVEapi-reference.md提供了两类主流传感器日志的字段字典是编写解析器和规则时的权威参照。Zeek dns.log 字段字段类型取证用途tstime查询时间戳uidstring连接 UIDid.orig_haddr源 IP被攻陷主机id.resp_haddrDNS 解析器 IPquerystring完整查询域名qtype_namestring查询类型A、TXT、NULL、CNAMErcode_namestring响应码NOERROR、NXDOMAINanswersvector响应记录TTLsvector响应的 TTL 值rejectedbool查询是否被拒绝agent.py的parse_zeek_dns_log支持两种解析路径优先读取#fields头动态映射列无法获取头时回退到固定列位置ts0、id.orig_h2、query9、qtype_name13、answers21兼容不同版本的 Zeek 输出agent.py。Suricata EVE DNS 字段字段类型取证用途timestampstring事件时间戳ISO 8601src_ipstring源 IPdest_ipstring目的 IP解析器dns.typestringquery 或 answerdns.rrnamestring查询域名dns.rrtypestring记录类型dns.rcodestring响应码dns.answersarray响应答案记录dns.tx_idint事务 IDagent.py的parse_suricata_eve逐行解析 EVE JSON筛选event_typedns从dns.rrname/dns.rrtype提取查询并把 answers 数组展平为逗号分隔的 rdata 字符串agent.py。此外还支持 CSV 输入parse_csv_dns三种格式统一输出{timestamp, src_ip, query, qtype, answers}结构后续分析函数无需关心数据来源。Suricata 检测规则api-reference.md提供三条可直接加载的 Suricata 规则覆盖高熵查询、TXT 记录查询量、NULL 记录Iodine 指纹# 检测高熵 DNS 查询潜在隧道 alert dns any any - any any (msg:ET DNS Potential DNS Tunneling - High Entropy Query; dns.query; pcre:/^[a-z0-9]{30,}\./i; threshold:type threshold, track by_src, count 10, seconds 60; sid:9000001; rev:1;) # 检测对异常域名的 TXT 记录查询 alert dns any any - any any (msg:ET DNS Suspicious TXT Record Query Volume; dns.query; dns_query; content:|00 10|; threshold:type threshold, track by_src, count 20, seconds 60; sid:9000002; rev:1;) # 检测 NULL 记录查询Iodine 指示器 alert dns any any - any any (msg:ET DNS NULL Record Query - Possible Iodine Tunnel; dns.query; content:|00 0a|; threshold:type threshold, track by_src, count 5, seconds 60; sid:9000003; rev:1;)其中|00 10|TXT16与|00 0a|NULL10是 DNS 记录类型在报文中的二进制表示dns_query关键字限定匹配只出现在查询部分threshold用于按源 IP 做频率抑制避免每条查询都告警。SKILL.md的 Step 8 提供了更完整的 suricata-dns-c2.rules增加了 Iodine 的pcre:/^[a-z0-9]{50,}\.[a-z0-9.-]$/i长子域名规则、dnscat2 的dnscat.握手与 hex 数据通道规则、Cobalt Strike 的^[a-f0-9]{12,}规则以及 TXT 载荷暂存域名stage|payload|cmd|exec|download|update|config规则SID 为 2030001–2030007。Splunk SPL 查询api-reference.md给出了两条 SPL用于在 SIEM 中直接跑 DNS 隧道与 Beacon 检测# 高熵 DNS 子域名检测 indexdns sourcetypezeek_dns | eval subdomainmvindex(split(query,.),0) | eval sub_lenlen(subdomain) | where sub_len 20 | eval entropy0 | stats count dc(query) as unique_queries avg(sub_len) as avg_len by src_ip query_type | where count 50 AND avg_len 25 # 通过标准差检测 DNS beaconing indexdns sourcetypezeek_dns | sort 0 _time | streamstats currentf last(_time) as prev_time by src_ip query | eval interval_time - prev_time | stats count avg(interval) as avg_interval stdev(interval) as stdev_interval by src_ip query | where count 50 AND stdev_interval (avg_interval * 0.1) | table src_ip query count avg_interval stdev_interval第二条正是Jitter 平均间隔 10%参数的 SPL 表达stdev_interval avg_interval * 0.1。SKILL.md的 Step 7 进一步补充了生产级变体SKILL.md排除_domainkey、_dmarc、_spf合法 TXT 查询、用bin _time span60sstreamstats window10计算 CV、对 NULL/KEY/SRV/CNAME/MX 非常规记录类型单独统计以及 Elastic KQL 版本的dns.question.name长度与event.dataset: zeek.dns高量查询规则。Python API 核心函数api-reference.md给出了熵计算与 DGA 特征提取的最小实现import math from collections import Counter # Shannon 熵计算 def shannon_entropy(data): counter Counter(data) length len(data) return -sum((c / length) * math.log2(c / length) for c in counter.values()) # DGA 特征提取 def extract_features(domain): return { length: len(domain), entropy: shannon_entropy(domain), digit_ratio: sum(c.isdigit() for c in domain) / len(domain), consonant_ratio: sum(c in bcdfghjklmnpqrstvwxyz for c in domain.lower()) / max(sum(c.isalpha() for c in domain), 1), }在仓库中这一 API 被 agent.py 完整工程化。命令行用法如下详见agent.py的main()# 完整检测熵 Beacon TXT DGA python agent.py --dns-log /path/to/dns.log --format zeek python agent.py --dns-log /path/to/eve.json --format suricata python agent.py --dns-log /path/to/queries.csv --format csv # 单模式运行 python agent.py --mode entropy --dns-log dns.log --format zeek python agent.py --mode beacon --dns-log dns.log --format zeek python agent.py --mode txt --dns-log dns.log --format zeek # 训练 DGA 分类模型并分类 python agent.py --mode train-dga --legit-domains legit.txt --dga-domains dga.txt python agent.py --mode dga-classify --dns-log dns.log --format zeek --dga-model dga_model.pkl可调参数包括--entropy-threshold默认 3.5、--length-threshold默认 30、--beacon-min-queries默认 10、--beacon-max-jitter默认 25单位 %、--dga-threshold默认 0.65DGA 概率报告阈值、--model-typerandom_forest / gradient_boosting默认 random_forest输出通过--output默认dns_c2_report.json落盘。运行时依赖numpy、scikit-learn、tldextractSKILL.md 还列出pandas与dnspython缺少 scikit-learn 时会自动降级为基于特征的启发式打分并打印 WARNagent.py。整合检测管线与输出报告SKILL.md的 Step 6 给出了完整管线的架构SKILL.md数据源Zeek dns.log / Suricata EVE / 递归解析器 / 被动 DNS / PCAP / EDR DNS 遥测→ 预处理时间戳解析、子域名提取、base domain 解析、白名单过滤→ 并行执行熵分析、Beacon 检测、DGA 分类、TXT 载荷分析、工具签名匹配与被动 DNS 富化 → 相关性引擎加权评分熵 30% Beacon 25% DGA 20% TXT 载荷 15% 签名 10%总分 60 告警、 40 调查→ 告警与响应SIEM 告警、DNS RPZ 阻断、EDR 隔离、工单生成。agent.py的print_report与 JSON 输出完整落实了这一设计dns_c2_report.json包含entropy_analysis前 100 条、beaconing前 50 条、txt_analysis前 50 条、dga_classification前 100 条四个独立区块agent.py。终端报告则输出 CRITICAL/HIGH/MEDIUM 三级定级与 RECOMMENDED ACTIONS——包括在 DNS RPZ/防火墙阻断高危域名、隔离源主机、阻断高置信 DGA 域名、部署 Suricata 隧道签名等可直接执行的处置建议agent.py。实战场景与已知陷阱SKILL.md提供两个典型场景可作为上述 API 的端到端演练场景一调查内部主机 DNS 隧道。SOC 收到告警主机 10.1.5.42 一小时内对c8a3f1e2.tunnelsvc.example.com发起 15,000 次 TXT 查询正常约 200 次/小时。处置流程为从 Zeek dns.log 提取 24 小时查询 → 子域名熵分析预期 4.0→ 检查查询间隔的 Beacon 特征 → 检查 TXT 响应大小异常 → 对照工具签名 → 查询被动 DNS 确认域名注册信息与历史解析 → 确认后加入 RPZ 并隔离主机 → 抓包取证。陷阱包括阻断前必须先取证、勿将所有高熵 DNS 视为恶意CDN 子域名同样高熵、检查是否存在多个隧道域名、不要只盯 DNS 信道而漏掉初始入侵向量、检查其他主机是否有类似模式横向移动。场景二为 SOC 构建 DGA 检测模型。用 Tranco/Alexa Top 1M 作合法样本、DGArchive/OSINT 作 DGA 样本 → 提取字符级特征 → 训练随机森林与梯度提升并做 5 折交叉验证 → 以评分富化的形式部署到 SIEM → 设置阈值DGA 概率 0.85 告警、 0.65 生成调查工单→ 建立 CDN/云服务白名单 → 每月用新样本重训。陷阱包括只在一个 DGA 家族上训练会漏掉字典型 DGA如 Suppobox 熵很低、未白名单化带随机子域名的 CDN、阈值过低导致误报淹没 SOC、未处理 punycode/国际化域名、缺乏分析师反馈闭环用于重训。总结api-reference.md为 DNS C2 检测提供了从威胁建模MITRE 映射、统计特征熵阈值、DGA 特征、Beacon 参数、工具签名五种已知隧道工具、日志字段Zeek/Suricata、检测规则Suricata Splunk SPL到 Python API 的完整参数体系。配合 SKILL.md 的分步工作流与 agent.py 的可执行实现安全团队可以直接在自有网络中部署熵分析、Beacon 检测、TXT 载荷分析、DGA 分类与签名匹配五合一检测能力。需要提醒的是Iodine、dnscat2、dns2tcp 属于双用途工具可绕过强制门户、用于安全研究也可用于 C2 信道与外泄只应在获得授权监控的网络中部署相关检测测试隧道工具同样需要明确授权。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, 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),仅供参考