LSTM UEBA异常检测——deeplog里其实提到了,就是多分类LSTM算法,结合LSTM预测误差来检测异常参数
结合CNN的可以参考:http://fcst.ceaj.org/CN/article/downloadArticleFile.do?attachType=PDF&id=1497
除了行为,其他还结合了时序的异常检测的:https://conference.hitb.org/hitbsecconf2018ams/materials/D1T2%20-%20Eugene%20Neyolov%20-%20Applying%20Machine%20Learning%20to%20User%20Behavior%20Anomaly%20Analysis.pdf 里面提到了。也本质上就是LSTM做回归。
deeplog除了检测序列是否异常外,还检测命令参数是否正常,也就是用LSTM去预测取值,看MSE是否很大。https://github.com/charles-typ/DeepLog-instroduction 这里有更加详细的说明。
--------------------------------------
DeepLog:基于深度学习的日志异常检测
简介
本文介绍一个基于深度学习的日志异常检测系统——DeepLog,来自安全领域顶会CCS2017。
系统日志记录了系统的各个时段的状态和重要事件,是性能监控和异常检测的重要数据来源,而异常检测是构建安全可靠系统的关键一步。现有基于日志的异常检测方法主要分为三种,分别是使用PCA做异常检测、分析不同日志类别相关性做异常检测以及使用工作流模型做异常检测。虽然这些异常检测方法能够有效地应用在特定的领域,但是它们不是一个通用的在线异常检测方法。因此,通过系统日志做自动化地异常检测是非常有必要的。
挑战
系统日志的应用比较复杂,存在如下挑战:
•非结构化日志,它们的格式和语义在不同系统之间有很大差异,一些现有的方法使用基于规则的方法来解决这个问题,但是规则的设计依赖于领域知识,例如工业界常用的正则表达式。 更重要的是,基于规则的方法对于通用异常检测来说并不适用,因为我们几乎不可能预先知道不同类型日志中的关注点是什么。
•时效性。为了用户能够及时的发现系统出现的异常,异常检测必须要及时,日志数据以数据流的形式输入,意味着需要对整个日志数据做分析的方法不适用。
•异常类型多。系统和应用程序可能会产生多种类型的异常。我们希望异常检测系统不仅针对于特定的异常类型,还能检测未知的异常。同时,日志消息中也包含了丰富的信息,比如log key、参数值、时间戳等。大多数现有的异常检测方法仅仅分析了日志消息的特定部分(比如log key),这限制了它们能检测到的异常类型。
DeepLog设计思想
针对上述挑战,论文作者提出了一种基于深度学习的日志异常检测系统——DeepLog。DeepLog通过以下三步异常检测来综合判断系统异常,其框架如下图所示。
1.执行路径异常检测。将异常检测问题转换成一个log key的多分类问题,使用LSTM对日志的log key序列建模, 自动从正常的日志数据中学习正常的模式并且由此来判断系统异常。同时,LSTM可以增量式地调整模型参数,以便适应随着时间推移而出现的新日志文件。
2.参数和性能异常检测。f有时候系统虽然是按照正常操作步骤执行的,但是记录的日志中的参数是不正常的,比如延迟比正常要大,这种情况也属于异常。
3.工作流异常检测。虽然工作流模型在异常检测的有效性上不如LSTM模型,但是工作流模型可以可视化地帮助运维工程师在发现异常后找出异常的原因。
1、执行路径异常检测
大多数系统日志都是由系统按照一定的格式输出的非结构化的文本,log key来表示一类日志(例如k1: Took * seconds to deallocate network),现有很多方法可以提取日志的log key。一般的,日志会按照一定的顺序输出,分步记录了系统的状态,即文中的执行路径。DeepLog将执行路径异常检测的问题转换为log key的多分类问题,使用下图所示的LSTM网络对log key序列建模。假设日志共有n个log key,DeepLog的输入为一个时间窗口内的log key序列,输出为所有的log key在该log key序列之后出现的概率的向量。也就是说,如果新来的一条日志对应的log key不是接下来出现概率较大的log key,则视为异常。
例如一段时间内logkey序列为,DeepLog读取日志的窗口h为3,则DeepLog的输入序列和输出logkey分别为,和{ k3,k4,k5–> k6}。
在实际应用中,一个给定的log key序列之后可能会出现多种日志,而且这些日志可能都是正常的。例如系统在尝试连接到主机时,“Waiting for * ” 和 “Connected to * ”这两种日志都属于正常的日志。所以DeepLog在这一步的异常检测时,按照下一个log key出现的概率排序,将前几个log key都视为正常。
2、参数和性能异常检测
有些系统异常发生时,它的日志不会偏离正常的执行路径,但是它日志内的参数会与正常情况下的参数有较大差异。DeepLog将每一个log key对应的参数保存下来,作为异常检测的数据源。与执行路径异常检测的方法类似,参数和性能异常检测也会使用LSTM网络建模。它的输入为某个log key对应日志中近期历史的参数值向量,输出为下一个参数值的预测值。在实际应用中,如果预测值和观测值之间的误差在高斯分布的高置信区间内,则输入的日志参数被认为是正常,否则认为是异常事件。
3、工作流异常检测
在许多系统日志中,日志消息是由多个不同的线程或并发运行的任务生成的。然而现有的方法都是基于单个任务的日志来生成工作流模型。所以在创建工作流模型时,会下图两种情况。图a表示的是同一个任务并发产生了不同的日志,图b表示新的任务产生了新的日志类型。DeepLog会将日志分类成不同任务对应下的日志,然后使用传统的工作流模型来生成工作流,方便运维工程师查看异常原因。
实验验证
DeepLog使用了两个数据集来验证DeepLog的有效性,分别是从亚马逊获取的HDFS日志和自己模拟的OpenStack日志。首先作者使用HDFS日志对比了DeepLog与PCA、IM等传统方法在执行路径异常检测的准确率。
从图中我们看到,DeepLog的Precision、Recall、F-measure都高于其他传统的异常检测算法。然后作者通过自己模拟的OpenStack异常来证明参数和性能异常检测的有效性,下图中a、b两个子图展示的是正常的日志参数对应的MSE(均方误差),c、d两个子图是有异常时MSE的变化,红色虚线代表的是不同置信区间的边界。通过对比这四个子图,我们可以看出DeepLog可以有效的从数值型参数中检测异常。
最后,作者使用OpenStack异常的例子解释了工作流模型的使用场景。下图展示的是一个OpenStack系统异常的例子。在log key序列出现之后,理论上下一个log key应该是k39,但是实际的log key为k67,即发生了异常。通过查看工作流,我们可以发现异常发生在"Instance destroyed successfully"之后,"Deleting instance files *"之前,说明异常发生在清理虚拟机的过程中。
结论
本文介绍了一种基于日志的异常检测系统——DeepLog,用于自动、准确的检测系统异常。DeepLog分别包含执行路径、参数和性能、工作流异常检测三个部分,综合的来判断系统是否发生了异常。由于长度限制,本文没有介绍DeepLog的算法细节,特此附上论文链接。
LSTM UEBA异常检测——deeplog里其实提到了,就是多分类LSTM算法,结合LSTM预测误差来检测异常参数的更多相关文章
- 检测到有潜在危险的 Request.Form 值。 说明: ASP.NET 在请求中检测到包含潜在危险的数据
在请求方法的顶部添加 [ValidateInput(false)]就OK了 从客户端(Content=" sdfdddd ...")中检测到有潜在危险的 Reques ...
- 基于深度学习的恶意样本行为检测(含源码) ----采用CNN深度学习算法对Cuckoo沙箱的动态行为日志进行检测和分类
from:http://www.freebuf.com/articles/system/182566.html 0×01 前言 目前的恶意样本检测方法可以分为两大类:静态检测和动态检测.静态检测是指并 ...
- 检测2个公网IP的GRE隧道是否通的方法,使用PPTP拨号检测。
检测2个公网IP的GRE隧道是否通的方法,使用PPTP拨号检测. 因为PPTP是建立在GRE隧道基础上的. PPTP 防火墙开放 TCP 1723防火墙开放 IP protocol 47,即GRENA ...
- 使用CNN做电影评论的负面检测——本质上感觉和ngram或者LSTM同,因为CNN里图像检测卷积一般是3x3,而文本分类的话是直接是一维的3、4、5
代码如下: from __future__ import division, print_function, absolute_import import tensorflow as tf impor ...
- 使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型
from:http://www.freebuf.com/articles/network/139697.html DGA(域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检 ...
- 基于PySpark的网络服务异常检测系统 (四) Mysql与SparkSQL对接同步数据 kmeans算法计算预测异常
基于Django Restframework和Spark的异常检测系统,数据库为MySQL.Redis, 消息队列为Celery,分析服务为Spark SQL和Spark Mllib,使用kmeans ...
- 微信小程序里解决app.js onLaunch事件与小程序页面的onLoad加载前后异常问题
使用 Promise 解决小程序页面因为需要app.js onLaunch 参数导致的请求失败 app.js onLaunch 的代码 "use strict"; Object.d ...
- 基于深度学习的文本分类案例:使用LSTM进行情绪分类
Sentiment classification using LSTM 在这个笔记本中,我们将使用LSTM架构在电影评论数据集上训练一个模型来预测评论的情绪.首先,让我们看看什么是LSTM? LSTM ...
- 【AdaBoost算法】基于OpenCV实现人脸检测Demo
一.关于检测算法 分类器训练: 通过正样本与负样本训练可得到分类器,opencv有编译好的训练Demo,按要求训练即可生成,这里我们直接使用其已经训练好的分类器检测: 检测过程: 检测过程很简单,可以 ...
随机推荐
- android activity全屏
有两种方法: 1.在AndroidManifest.xml的配置文件里面的<activity>标签添加属性: android:theme="@android:style/Them ...
- 关于set和map迭代器支持的运算
问题: 曾经想遍历一个set遍历.当时是这样写的: set<int>::iterator b = a.begin()+1 后来发现程序报错.究其原因是,set迭代器不支持加减数操作. 查看 ...
- JAVA读取CSV文件到MySQL数据库中
maven项目pom配置: <dependency> <groupId>net.sourceforge.javacsv</groupId> <artifact ...
- 转 Failed to run the WC DB work queue associated with 错误的解决
svn 异常终止导致的缓存工作队列问题 解决方法:清空svn的队列 1.下载sqlite3.exe 2.找到你项目的.svn文件,查看是否存在wc.db 3.将sqlite3.exe放到.svn的同级 ...
- testin 测试用例管理平台
应用信息:应用图标,应用名称,版本号,应用包名,系统平台[Android,ios,Web/H5,小程序,快应用]项目成员:成员帐号[邮箱],成员姓名,成员角色,成员职位,状态[激活,未激活],操作[移 ...
- git checkout -b 分支name 分支的新建, 切换, 删除, 查看
$ git checkout 711 -berror: switch `b' requires a value 以上, 可以看出, 参数 -b 放到最后是错误的. 711@MININT- 64 /d ...
- 关于Java类和包的那些事
*.Java文件 问题:一个.java源文件中是否可以包括多个类(不是内部类)?有什么限制? 答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致.一个文件中可以 ...
- 《剑指offer》第五十题(字符流中第一个只出现一次的字符)
// 面试题50(二):字符流中第一个只出现一次的字符 // 题目:请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从 // 字符流中只读出前两个字符"go"时,第一 ...
- linux下源码安装
●源码的安装(./configure –prefix 命令用法)一般由3个步骤组成:配置(configure).编译(make).安装(make install). Configure是一个可执行脚本 ...
- python Django 创建应用
如图输入如下命令 python manage.py startapp apitest 添加应用到 autotest项目项目下 在settings.pyo 中加入“apitest”,如下图 创建视图 在 ...