一种基于变长记录的安全日志压缩存储和检索方法与流程

文档序号:16536598发布日期:2019-01-08 19:57阅读:239来源:国知局
一种基于变长记录的安全日志压缩存储和检索方法与流程

本发明涉及一种方法,具体涉及一种基于变长记录的安全日志压缩存储和检索方法,属于日志存储管理技术领域。



背景技术:

日志(log);

一般而言,所谓日志是由各类网络系统、安全系统、操作系统、数据库系统、应用系统等生成的,能够记录相关系统运行状态的数据集,它可以成为对相关行为追溯的关键信息;日志可以被划分为若干类别以区分之间的不同,如用户登录、网络连接、主机进程运行等;相关划分依据可参见国家标准。

日志审计管理系统(logauditandmanagementsystem);

日志审计管理系统一般是用以收集相关日志信息并进行存储、统计及关联等处理;日志审计管理系统的日志收集方式主要包括两种模式:

被动方式:如syslog、snmptrap、netflow/sflow、交换机镜像等

主动方式:wmi方式(主要用于windows)、数据库主动连接等

这类系统又被称作siems(securityinformationeventmanagementsystem),国际上的代表产品包括hparcsight、splunk等;国内主要的安全厂商均提供类似的系统。

自有日志审计管理系统这类产品以来,日志的压缩存储、检索就一直是核心问题,而且一般都经历过相似的发展过程,如最初的日志信息被存储在关系型数据库(rdbms)中,如oracle、sybase或microsoftsqlserver等,使用关系型数据的优点和缺点都是非常明确的,其优点主要是编程、查询接口简单,但其缺点也非常明显,主要就是使用此类技术无法应对日益增长的数据数量,特别是在当前大数据时代则完全是无法使用的,因为关系型数据在处理海量数据有着天然的劣势,其在每日上几十亿的数据面前表现的无能为力。

目前,主流的日志审计管理系统均是采用nosql方式来存储和检索相关日志信息,如采用hadoop、elasticsearch等,但随之带来的问题是巨量日志的存储也消耗了大量的磁盘存储,毕竟需要投入大量资金在存储的采购上,而且写入磁盘的数据越多则越约或延迟系统的性能,其主要原因是i/owait较大,故长久以来日志的压缩存储及从压缩数据中还原数据就成为此类系统的主要议题;业界一般对于此类问题主要有以下两种压缩方法(当然还有其它方式,但并非主流技术):

采用通用压缩方法:即对冷数据(colddata,如一个月前)或温数据(warmdata,一般为7日前)采用通用的数据压缩方式,如rar、zip、gzip等进行压缩;采用此方法的好处在于由于方法是通用的,故不需要附加过多编码,可以快速实现数据压缩功能而且可以视情况采用不同的压缩比,但其问题也是比较明显的,即在使用这些冷数据或温数据时需要预先解压缩,这需要消耗一定时间,对用户的影响较大,而且在数据压缩和解压时均需消耗大量的cpu时间;

采用模式编码方法:目前比较先进的日志管理系统均采用类似技术,其主要思想是由于在日志中存在大量重复的数据,系统对这些数据采用一些固定的编码以压缩数据的存储,不过基本的方法均在于对原始日志的分词(一般使用英文分词),然后对词频进行统计,根据词频生成不同的编码,编码可采用定长(2字节)或变长方式(1字节或2字节),但这类方式其实对于cpu的消耗仍然比较巨大,另外在导出这些原始日志时,还原的操作也会消耗大量cpu的计算资源;另外此种方法在处理超长日志且仅含少量变化部分的数据或含有大量短单词时,其压缩率仍然不高,具体可参见下文中的相关内容。

公开号为cn201610319121.1(日志压缩方法及装置)公开了一种基于分词词频日志变长存储方法,包括以下步骤:获取包含日志记录的文件;根据日志记录输出优先级遍历所述文件,分别以唯一的编号替代所述文件中每一所述日志记录的字符串,得到已替代日志记录;对所述已替代日志记录进行共时段日志共时间戳编码处理,得到压缩后的日志。本发明利用日志记录输出优先级遍历所有包含日志记录的文件,分别以唯一的编号替代文件中各条日志记录的字符串,从而减少了字符串所占的字节数,提升了日志的压缩比,同时对字符串替代后的日志记录进行共时段日志共时间戳编码处理,有效降低了日志记录的时间戳信息在日志内容中的比重,进一步提高了日志压缩比和压缩效率。

其本质仍然是基于对原始日志的分词,与本发明存在一些本质的不同。

