回顾项目-用PySpark和KMeans挖掘海量Web日志中的攻击模式

现在想起这个项目, 当时的我真是个天才, 对机器学习和深度学习分类出来的恶意模型, 进行自动分类, 再也不用一条一条分析日志了


详细步骤

  1. 数据源:
    • 原始流量日志。
  2. 初级检测 (深度学习):
    • 原始数据首先经过一个深度学习模型进行快速筛选。
    • 输出包括:所有流量的预测结果、仅恶意流量、以及初步报告。
  3. 综合检测 (混合模型):
    • 原始数据被一个更复杂的模型处理,该模型融合了机器学习 + 传统规则 + 深度学习的预测结果。
    • 这是系统的主力检测环节,产出更精确的综合性结果。
  4. 无监督聚类与模式发现:
    • 综合检测后的恶意流量,会进入一个聚类分析流程(这与您之前提供的PySpark代码高度吻合)。
    • 目的是将相似的攻击自动归类,发现未知的攻击模式。
  5. 行为分析 (扫描与爬虫检测):
    • 这是一个并行的分析流水线,它不只看单条请求,而是分析连续流量特征
    • 专门用于识别大规模扫描、爬虫、以及特定时间段内的恶意活动。
  6. 人工校验与模型优化:
    • 聚类结果会由安全分析师进行人工校验
    • 校验结果(manual_report)和修正集(rec)会反哺给模型,形成一个闭环,让模型越来越准。
  7. 最终报告:
    • 系统最终产出两类核心报告:给技术分析师的聚类报告和给管理层的态势感知报告

无监督检测流程

在网络安全领域,我们每天面对海量的Web访问日志。如何从这些看似杂乱的数据中,快速、自动地发现潜在的攻击行为?本文介绍一个利用PySpark和无监督学习的实战流程。

我们的目标是:将相似的恶意请求自动聚类,形成攻击模式库。

核心工作流四步走:

1. 数据清洗与预处理:去伪存真
原始日志充满了噪音。我们首先要对URL和POST内容进行深度清洗:

  • 解码:执行多次URL-Decode和Base64解码,还原被编码的攻击载荷。
  • 去噪:通过正则表达式,剔除IP、UUID、正常URL、长数字等动态但无害的信息。
  • 标准化:统一转为小写,并将文本结构化,提取出请求的关键部分。
    这一步的目标是剥离掉“外壳”,只留下攻击的“弹药”部分。

2. 特征向量化:让机器读懂攻击
计算机无法直接理解文本。我们使用Word2Vec模型,将清洗后的文本(切分为N-gram词组)转换为固定维度的数学向量。

  • 每个向量代表一个Web请求。
  • 相似的攻击行为,在向量空间中的距离也更近。

3. 无监督聚类:自动分类攻击手法
有了请求向量,我们使用KMeans算法进行聚类。

  • 设置一个较大的簇数量(如k=5000),让算法将所有请求向量分到不同的簇中。
  • 每个簇代表了一种具体的、细粒度的攻击模式。

4. 聚类结果优化:合并相似模式
KMeans可能将非常相似的攻击手法分到不同的簇里。为了得到更有价值的大类,我们进行后处理:

  • 计算所有簇中心向量之间的相关性。
  • 如果两个簇的相关性高于一个阈值(如0.9),就将它们合并。
  • 通过这种方式,我们将5000个小簇归并为数百个更具代表性的攻击大类。

总结

通过**“清洗 -> 向量化 -> 聚类 -> 合并”**这一套组合拳,我们成功地将海量、无序的恶意日志,转化为了结构清晰、可供分析的攻击模式集合,为后续的规则制定和威胁狩猎提供了强大的数据支持。