type
status
date
slug
summary
tags
category
icon
password
IEEE TRANSACTIONS ON INFORMATION FORENSICS AND SECURITY (CCF-A) 2022
DeepSyslog:使用句子嵌入和元数据进行Syslog的深度异常检测
 

摘要

计算机系统的不健康状态所产生的异常事件会被记录在系统日志(Syslog)中。因此,基于 Syslog 的异常事件检测对于诊断系统问题至关重要。然而,现有的基于日志的异常检测方法独立地和不完整地使用原始的、非结构化的日志条目,即没有考虑日志中每个事件的上下文和事件元数据。它们使用不完整的非结构化日志数据表示,限制了深度学习模型在早期阶段的容量,往往会省略异常事件并引起误报。在本研究中,我们提出了DeepSyslog,它使用日志事件的上下文和日志中的事件元数据来表示 Syslog。受日志流序列性质的启发,我们采用无监督的句子嵌入来提取日志流中隐藏的语义和上下文信息,而不是词嵌入或独热编码,后者只能捕捉日志单词之间的相似性。句子嵌入进一步与事件元数据集成,形成 Syslog 的完整表示,可以区分由相关日志条目和日志中异常事件元数据引起的异常。对广泛使用的日志数据集的仿真结果表明,DeepSyslog 相对于现有的基于日志的异常事件检测方法具有较高的性能。

介绍

syslog中有很多异常事件,从中提取信息是重要的。Syslog的特性,如大容量、非结构化形式和复杂的上下文,使得在Syslog中检测异常事件变得非常具有挑战性。(介绍一下相关工作的方法)。总之现在工作有以下缺点:
  • 每个日志条目独立,无法考虑事件上下文。即使用特征提取嵌入,日志模板也会丢失上下文信息系。
  • 特征提取不完整。事件元数据(时间戳、事件类型、事件源、事件级别等)包含关键信息
  • 兼容性差。如果软件稍微修改源码,日志语句发生变化,就无法推断新的日志条目
文章提出了DeepSyslog,使用LSTM来建模历史日志序列,同时结合事件元数据和句子嵌入。本文的主要贡献如下:
  • 使用一种高效的句子嵌入方法提取 Syslog 信息。不需要额外步骤将日志条目分类,避免丢失语义信息。
  • 在特征提取和异常事件预测阶段整合了日志的事件元数据。
  • 使用字符级别的词嵌入来生成单词表示,避免了上面的兼容性差问题,可以通过日志语句演变推断未见过的单词和日志表示。
其余部分。第三节描述了我们的方法。第四节报告了评估结果。第五节总结了本文。

准备阶段

A. 步骤和术语

基于日志的异常检测系统包括三个步骤:日志解析、特征提取和异常检测。
日志条目(log entry)是源码中打印的原始句子,每个日志条目记录一个事件(event)。事件元数据(event metadata)是日志条目的变量部分(例如日志头和属性值)。现有很多方法解析 Syslogs 常量文本以提取日志模板(log templates),在异常检测阶段进一步提取特征。日志模板出现矩阵(log template occurrence matrix)用来表示一组(或窗口)日志中每个日志模板出现的次数。Du等人[12]选择一段历史日志窗口,称为日志模板索引序列(log template index sequence)来预测下一个日志。

B. 日志解析

日志由常量和变量组成。常量需要转化为深度学习可接受的,变量不需要。Spell [17]和Drain [18]在Zhu等人的评估结果中具有很高的解析精度(借用他们的方法)。只用日志模板是没办法准确描述日志,所以在解析步骤中存储了日志的数值元数据(常量数据),在句子嵌入后,把常量文本转换为数值向量表示。最终将数值元数据作为附加向量和句子嵌入结合,进行异常检测

C. 句子嵌入

(介绍一下 word2vec。用独热编码是稀疏矩阵。单词的表示可以由上下文生成)使用关键字搜索检查 Syslog 不适用,因为这些系统由于其大规模和并行性而过于复杂难以理解。句子的表示允许我们理解整个日志的意图,并帮助模型根据其上下文预测下一个日志。
因此,我们采用一个词嵌入模型,其中每个单词表示为字符 n-gram 的包,并且单词表示是 n-gram 表示的总和[25]。然后我们采用一种简单而有效的句子嵌入方法,通过单词向量的加权平均来表示句子,然后使用 PCA [26]进行修改以生成日志的表示。
例如,在 2-gram 的情况下,单词 "hello" 将被表示为 {"he", "el", "ll", "lo"}。