公开号为cn201410283777.3(日志压缩方法及装置、解压缩方法及装置)公开了一种日志压缩方法及装置、解压缩方法及装置,所述日志压缩方法包括:读取所述日志中的记录;将所述日志的记录按照字段进行存放,在所存放的记录的字段中添加所述记录在所述日志中的位序信息;通过将所述日志中记录的所述字段的字符串分别与所选取的基准记录的所述字段中的字符串进行比较,将所述日志中记录的所述字段的字符串进行合并处理,得到合并字符串;创建压缩文件,所述压缩文件包括所述压缩文件的头信息;将所得到的合并字符串进行压缩,并将压缩后的合并字符串按照所述字段在所述记录的位置顺序依次添加到所创建的压缩文件中。

但其在日志压缩和解压时均需和基准记录进行比较,在实际操作中可能存在cpu资源消耗过大的问题;另外,这种方法需要在各个字段间加入字段分隔符号,这会导致最终日志存储的尺寸增加。因此,迫切的需要一种新的方案解决上述技术问题。



技术实现要素:

本发明正是针对现有技术中存在的技术问题,提供一种基于变长记录的安全日志压缩存储和检索方法,该方法充分地利用了历史上对日志的解析结果,获取各类设备的不同模式在整体上的分布情况,为压缩编码提供实际依据。

为了实现上述目的,本发明的技术方案如下:一种基于变长记录的安全日志压缩存储和检索方法,所述方法包括以下步骤:

步骤1:搭建日志收取环境;

步骤2:获取日志中模式分布数据;

步骤3:对模式中的固定部份进行变长编码;

步骤4:建立固定模式中的单词索引;

步骤5:对模式中的变化部分进行变长编码并建立索引;

步骤6:根据固定部份和变长部份进行日志的还原;

步骤7:根据固定部份和变长部份及与索引关系进行检索。

作为本发明的一种改进,所述步骤1,搭建日志收取环境;具体如下,

首先,对于一条日志的模式识别是基于它来源于哪种系统或设备,再通过这种系统或设备所包含的模式对其进行匹配和抽取,匹配和抽取的工具均是基于pcre即一种被广泛使用的正则表达式库的,日志来源的系统或设备是由用户在系统界面上进行配置,其配置的主要输入项就是来源的ip地址,通过syslog服务器获取的源ip。

作为本发明的一种改进,所述步骤2:获取日志中模式分布数据具体如下:对历史上相关原始日志的解析情况进行统计和分析,对于每种设备及其相关模式的占比情况标注比率(百分比);标注的方法就是先分设备再分模式,某一种设备的所有模式累加为100%。

作为本发明的一种改进,所述步骤3:对模式中的固定部份进行变长编码具体如下,通过观察可以发现一般某类设备或系统的日志具有较大的模式命中概率,故对此类日志的来源系统编码为0x01,其模式在系统中目前为125个,故一个字节即能支持所有模式的编码;具体如下:对于一个某类系统的登录日志而言(它一般含有固定标识‘login’等固定模式),根据以上原则,由于其在日志中占比最高,故将其定位为此类系统或设备的第一个模式,其固定模式编码为0x0101;而变化部分分别是日期时间、登录用户名、登录源ip地址及登录的源端口;每种模式中变化的部分需被从原始日志中抽取,抽取的模式数量可以根据正则表达式获得。(因对于需要抽取的部分,在正则表达式中是可以通过括号来标识的,调用的接口中可以返回抽取内容的数量);而对于另一种较为常见的设备或系统(如思科路由器)而言,其设备类型编码为0x02,而其包含了156个模式,由于其模式已经超过了127,故其固定编码最长长度为3个字节,即一个字节为设备类型,两个字节为模式编码;另外,对于不常见的设备或系统而言(如迪普web防火墙),其设备类型编码需要使用两个字节表示,而其模式也超过了127个,则其固定模式编码最长长度为四个字节,即两字节设备或系统类型编码,两字节为模式编码;在实际应用中,四个字节已能覆盖所有情况。

作为本发明的一种改进,所述步骤4:建立固定模式中的单词索引,具体如下,建立固定模式编码和其分词的索引关系;由于日志的固定部分已经用编码替代,故无法直接进行检索,所以需要预先建立这些模式中所包含单词和索引的关系;如对登录日志而言我们抽取其中诸如login、sshd(登录方式)、accepted(接受登录)、password、port(源端口)等固定部分建立索引,而排除for、from、the、a等停止词(stopwords,它们一般是介词、冠词、代词等),即不对它们建立索引;

