La interfaz está localizada; las descripciones y documentos de las Skills se traducen automáticamente con IA a su idioma. El código, los comandos, rutas y términos técnicos se mantienen en el original, y prevalece el documento del autor.
Explorar Skills
Productividad · SKILL.md

detecting-exfiltration-over-dns-with-zeek

detecting-exfiltration-over-dns-with-zeek

通过分析 Zeek dns.log 中的高熵值子域名和异常查询模式,检测基于 DNS 的数据渗出

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentación de la Skill

GitHub

name: detecting-exfiltration-over-dns-with-zeek description: 通过分析 Zeek dns.log 中的高熵值子域名和异常查询模式,检测基于 DNS 的数据渗出 domain: cybersecurity subdomain: network-security tags: [dns-exfiltration, zeek, entropy-analysis, threat-hunting] version: "1.0" author: mahipal license: Apache-2.0

概述

DNS 隧道与渗出(DNS tunneling/exfiltration)是攻击者绕过防火墙和 DLP(数据泄露防护)控制的技术,通过将窃取的数据编码到 DNS 查询的子域名中来实现。合法 DNS 查询的熵值和长度具有可预测的规律,而渗出查询的编码数据具有高香农熵(Shannon entropy)、异常长的子域名标签,以及每个父域名下大量唯一子域名。

本技能分析 Zeek dns.log 文件(TSV 格式)以检测渗出指标。智能体对每个子域名组件计算香农熵,识别超过 63 字符 DNS 标签限制的查询,统计每个父域名的唯一子域名数量,并标记超过可配置阈值的域名。这些技术可检测 dnscat2、iodine、dns2tcp 以及自定义 DNS 隧道工具。

前置条件

  • Python 3.9 或更高版本,使用标准库中的 math 和 collections 模块
  • 标准字段头的 TSV 格式 Zeek dns.log 文件
  • 由 Zeek 5.0+ 处理的网络捕获数据
  • 了解 DNS 协议结构和查询类型

步骤

  1. 解析 Zeek dns.log 头部:读取 TSV 文件,提取 #fields 头部行,确定 ts、id.orig_h、query、qtype_name、rcode_name 和 answers 的列位置。

  2. 提取并分解查询:对每个 DNS 查询,将 FQDN 拆分为子域名标签和父域名。跳过已知安全域名和内部区域的查询。

  3. 计算香农熵:计算每个子域名标签的信息熵。合法子域名的熵值通常低于 3.5,而编码/加密数据的熵值高于 4.0。

  4. 检测长标签:标记超过 52 字符的 DNS 标签(接近 63 字符上限)。长标签是数据隧道的强烈指标。

  5. 统计每域名唯一子域名数量:跟踪每个父域名收到的不同子域名数量。在日志窗口内超过 50 个唯一子域名的域名为可疑域名。

  6. 识别查询量异常:按源 IP 和域名计算每分钟查询数。渗出工具会产生持续的高频查询流,不同于正常的浏览行为。

  7. 评分并排名域名:将熵值、标签长度、唯一性数量和查询量合并为综合风险评分。按评分对域名排名并输出最可疑的域名。

  8. 生成检测报告:输出包含标记域名、证据指标、来源 IP 及建议响应操作的 JSON 报告。

预期输出

{
  "analysis_summary": {
    "total_queries_analyzed": 145832,
    "unique_domains": 3421,
    "flagged_domains": 3,
    "entropy_threshold": 3.5
  },
  "flagged_domains": [
    {
      "domain": "data.evil-c2.com",
      "unique_subdomains": 892,
      "avg_entropy": 4.72,
      "max_label_length": 61,
      "source_ips": ["10.0.1.45"],
      "risk_score": 9.4,
      "indicators": ["high_entropy", "long_labels", "high_subdomain_count"]
    }
  ]
}
Skills guardadas