机器学习模型检测DLL劫持攻击实战解析

本文详细介绍了卡巴斯基如何开发机器学习模型来检测DLL劫持攻击。通过三代模型的迭代优化,从特征选择、数据标注到模型架构改进,最终实现了70-80%的检测准确率,并已成功应用于商业安全产品中。

检测DLL劫持的机器学习模型

DLL劫持是一种常见攻击技术,攻击者用恶意库替换合法进程调用的库。这种技术被大规模恶意软件(如窃密程序和银行木马)以及APT组织和网络犯罪集团广泛使用。近年来,DLL劫持攻击数量显著增长。

准备工作

为了训练能够区分恶意和合法库加载的模型,我们首先需要定义一组高度指示DLL劫持的特征:

  • 错误的库位置:恶意DLL通常位于异常位置,如调用它的可执行文件同一文件夹
  • 错误的可执行文件位置:攻击者通常将可执行文件保存在非标准路径中
  • 重命名的可执行文件:攻击者经常将合法应用程序保存为任意名称
  • 库大小改变且不再签名
  • 修改的库结构

训练样本和标注

训练样本使用了内部自动处理系统提供的动态库加载数据,这些系统每天处理数百万个文件,以及匿名遥测数据。

  1. 初始使用文件信誉数据,其余数据手动标注
  2. 按家族过滤恶意库,仅保留已知展示DLL劫持行为的库
  3. 使用经过分析师验证的前代模型结果训练后续模型

训练数据集包含数千万个对象,包括约2000万个清洁文件和约5万个明确恶意文件。

加载DLL:正常情况是怎样的?

我们使用"库名称+进程签名"组合来描述安全库加载事件。使用一组计数器来描述安全库加载事件,包括进程信息、库信息和事件属性。

加载DLL:如何描述劫持

某些特征组合强烈指示DLL劫持:

  • 简单依赖:某些进程调用的清洁库始终位于单独文件夹中,而恶意库通常放在进程文件夹中
  • 复杂依赖:需要满足多个条件,如进程重命名加上新名称首次出现在数据流中,且库位于非标准路径

模型演进

第一代模型

目标:证明机器学习可应用于检测DLL劫持 使用最广泛的术语解释,工作流程简单

第二代模型

使用经过第一代模型处理和分析师验证的数据 标注更精确,添加了更多描述库结构的特征

第三代模型

标记训练样本中的潜在不受欢迎应用程序 使用扩展标注,包含前两代的有用检测 通过one-hot编码扩展特征描述 添加基于数据流大小的所有特征归一化

模型比较

在测试数据集上评估模型演进:

  • 第一代模型:在较高误报率(10⁻³或更高)下获得相对较好的结果(0.6或更高)
  • 第二代模型:在10⁻⁵误报率下达到相同水平
  • 第三代模型:在相同低误报率下产生0.8真阳性,被认为是良好结果

模型实际应用

所有三代模型都在内部系统中使用,用于检测遥测数据流中可能的DLL劫持案例。每天接收650万个安全事件,涉及80万个唯一文件。

模型还在单独的数据流上进行测试,以评估其随时间推移的有效性。平均而言,模型检测到70-80%的DLL劫持案例。

最近还将DLL劫持检测模型部署到卡巴斯基SIEM中,首先在卡巴斯基MDR服务中测试了该模型。

结论

基于三代模型的训练和应用,使用机器学习检测DLL劫持的实验是成功的。我们开发了能够区分类似DLL劫持事件与其他事件的模型,并将其改进到适合实际使用的状态,不仅在内部系统中使用,还在商业产品中应用。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计