作为本发明的一种改进,所述步骤5:对模式中的变化部分进行变长编码并建立索引,具体如下:需针对变化部分的类型,对于可变长编码的类型,其离散程度在实际运行环境中需要进行一定的评估,如对于类似url、浏览器user-agent、公网地址、cookie等离散程度过大的字段类型则可以选择保留其原始信息,这些信息在日志信息中给出明确指示,指示的方法一般是使用特殊标识(使用一个字节的‘0x00’来标识,因为其在任何编码模式中均不存在故不会引起混淆)及长度(长度使用1个字节或2个字节,如长度为1个字节则其高位为0,而如采用2个字节则其高位为1,故能表达的原始信息长度或在127个字节以内或在32767之内;由于日志的采集是使用udp方式,其总长度也不会大于1500字节,所以2个字节的长度完全可以覆盖所有情形),一般此类日志在实际采集中占比较少,而且除如公网地址外,不是关键信息,无需进行进一步地提取和分析);

日期时间:将字符方式的日期时间转换为固定4个字节的整型,其含义为自1970年1月1日以来的秒数;

ipv4地址:将ipv4地址按2-4字节方式进行编码,短编码的第一字节为c类网段,第二个字节为主机编码;而长编码的第一及第二字节为c类网段,第三和第四字节为主机编码;

端口:直接采用原始固定两字节编码;

协议名:采用1字节固定编码,如tcp为6,而udp为17;

应用协议名:应用协议一般是经过数据包深度识别获取的,其数量一般在上百到几千之间,故采用1-2字节变长编码,常用应用协议(如http、dns、telnet等)使用1字节,非常用应用协议使用2字节编码方式,与之前描述的类似,第一个字节的最高位为0时为短编码,而为1时则是长编码;

用户名或邮箱名称:考虑到企业应用的一般情况,使用1-2字节变长编码,如root、admin、scott、lp、user@mail.com等,其变长编码原则同上;

程序名:使用1-2字节变长编码,其变长编码原则同上;

服务名:使用1-2字节变长编码,其变长编码原则同上;

进程名:使用1-2字节变长编码,其变长编码原则同上;

主机名(包括域名):使用2-4字节变长编码,其变长编码原则同上;

日志类型和日志子类:采用3字节定长编码,第一个字节为大类(目前为9类),第二、三个字节为子类,不再采用原始文本;

针对某类登录日志(动态变化部分包含日期时间、用户名称、登录的源地址、源端口以及日志分类及子类)而言,其格式化输出的日志输出形式如下:

模式编码日期时间用户名称ipv4登录地址源端口日志分类日志子类;

故通过上述示例,可将原长度为75个字节(这仅是原始日志的详细内容,未进行压缩前的处理方式还会将这些解析出的信息均以字符串的形式进行保存,实际上保存的日志信息达75+34+16=125个字节,其中34个字节是解析的原始字符串,如时间日期、端口、用户等,而16个字节为分类和子类,因它们都是中文且各为四个汉字,如分类为“用户操作”,而子类为“用户登录”)的原始日志压缩到13个字节进行存储,其压缩率接近90%,如果对于具有更长内容的日志且变化部分很少或者需要抽取的部分很少,则压缩比率会得到更大程度的提升。

作为本发明的一种改进,所述步骤6:根据固定部份和变长部份进行日志的还原;具体如下,从日志的模式编码中获取相关模式信息;由于模式编码的唯一性和长度为2-4字节,故获取模式信息较为容易,即如获取设备或类型编码仅需查看第一字节的最高位,如其为0则编码长度为一个字节,否则为两个字节;而模式编码与此类似,即如最高位为0则模式编码长度为一个字节,否则为两个字节;根据模式中定义各个变化内容,再根据相关变动的内容类型,通过编码获取相关原始内容,将原始内容插入模式相关的占位信息中,其长度为几个字节的判断方式与上述方式较为类似;对于实在无法进行压缩的原始信息,如url等,根据日志中的附加信息(附加信息中应指明混合在压缩日志中的非压缩信息的位置和长度);

作为本发明的一种改进,所述步骤7:根据固定部份和变长部份及与索引关系进行检索,具体如下,当用户输入某个或某些关键词进行搜索时,系统应根据两个索引(如前所述,第一个为固定模式编码和索引关系,第二个则为动态模式编码部分和索引关系)的相关内容联合进行检索。

