数据集开放下载:带CVE标签的真实HTTP流量
我们很高兴地宣布,DataCon 2025 大数据安全分析竞赛的“漏洞攻击流量识别”赛题数据即将正式开放下载。该数据集包含带有 CVE 标签的真实 HTTP 流量,旨在为漏洞检测和网络安全领域的研究人员与开发者提供高质量的资源。
背景介绍
随着网络安全威胁日益严峻,及时识别并响应漏洞攻击已成为网络防御的关键。HTTP 流量作为网络通信的主要载体,承载着海量应用数据与潜在的安全风险。通过深入分析 HTTP 流量中的攻击行为,可以有效提升网络空间的整体防御能力。
然而,当前公开的网络流量数据集大多聚焦于 DDoS/XSS 等通用攻击类型识别、Stream/P2P 等协议类型识别或 Gmail/Skype 等服务类型识别。专门针对特定 CVE 漏洞攻击的 HTTP 流量数据集仍较为匮乏。本数据集旨在填补这一空白,推动相关技术的发展。
数据集描述
数据集分为训练集和测试集,分别存储于以下两个文件中:
train.json.gz: 训练集数据test.json.gz: 测试集数据
两个文件均为 Gzip 压缩的 JSON Lines 格式,每行代表一个独立的 HTTP 会话。训练集包含约 4 万条会话,测试集包含约 10 万条。每条会话仅包含一条或多条 HTTP 请求的原文,不包含 HTTP 响应、IP 地址、端口号等任何其他信息。所有请求均为客户端到服务器的直接请求,不含代理流量,且均为明文,未进行 HTTPS 加密。
每个会话(即每行 JSON 对象)包含以下字段:
id: 会话的唯一标识符。payload: 包含一条或多条 HTTP 请求的字符串。原始请求文本经过 zlib 压缩后,再通过 Base64 编码得到此字符串。labeled: 标志位,用于区分会话是否经过标注并用于竞赛评分。1: 表示该会话已经过标注,是计分的一部分。0: 表示该会话未经标注,仅作为背景流量。
cve_labels: CVE 标签字符串。- 对于已标注会话 (
labeled: 1):此字段包含识别出的 CVE 列表。若未发现 CVE,则为空字符串;若发现一个 CVE,则为该 CVE 编号(如CVE-2025-1234);若发现多个,则为经过排序和去重的 CVE 编号列表,以空格分隔(如CVE-2025-1234 CVE-2025-5678)。 - 对于背景流量 (
labeled: 0):此字段恒为空字符串,但会话本身仍可能包含未被发现的漏洞。
- 对于已标注会话 (
数据集中约一半的会话被标记为 labeled: 1。在这些已标注的会话中,一半至少包含一个 CVE 标签,另一半则不包含任何 CVE 标签。整个数据集共覆盖约 1000 个不同的 CVE 编号。
注意:该数据集虽然来自 DataCon 2025 大数据安全分析竞赛“漏洞攻击流量识别”赛题,但我们对数据做了一定的删减。我们提供下载的数据是赛题实际使用的数据的一个子集,包含了大约 80% 的会话和 80% 的 CVE 标签。
标签准确性
本数据集的标签由自动化规则生成,因此可能存在少量标注错误,我们估计错误率不超过 5%。已知的标注不准确的 CVE 如下:
CVE-2020-13117 CVE-2014-5137 CVE-2017-12611 CVE-2013-4810 CVE-2022-29349 CVE-2019-10173 CVE-2018-18291 CVE-2014-6278 CVE-2021-25646 CVE-2021-40655 CVE-2025-2775 CVE-2023-43208 CVE-2023-34960 CVE-2019-14322 CVE-2020-13117 CVE-2017-17309
数据生成流程
为了生成高质量的数据集,我们首先从真实网络环境中采集 HTTP 流量,随后利用内部自动化分析系统对流量进行漏洞识别与标注。最后,我们对数据进行了一系列后处理,以满足竞赛需求。
数据采集
原始数据采集自我们的蜜罐系统。我们选取了 2024 年 7 月至 2025 年 7 月间共 13 天的数据。出于商业保密原因,我们无法透露原始数据规模和蜜罐系统详情。
我们以会话为单位捕获流量,并仅保留 HTTP 请求文本。所有数据均经过严格的脱敏处理,例如,我们将请求中出现的所有服务器 IP 地址替换为统一的占位符 redacted。以下是一个脱敏后的请求示例:
GET /+CSCOE+/logon.html HTTP/1.1
Host: redacted
User-Agent: Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/44.0.2403.67 Mobile/12H321 Safari/600.1.4
Accept: */*
Accept-Language: *
Connection: keep-alive
漏洞标注
所有 HTTP 会话均通过我们内部的自动化分析系统进行漏洞识别与标注。该系统基于一套精细的人工规则,能够识别多种 CVE 及非 CVE 攻击。该系统已在生产环境稳定运行多年,准确率估计在 95% 以上,召回率估计在 85% 以上。
我们在 2025 年 8 月完成了对数据的标注,因此所有标签均为该日期之前已公开的漏洞。原始识别结果包含 CVE 编号和内部非 CVE 漏洞名。大部分会话仅有一个漏洞标签,少数会话有多个,还有一部分没有识别出任何标签(可能确实没有,也可能是漏报)。
后处理
为了满足竞赛需求,我们对原始数据和标注结果进行了一系列后处理,包括筛选、去重、分组、采样和数据集划分。
筛选:我们剔除了非 HTTP 流量、加密流量和代理请求。由于我们的标注系统无法分析加密流量,因此将其移除。代理请求大多为间接流量,与赛题目标不符,也一并剔除。
去重:为消除由自动化扫描工具产生的大量重复请求,我们以会话为单位进行了去重。在去重前,我们对请求文本进行了规范化处理(例如,合并连续的空白字符、斜杠,并将数字替换为0),以识别语义上相同但文本细节有差异的重复项。
分组与过滤:我们将流量按标签分为三组:组 1 为包含至少一个 CVE 标签的会话,组 2 为仅包含非 CVE 标签的会话,组 3 为不含任何标签的会话。我们将组 1 和组 2 的会话标记为 labeled=1(已标注),组 3 标记为 labeled=0(背景流量)。竞赛评分仅针对 labeled=1 的会话,labeled=0 的会话旨在增加分析工作量,鼓励参赛者构建自动化系统。此外,为了避免漏报对评分造成影响,我们从组 1 和组 2 中剔除了所有未识别出漏洞的请求。这导致了一个重要的数据集特征:在 labeled=1 的会话中,如果包含多条请求,那么每一条请求都至少包含一个漏洞利用。这与真实场景可能有所不同。
采样:为了平衡标签分布,我们对组 1 和组 2 的会话进行了采样。原始数据中,少数热门漏洞占据了绝大多数会话。采样后,每个标签最多出现在 4000 个会话中,虽然由于部分漏洞本身罕见,数据依然不均衡,但极端倾斜的情况得到了缓解。
数据集划分:最后,我们将数据划分为训练集和测试集。对于 labeled=1 的会话,我们特意设计了标签分布:我们挑选了一部分 CVE 标签,确保测试集包含所有这些标签,而训练集仅包含其中的 45%。这意味着测试集中存在训练集未见过的 CVE 标签,旨在模拟真实世界中识别新漏洞的场景。同时,45% 的重叠度也确保了仅依赖训练数据也能取得一定分数,从而降低了比赛难度。对于 labeled=0 的会话,我们将其随机划入训练集和测试集。最后,我们移除了所有非 CVE 标签,因为它们的名称不统一,难以进行标准化评分。
竞赛概述
本数据集为 DataCon 2025“漏洞攻击流量识别”赛题的核心。参赛者需要构建一个自动化系统,识别测试集流量中的 CVE 漏洞。虽然训练集可用于模型学习,但其包含的 CVE 种类有限,不足以覆盖测试集中的所有情况。因此,为了获得高分,参赛者需要利用公开或私有的外部资源,如 Nuclei 官方模板、Exploit-DB、Suricata 规则等,来扩展模型的识别能力。我们鼓励参赛者使用任何创新的技术、方法和数据。
竞赛要求只关注 CVE 漏洞,可以忽略 DDoS、端口扫描等其他攻击类型。一个会话被判定包含某个 CVE 的标准是:该会话中至少有一个 HTTP 请求包含了针对该 CVE 的攻击载荷、存在性扫描或利用成功性验证。间接相关的流量,如探测服务版本、获取认证信息等,不应被标记为包含该 CVE,以避免大量误报。
评分规则
竞赛中,我们提供了完整的训练集,但对测试集隐藏了 labeled 和 cve_labels 字段。参赛者需提交对测试集的预测结果,最终得分由系统自动计算,公式为:最终得分 = 回答率 × 正确率 × 100。
回答率 (answer_rate) 指参赛者提交的预测标签文件中,完成分析的HTTP会话占测试流量数据中所有HTTP会话的比例。原则上预测标签文件和测试流量数据中的会话ID应该一一对应,这时回答率为100%。如果预测标签文件中出现了测试流量数据中没有的会话ID,系统将自动忽略这些会话ID。如果预测标签文件中有会话ID缺失或重复,则这些会话视为未回答,回答率将低于100%。
正确率指用户提交的预测标签文件中,HTTP 会话的CVE漏洞识别正确的程度。为此,我们需要比对用户调教的预测标签,和测试流量数据的 cve_labels 字段。我们采用 Macro F1 得分的方式来计算正确率,它对每个标签单独计算 F1 得分,然后求平均。F1 得分是精确率 (precision) 和召回率 (recall) 的调和平均数。我们只筛选部分 HTTP 会话来计算 F1 得分,筛选条件为:必须是参赛者回答了的会话,且必须是标注了 CVE 漏洞的会话 (labeled = 1)。没有标注的会话只是增加参赛者的工作量,以鼓励自动化系统,不用作正确率的计算。无论参赛者提交了什么预测标签,都不会影响正确率。注意在比赛中,测试流量数据的 labeled 字段并未公开给参赛者,但在后台评分时是可见的。因此参赛者需要分析所有HTTP会话,但正确率计算只会考虑标注了 CVE 漏洞的会话。
竞赛结果
比赛于 2025 年 11 月 5 日至 12 日举行,共吸引了 75 支队伍提交有效成绩。参赛队伍大多来自高校和科研院所,也有部分企业队伍。第一名队伍的原始得分为 67.795,排名前 15 的队伍得分均超过 50 分。
参赛队伍采用了多样化的技术方案。大部分队伍选择了机器学习与深度学习,通过提取自定义特征(如请求方法、XSS特征)、TF-IDF、词嵌入等方法,结合逻辑回归、TextCNN、BiLSTM 等模型进行分类。部分队伍则采用基于特征的相似度匹配或规则系统。此外,一些队伍利用大语言模型(LLM)自动生成 Suricata 规则或关键词规则。
为了提升召回率,许多队伍整合了外部数据资源,除赛题推荐的 Nuclei 官方模板、Exploit-DB 和 Suricata 规则外,还利用了 GitHub 上的非官方漏洞模板、Fscan/Qscan 等扫描器、 NVD/ScienceDB 等漏洞信息平台、securityfocus 等安全社区资源。
隐私声明
我们公开的数据集,以及未经后处理的原始数据集,采集于我们的蜜罐系统,不涉及任何我司用户的隐私。
参考资料
- DataCon 2025 大数据安全分析竞赛:https://www.datacon.org.cn/datacon-ui-competition/competitions/114/major-ranking?categoryId=249
- Nuclei 官方模板库:https://github.com/projectdiscovery/nuclei-templates
- Exploit-DB 漏洞数据库:https://gitlab.com/exploit-database/exploitdb
- Suricata 网络入侵检测系统:https://suricata.io/