【异常检测】LSTM用于异常检测:DeepLog与Machine Unlearning

动态异常检测

分析系统运行日志可以检测出系统异常,Min Du ICDM’16的文章SPELL提出一个日志解析工具;基于这个工作,她在CSS’17提出了DeepLog,也是现在非常经典的baseline,无监督的检测系统运行日志;她在CCS’19的工作在DeepLog的基础上引入了恶意样本的信息,改进准确率和误报率,并且将模型适用场景泛化到了信用卡交易记录等。

一、DeepLog

《DeepLog: Anomaly Detection and Diagnosis from System Logs through Deep Learning》 (CCS’17)

1、Abstract

Log记录系统的状态和重要事件,这篇文章将Log当作自然语言序列来处理(实际上其实是更“干净”语言序列,因为相比语言log遵循严格的逻辑和控制流)。DeepLog本质是个深度学习模型,提取正常运行的log的模式特征,当log信息偏离训练的模型时检测出异常。这篇文章还提出如何在线更新迭代DeepLog模型。

2、Introduction

2.1、 Existing Work

总的来说还是基于传统统计方法(2017年之前)

  • 基于log消息计数的PCA聚类
  • invariant mining based methods to capture co-occurrence partterns between different log
    keys
  • workflow-based方法识别程序逻辑流的执行异常

上述方法只在限定场景有效,不能防御线上场景中的各种攻击

2.2 Challenges

现有的一些方法使用rule-based方法,需要很强的领域知识。异常检测只有及时才有用,分类决策需要随着工作流产生。日志消息是并发的。

贡献

通过观察,系统日志中的条目是由执行结构化源代码产生的一系列事件(因此可以视为结构化语言)。模型先在一个小的、正常的log数据集上训练,然后在工作流中可以识别正常log,检测出异常情况。

在HDFS log、OpenStack log数据集上,DeepLog可以在1%的数据上训练,然后几乎100%预测剩下的99%的log。

DeepLog可以动态学习(online learning)。

3、Approach

3.1 日志解析

首先要把非结构化数据log解析成结构化数据,即从log entry中解析出“log key”。对于一个log entry的log key e e e 指源代码中打印语句中的字符串常数k,该字符串常数在执行该代码时打印出e。例如:在这里插入图片描述

解析出来的数据格式如下:

在这里插入图片描述

key + [前一个log的时间差,parameter values] 模型就用这三种信息

3.2 Deeplog架构概览

( k + 1 ) (k+1) (k+1)个模型

三部分组成:

  • log key异常检测模型(1个)
  • parameter value异常检测模型(k个)
  • workflow模型诊断异常

在这里插入图片描述

值得注意的是对于每个log key k k k,DeepLog各自训练一个模型( k k k个模型),用 k k k的参数向量序列来训练。

识别阶段,一个新来的log先被解析成log key + 参数向量序列。log key模型先检查来的log key是否异常,如果正常,再用log key对应的参数检查模型去检查参数向量序列是否异常。如果异常,送给用户诊断。

如果把白样本误报成了黑样本,模型可以迭代更新训练。

4、 异常检测

在这里插入图片描述

运行日志log key的词典大小 K = { k 1 , k 2 , … , k n } K=\left\{k_{1}, k_{2}, \ldots, k_{n}\right\} K={ k1,k2,,kn},模型是一个多类分类器,每次输入一个窗口长度的log key序列 w = { m t − h , … , m t − 2 , m t − 1 } w=\left\{m_{t-h}, \ldots, m_{t-2}, m_{t-1}\right\} w={ mth,,mt2,mt1} ,异常触发的条件是预测错(不在top g个预测中)。

在这里插入图片描述

模型用的是多层LSTM,但是其实数据集和代码都比较简单,log key序列的词典大小只有28,并且观察数据集也比较有规律,有比较明显的区分(这也归功于作者自己ICDM16的工作)。

DeepLog剩下的k个LSTM模型是分析这个log key对应的log中的参数,以及log间隔时间。这部分序列主要可以识别出DoS攻击(间隔时间长)等。这个部分模型的作用感觉很弱,作者在报告时也没有很强调这部分,Github上开源的代码索性没实现这部分。

其他内容

文章还有很多内容是提出在线异常检测的工作流、online learning等等和我们现在的工作关系不大。

效果

log key效果

在这里插入图片描述

作者在1%的数据集上训练,几乎可以预测出剩下99%的数据。

二、Lifelong Anomaly Detection Through Unlearning(CCS’19)

上文在DeepLog中,模型上线后的在线更新是:将误报的白样本(FN)提供给模型进行学习训练,那么问题来了:黑样本的信息从来没有被引入过,尽管存在可用的黑样本。所以本文增加了利用FP来更新模型。

但是Unlearning会带来梯度爆炸和catastrophic forgetting,文章也提出了解决办法。

LSTM异常检测

在这里插入图片描述

Unlearning 更新模型

对于一个黑样本,被误报成正常样本,即概率值超过了阈值:
Pr ⁡ ( x t ) > τ (1) \operatorname{Pr}\left(x_{t}\right)>\tau \tag {1} Pr(xt)>τ(1)
其中 τ \tau τ是阈值,等价于损失函数低于了某个阈值:
L ( x t ) < τ ′ (2) \mathcal{L}\left(x_{t}\right)<\tau^{\prime}\tag {2} L(xt)<τ(2)
我们为了减小 Pr ⁡ ( x t ) \operatorname{Pr}\left(x_{t}\right) Pr(xt)的可能性,等价于增大损失函数 L ( x t ) \mathcal{L}\left(x_{t}\right) L(xt)的值,因此:
L unlearn ( x t ) = − L ( x t ) (3) \mathcal{L}_{\text {unlearn}}\left(x_{t}\right)=-\mathcal{L}\left(x_{t}\right)\tag {3} Lunlearn(xt)=L(xt)(3)
同样的可以应用优化算法最小化 L unlearn ( x t ) \mathcal{L}_{\text {unlearn}}\left(x_{t}\right) Lunlearn(

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值