相对于现有技术,本发明的优点如下:1)该技术方案充分地利用了历史上对日志的解析结果,获取各类设备的不同模式在整体上的分布情况,为压缩编码提供实际依据;2)该方案极大地提高了日志原始信息的压缩比,经试验在不同类型(包括各类路由器、交换机、linux主机、windows主机、web中间件等)的日志上下文中,可以达到85%-95%左右;3)该方案缩小了对日志固定部分检索的索引存储,一般仅需存储固定模式和详细记录的反向索引内容,而固定模式中的字符串索引存储所占比例极小(因模式一般是比较有限的);4)该方案对日志中相关的动态占位部分也进行了变长处理,极大地缩减了如ip地址、端口、用户名等信息存储所占的空间;5)采用整体模式而不是分词形式对日志进行变长编码的方式,模式编码中区分了系统类型(这里的系统类型特指诸如unix/linux类主机、windows类主机、交换机/路由器等网络设备、web中间件、数据库系统等)及模式(这里所指的模式是针对不同的正则匹配规则而言);6)在变长编码中,充分利用二进制比特位信息来表示不同长度的编码(类似哈夫曼前缀编码的方法),不加入附加的日志各字段分隔符号,进一步减少了压缩后日志的尺寸,这点完全不同于文献[2]中所提到的方法;7)该方案利用正则处理中的临时变量抽取机制而不是分词形式,采用动态变长模式对日志中相关变动部分(这里指的变动部分一般是类似日期时间、ip地址、用户名或邮箱名等)原始信息进行编码,而且本发明对于日志中的变动部分的类型进行了区分,这点也完全不同于以往的相关编码压缩方法;8)该方案对固定模式中的所有模式进行分词,分词中去除抽取模式,建立词和模式的主要索引;对非固定部分另外建立索引,在检索时同时应用上述两个索引;这与纯粹依赖通用分词机制而进行索引的日志管理系统而言,会较大地缩小倒排索引的尺寸,有效地降低了对于磁盘空间的要求。

附图说明

图1为本发明系统组成示意图;

图2为本发明实施步骤示意图。

具体实施方式

为了加强对本发明的理解和认识,下面结合附图和具体实施方式对本发明做出进一步的说明和介绍。

实施例1:参见图1、图2,一种基于变长记录的安全日志压缩存储和检索方法,所述方法包括以下步骤:

步骤1:搭建日志收取环境;

步骤2:获取日志中模式分布数据;

步骤3:对模式中的固定部份进行变长编码;

步骤4:建立固定模式中的单词索引;

步骤5:对模式中的变化部分进行变长编码并建立索引;

步骤6:根据固定部份和变长部份进行日志的还原;

步骤7:根据固定部份和变长部份及与索引关系进行检索。

所述步骤1,搭建日志收取环境;具体如下,

首先,对于一条日志的模式识别是基于它来源于哪种系统或设备,再通过这种系统或设备所包含的模式对其进行匹配和抽取,匹配和抽取的工具均是基于pcre即一种被广泛使用的正则表达式库的,日志来源的系统或设备是由用户在系统界面上进行配置,其配置的主要输入项就是来源的ip地址,通过syslog服务器获取的源ip。

所述步骤2:获取日志中模式分布数据具体如下:对历史上相关原始日志的解析情况进行统计和分析,对于每种设备及其相关模式的占比情况标注比率(百分比);标注的方法就是先分设备再分模式,某一种设备的所有模式累加为100%。

所述步骤3:对模式中的固定部份进行变长编码具体如下,通过观察可以发现一般某类设备或系统的日志具有较大的模式命中概率,故对此类日志的来源系统编码为0x01,其模式在系统中目前为125个,故一个字节即能支持所有模式的编码;具体如下:对于一个某类系统的登录日志而言(它一般含有固定标识‘login’等固定模式),根据以上原则,由于其在日志中占比最高,故将其定位为此类系统或设备的第一个模式,其固定模式编码为0x0101;而变化部分分别是日期时间、登录用户名、登录源ip地址及登录的源端口;每种模式中变化的部分需被从原始日志中抽取,抽取的模式数量可以根据正则表达式获得。(因对于需要抽取的部分,在正则表达式中是可以通过括号来标识的,调用的接口中可以返回抽取内容的数量);而对于另一种较为常见的设备或系统(如思科路由器)而言,其设备类型编码为0x02,而其包含了156个模式,由于其模式已经超过了127,故其固定编码最长长度为3个字节,即一个字节为设备类型,两个字节为模式编码;另外,对于不常见的设备或系统而言(如迪普web防火墙),其设备类型编码需要使用两个字节表示,而其模式也超过了127个,则其固定模式编码最长长度为四个字节,即两字节设备或系统类型编码,两字节为模式编码;在实际应用中,四个字节已能覆盖所有情况。

所述步骤4:建立固定模式中的单词索引,具体如下,建立固定模式编码和其分词的索引关系;由于日志的固定部分已经用编码替代,故无法直接进行检索,所以需要预先建立这些模式中所包含单词和索引的关系;如对登录日志而言我们抽取其中诸如login、sshd(登录方式)、accepted(接受登录)、password、port(源端口)等固定部分建立索引,而排除for、from、the、a等停止词(stopwords,它们一般是介词、冠词、代词等),即不对它们建立索引。