DeepSyslog 系统设计

A. 概述

基于日志的异常检测系统通常包括三个步骤:日志解析、特征提取和异常检测。DeepSyslog 的架构图如图1所示
图1
图1
输入是一个日志块,对其进行解析和预处理,得到常量文本数据和事件元数据向量表示(使用标签替换原始事件元数据) 上方。用句子嵌入将常量文本转换为连续的日志向量,再输入到 LSTM 中学习日志序列模式。 右1,最后结合序列模式和事件元数据向量连接起来。再输入到全连接层,最终进行分类任务。
每个日志条目分为两个组成部分:
  1. 文本数据。包括常量文本和文本元数据标签(用于描述文本本身的数据)。
  1. 数值元数据值(如平均数、最大值、最小值)。
根据日志条目概率同样受上下文的影响,因此,我们将每个日志条目的向量表示输入LSTM 模型以学习日志的序列模式。
为了充分利用可变事件的元数据,DeepSyslog 也考虑了数值元数据。数值元数据与事件的关系有两种情况:
  1. 不同类型的数值元数据可能存在数量上的关系。
  1. 如果事件是正常的,那么数值元数据必然在一定范围内。
所有不同日志类型的时间跨度的数值元数据被组合成一个固定维度的事件元数据向量。然后将 LSTM 的输出和事件元数据向量连接起来,再输入到全连接层中。最后全连接的输出进入分类器进行预测。如果日志的输出不在更高概率的预测日志向量集中,就被视为异常。

B. 解析和预处理

LogRobust的研究表明[24],日志数据中的处理噪声主要来自于不充分的日志解析。错误的解析会导致错误的日志模板。可以通过正则表达式[28]匹配来分离非结构化 Syslogs 中的常量文本和事件元数据。手工工作量就成了构建高质量、复杂的正则表达式来提取所需信息。
例如,在日志条目 “writeBlock blk_7648436334209344608 received exception java.io.IOException: Could not read from stream” 中,“exception java.io.IOException: Could not read from stream” 是表示异常的事件元数据。放弃事件元数据将导致语义信息的丢失。
因此,我们将事件元数据替换为相关标签,以保留原始日志含义。下表3是一个正确的元数据标签示例。这种替换是句子嵌入的预处理,包括数字和非数字事件元数据。
表3
表3
文章使用的 HDFS 数据集中的 block_id 可以作为日志组的标识符。如果没有标识符的,设置了固定长度来生成 Syslog 块。

C. 句子嵌入

句子嵌入提取日志的语义特征,并将日志条目映射到一个固定维度的向量。通常预训练的嵌入会输入下游任务模型,在一些更大的数据集上学习单词/句子表示并纳入其中。此外嵌入方法需要满足三个要求:
  1. 能处理词汇表之外的单词。存在很多看不见的日志类型。
  1. 考虑整个上下文。不能是单个。
  1. 高效。因为日志多。
我们使用 FastText [25]中在 Wikipedia 2017、UMBC 基于 Web 的语料库和 statmt.org 新闻数据集上训练的带有子词信息的词向量。FastText 使用字符 n-gram 学习子词单元的表示方法,它允许通过对它们的字符n-gram求和来计算训练数据中没有出现的单词的向量。这样日志语句更新,可以通过训练字符的 n-gram 生成单词嵌入。
同一个日志条目在不同情景下有不同的含义,这意味着一条日志条目的句子向量应该考虑上下文日志中的单词。我们使用了基于平滑逆频率(SIF)[26]的句子嵌入,该方法为生成[29]中的单词随机游走模型添加了两个“平滑项”。
(讲解公式,看不懂)
notion image
notion image

D. 预测和检测

IV. 结果评估

V. 结论

异常检测对于诊断系统问题和故障非常重要。本文提出了一种基于深度学习的新型框架 DeepSyslog,用于基于日志的异常事件检测。DeepSyslog 可以通过字符级别的词嵌入适应日志打印语句的演变和变化。它提取日志流中隐藏的语义和上下文信息来表示原始日志。此外,它还结合事件元数据,充分利用原始 Syslog。我们在 BGL 和 HDFS 数据集上评估了 DeepSyslog。结果表明 DeepSyslog 是有效的,并确认日志的事件元数据值在基于日志的异常事件检测中非常有用。
Application of a Dynamic Line Graph Neural Network for Intrusion Detection With Semisupervised LearningWrongdoing Monitor: A Graph-Based Behavioral Anomaly Detection in Cyber Security
  • Valine