所述步骤5:对模式中的变化部分进行变长编码并建立索引,具体如下:需针对变化部分的类型,对于可变长编码的类型,其离散程度在实际运行环境中需要进行一定的评估,如对于类似url、浏览器user-agent、公网地址、cookie等离散程度过大的字段类型则可以选择保留其原始信息,这些信息在日志信息中给出明确指示,指示的方法一般是使用特殊标识(使用一个字节的‘0x00’来标识,因为其在任何编码模式中均不存在故不会引起混淆)及长度(长度使用1个字节或2个字节,如长度为1个字节则其高位为0,而如采用2个字节则其高位为1,故能表达的原始信息长度或在127个字节以内或在32767之内;由于日志的采集是使用udp方式,其总长度也不会大于1500字节,所以2个字节的长度完全可以覆盖所有情形),一般此类日志在实际采集中占比较少,而且除如公网地址外,不是关键信息,无需进行进一步地提取和分析):

日期时间:将字符方式的日期时间转换为固定4个字节的整型,其含义为自1970年1月1日以来的秒数;

ipv4地址:将ipv4地址按2-4字节方式进行编码,短编码的第一字节为c类网段,第二个字节为主机编码;而长编码的第一及第二字节为c类网段,第三和第四字节为主机编码;

端口:直接采用原始固定两字节编码;

协议名:采用1字节固定编码,如tcp为6,而udp为17;

应用协议名:应用协议一般是经过数据包深度识别获取的,其数量一般在上百到几千之间,故采用1-2字节变长编码,常用应用协议(如http、dns、telnet等)使用1字节,非常用应用协议使用2字节编码方式,与之前描述的类似,第一个字节的最高位为0时为短编码,而为1时则是长编码;

用户名或邮箱名称:考虑到企业应用的一般情况,使用1-2字节变长编码,如root、admin、scott、lp、user@mail.com等,其变长编码原则同上;

程序名:使用1-2字节变长编码,其变长编码原则同上;

服务名:使用1-2字节变长编码,其变长编码原则同上;

进程名:使用1-2字节变长编码,其变长编码原则同上;

主机名(包括域名):使用2-4字节变长编码,其变长编码原则同上;

日志类型和日志子类:采用3字节定长编码,第一个字节为大类(目前为9类),第二、三个字节为子类,不再采用原始文本;

针对某类登录日志(动态变化部分包含日期时间、用户名称、登录的源地址、源端口以及日志分类及子类)而言,其格式化输出的日志输出形式如下:

模式编码日期时间用户名称ipv4登录地址源端口日志分类日志子类;

故通过上述示例,可将原长度为75个字节(这仅是原始日志的详细内容,未进行压缩前的处理方式还会将这些解析出的信息均以字符串的形式进行保存,实际上保存的日志信息达75+34+16=125个字节,其中34个字节是解析的原始字符串,如时间日期、端口、用户等,而16个字节为分类和子类,因它们都是中文且各为四个汉字,如分类为“用户操作”,而子类为“用户登录”)的原始日志压缩到13个字节进行存储,其压缩率接近90%,如果对于具有更长内容的日志且变化部分很少或者需要抽取的部分很少,则压缩比率会得到更大程度的提升;

所述步骤6:根据固定部份和变长部份进行日志的还原;具体如下,从日志的模式编码中获取相关模式信息;由于模式编码的唯一性和长度为2-4字节,故获取模式信息较为容易,即如获取设备或类型编码仅需查看第一字节的最高位,如其为0则编码长度为一个字节,否则为两个字节;而模式编码与此类似,即如最高位为0则模式编码长度为一个字节,否则为两个字节;根据模式中定义各个变化内容,再根据相关变动的内容类型,通过编码获取相关原始内容,将原始内容插入模式相关的占位信息中,其长度为几个字节的判断方式与上述方式较为类似;对于实在无法进行压缩的原始信息,如url等,根据日志中的附加信息(附加信息中应指明混合在压缩日志中的非压缩信息的位置和长度);

所述步骤7:根据固定部份和变长部份及与索引关系进行检索,具体如下,当用户输入某个或某些关键词进行搜索时,系统应根据两个索引(如前所述,第一个为固定模式编码和索引关系,第二个则为动态模式编码部分和索引关系)的相关内容联合进行检索。

需要说明的是上述实施例,并没有用来限定本发明的保护范围,在上述基础上所作出的等同替换或者替代均属于本发明权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1