APP下载

网络安全交互式分析系统构建方法

2021-09-16陈兴蜀罗永刚

计算机工程与设计 2021年9期
关键词:字段语句解析

邹 峰,陈兴蜀,罗永刚

(1.四川大学 网络空间安全学院,四川 成都 610065;2.四川大学 网络空间安全研究院,四川 成都 610065)

0 引 言

随着计算机与互联网技术的发展,如何发现网络流量、日志、威胁情报等数据中的安全问题,当前一种人机对答的数据分析方式(也可称作交互式分析)成为了研究热点。由于网络攻击的复杂性,采用固定的分析模型难以发现一些新型的攻击,此时就需要分析人员探索式地与数据进行交互,将人的认知能力应用到安全分析过程中[1]。网络流量、日志、威胁情报等数据存在规模大、实时、关联关系复杂、结构各异等特点,需要找到合适的存储工具与分析方法来构建交互式分析系统。

本文选择Elastic Search作为存储介质,通过在其外部进行扩展的方法,构建了一种网络安全交互式分析系统。①定义了一种新的语言CSIAL来解释网络安全分析的需求,简化分析人员与数据进行交互的过程,并基于Antlr4对语句进行解析;②根据语句的解析结果来调用Elastic Search的相关API来实现基本的检索、分组、统计等功能,并通过一些处理方法扩展其不具有的子查询、连接查询等功能。根据安全分析的需求提炼出所需功能并总结为自定义的分析语言,通过解析符合该语言语法的语句并调用相应功能对数据进行处理,基于这种思想,达到网络安全交互式分析的目的。

1 相关研究

Elastic Search是当前非常流行的开源分布式全文搜索引擎,通过对海量数据构建索引,能够快速从中查询、分析得到所需结果。Elastic Search是基于Lucene的,而Lucene是目前使用最广泛、最受欢迎、效果最好的一个开源全文搜索架构[2]。在一个最新的非关系型数据库流行度榜单中(https://db-engines.com/en/ranking),Elastic Search超过Redis排在第二位(仅次于Mongo BD)。面对大规模、实时、复杂、异构的网络安全相关数据,进行分布式存储与全文搜索的Elastic Search是最好的选择之一。基于Elastic Search的ELK(Elastic Search、Logstash、Kibana)框架[3,4]是目前开源社区最活跃的分析框架,其提供了包括数据采集、索引、分析的一整套功能。文献[4]基于ELK技术栈,实现了能对海量日志进行实时采集和检索的分析监控系统。文献[5]中提出一种调用Elastic Search Java API并利用Spring Boot框架来快速简洁地实现一个交互式平台的方法。文献[6]中,提出了一种新的威胁情报技术,通过分析蜜罐日志数据来识别攻击者的行为,从而确定攻击模式,并利用ELK技术对日志数据进行分析。

Antlr(another tool for language recognition)作为一款Java编写的语言识别分析工具,常用于处理符合某种语法规则的文本。Antlr4在Antlr的基础上增加了语法树的遍历功能。文献[7]中,选取了流系统持续查询语言CQL(continues query language)中支持监控的查询语句,结合SQL(struct query language)的语法规则进行了相应的简化,设计了结构化持续查询语言CSQL,并使用到Antlr来解析查询语言来构建系统与用户交互层的方法。文献[8]中用到Anltr来解析SQL语句并调用MongoDB API来实现SQL访问接口的功能。

Apache Calcite[9]是类似于Altlr的另一个基础软件框架。与Altlr不同的是,Calcite专门为许多流行的开源数据分析系统提供统一的交互式SQL查询语言支持,并提供了模块化的、可扩展的查询优化器和数百个内置的优化规则。Calcite已被Hive、Drill、Storm等多种平台所采用。文献[10]在Apache Calcite和Postgres上实现了一个基于强化学习的连接优化方法。

2 总体架构

设计的基于Elastic Search的网络安全交互式分析系统,总体架构如图1所示。分析人员在客户端输入符合CSIAL语法规则的语句,与Elastic Search中的数据进行交互。

图1 网络安全交互式分析系统总体架构

服务端(异步接口层)使用到Netty4框架,开启端口接收客户端发来的查询语句。语句解析层利用Antlr4工具进行语句解析。关联查询功能扩展层主要扩展了子查询与连接查询的功能。Java API调用层根据语句解析层以及关联查询扩展层提交的请求去反复调用Elastic Search的Java API,实现分析数据所需的各种功能。

3 语法设计与语句解析

对Elastic Search中的数据进行分析时,要么需使用其原生的复杂的领域特定语言(domain-specific language,DSL),要么需编程去调用其Java API。

使用Elastic Search原生Rest Ful提供的Json风格的DSL语言语法复杂,每次编写会花费大量的时间。该Rest Ful接口对外暴露了大量与分析数据无关的功能,若直接对外提供该接口,可能会因分析人员的不当使用而破坏Elastic Search中索引的数据。此外,该DSL语法中缺乏一些安全分析所需的数据关联等功能。

安全分析人员往往对数据的分析能力较强,但编程能力相对较弱,采用人工编程的方式去实现对网络安全相关数据的分析,代价较高。因此,直接使用Elastic Search提供的Java API来编程的方法也不适用。

若使用现有的一些语言,如SQL风格的语法,可能会无法实现Elastic Search具有但SQL不具有的功能。

因此,为了方便扩展功能、简化分析操作,需要一种新的语言来解释网络安全交互式分析的需求。

3.1 语法设计

设计实现了一种网络安全交互式分析语言CSIAL。对于CSIAL的语法设计,主要参考了Elastic Search的基本查询与分析功能、Splunk的SPL语法、关系型数据库的SQL语法以及Linux命令。功能见表1。

表1 在CSIAL中所包括的功能

语法中分为Filters、Joins、Groups、Columns、Orders、Rows这6类子句,分别用于描述数据过滤与子查询、连接、分组、返回字段设置与统计、排序、返回条数设置的功能。具体语法不再赘述。

3.2 语句解析

在程序实现中,为了更容易识别并解析符合某种语法的语句,通常选择将解析过程拆分为两个阶段:词法分析与语法分析。词法分析是一个把字符组成单词或符号的过程,语法分析是使用词法分析所得的符号去识别句子结构的过程。一条语句通过上述两个阶段后最终会得到一个语句生成树的结构,以便于做进一步的解析。

本文使用到Antlr4工具来对CSIAL语句进行解析。语句解析流程如图2所示。

图2 语句解析流程

通过.g4文件来定义CSIAL的相关语法规则,并使用Antlr4为其建立相应的程序接口;根据解析需求去实现这些接口,得到所需的词法分析器、语法分析器、错误监听器、生成树遍历器;满足语法规则的语句通过词法与语法解析后被处理为语句生成树;利用遍历器访问生成树的节点,其中采用了递归方式来依次遍历语句生成树中的长句、短句、单词、关键字等;对匹配到的节点进行相应处理,最终得到语句解析结果,以用于后续对数据的查询、分析等功能。

4 扩展关联查询功能

关联查询在网络安全交互式分析的很多场景中会用到。但是Elastic Search只能通过嵌套、父子关系、反规范化等特殊方式来进行关联,这些方式存在消耗索引性能、浪费存储空间等问题,在面对实时、多源、异构的网络安全相关数据时并不适用,因此选择在Elastic Search外部扩展实现更加灵活的关联查询功能。主要包括子查询与连接查询。

4.1 子查询的实现方法

当查询数据时,需要对某数据集进行过滤,但过滤所需的具体值只能通过另一次查询得到,此时就会用到子查询。典型的SQL语句为“SELECT*FROM index1 WHERE x IN(SELECT DISTINCT x FROM index2)”。对于上述语句,Elastic Search实现子查询功能的方法是:先从index2中进行一次去重统计,得到字段的值的种类,然后将结果封装生成一个terms查询,再从index1中获取最终结果。

4.2 连接查询的实现方法

已知两个结构化的数据集都包含某个相同的字段,于是以该字段为键,将两个数据集进行连接,生成一个新数据集,然后可以再对该新数据集进行后续分析操作(如分组、统计、排序等)。这一过程便是连接查询。连接生成新数据集的算法通常有循环嵌套连接、排序归并连接、哈希连接等[11]。

实现对Elastic Search多个索引的连接查询的一种方法:先从2个索引中分别获取结果;执行连接算法,将2个索引的结果连接生成新数据集;若无后续操作,则直接返回连接结果并结束;若有后续操作,则在Elastic Search中建立新索引,将新数据集以批处理的方式写入该索引;根据后续操作从新索引中得到最终结果。由于是实时结果,新索引持久保留的价值不大,因此最后需删除新索引。

4.3 对连接查询的优化

上面所述的连接查询实现流程可分为如下几部分:从已有索引中查询数据、执行连接操作生成新数据集、将新数据集写入Elastic Search的新索引、根据连接查询的后续操作从新索引中再获取最终结果。

深入分析可以发现:查询数据主要由Elastic Search集群本身的性能决定;执行连接操作的复杂度主要由使用的连接算法决定。因此,优化方法选择从新数据集再次写入新索引的过程下手。本文选择了两个方面来进行优化:

(1)数据写入时,Elastic Search会解析数据的各个字段,对字段值的内容进行分词并建立索引。因此减少字段数量与数据大小能有效减少索引的运算操作与磁盘空间,进而有效减少数据的再写入时间。

本文采取一种从后往前推的方法,根据后续操作(如分组、统计等)得到真正需要使用的字段,于是只需将这些字段添加到新数据集。这种方式很大程度上减少了新数据集的大小,写入新索引的时间也会减少。例如,有A、B两个索引,A包括a、b、c、d、e字段,B包括e、f、g、h字段,将A与B按照e字段连接,生成的新数据集按照a字段进行分组,分别统计每个组中g字段的平均值。可以发现这样一次连接查询虽然包括a~h共8个字段,但后续只涉及到a、g这2个字段,因此生成的新数据集完全可以只包括这2个字段,字段数量减少了3/4,使得数据量大幅减少,空间上与时间上均得到性能的提升。

(2)在Elastic Search中建立新索引时需要设置该索引的分片数与副本数[12](否则系统会默认分配5个分片与1个副本),分片用于分割索引让读写可以进行并行操作,副本则用于将每个分片完整复制并放到不同硬盘中来保障数据的完整性。采用当前主流的机械硬盘时,若一个Elastic Search集群中的硬盘总数、分片数、副本数分别为Z、m、n,那么能使得索引的读写性能最好的平衡点满足条件Z=m(n+1),此时对索引的进行写入操作能够最多达到m的并发量。

通过分析,副本数越少、分片数与副本数乘积越接近Elastic Search集群的总硬盘数时,数据写入性能越高。而本文所述的连接查询实现方法中,连接所得的数据为临时数据,因此副本数完全可以设置为0,而分片数可根据集群情况进行调整。

5 实 验

5.1 实验环境

为了方便收集测试结果,实验中,除了Elastic Search集群部署于2台服务器上,其它程序(Netty4服务端程序、Antlr4、API调用程序、算法程序等)均运行于本地Windows10主机。在实际应用中,若将这些程序运行于服务器,效率必然会更高。部分软件信息见表2。

表2 软件信息

硬件主要包括本地PC机与两台服务器,见表3。

表3 硬件信息

Elastic Search集群的部分配置参数见表4。

表4 对Elastic Search的系统配置参数

使用到Insomnia软件作为客户端(对应前面所述的Netty4服务端)进行实验。使用效果如图3所示。

图3 使用Insomnia作为客户端进行实验的效果

图3中左侧输入语句、服务端IP与端口,右侧得到返回结果、响应状态、相应时间等。

5.2 语法复杂性对比

为了评价CSIAL语法的复杂性,选择了4个网络安全分析需求,将其分别翻译为CSIAL、SQL以及Elastic Search原生DSL这3种语句,然后用去掉空格与换行符后的字符数进行对比。对比结果如图4所示。

图4 几种语句的字符数对比

从图中可以看到,4种需求翻译所得的CSIAL与SQL语句的字符数较为接近,且都远小于Elastic Search原生DSL语句的字符数,表明CSIAL的语法相比Elastic Search原生DSL更为简洁,能有效提升安全分析人员的使用效率。

5.3 语句解析性能

对一条语句的解析主要分为词法解析、语法解析、错误反馈处理、语句生成树生成几个阶段。为了测试自定义语言的语句解析性能,实验中以语句的字符数为自变量、解析时间(μs)为因变量进行测试。其中解析时间为从接收到语句到得到解析结果的时间差值。实验结果如图5所示。

图5 语句解析性能

可以看到时间随着语句的字节大小增加而略微有所提升,平均大致在1 ms左右。由于语句解析过程的耗时极小,在实际使用中,这个时间几乎可以忽略不计。

5.4 连接查询实验

连接查询实验中自变量选择的是连接生成的数据条数,因变量为响应时间(ms)。结果如图6所示。

图6 连接查询响应时间与连接后数据条数的关系

连接查询的实验结果中可以发现:①响应时间与连接生成结果的数据条数大致呈正比;②优化后的连接查询,耗时约为优化前的50%~60%,体现出该优化方法的有效性;③在该测试实验使用的数据与查询用例中,对于连接生成结果的数据条数达到数十万条的情况下,对再写入过程进行优化后的连接查询,时间能够控制在1 min以内。

若使用其它数据或用例,实验的结果可能会有所差异。

6 结束语

本文研究并构建了一种基于Elastic Search的网络安全交互式分析系统。

定义了一种网络安全交互式分析语言CSIAL,该语言相比Elastic Search原生DSL语言更为简洁,能够显著简化安全人员对数据的分析过程。使用到Antlr4工具进行语句解析,实验结果表明该方法的解析时间可以忽略不计。增加了网络安全分析所需而Elastic Search缺乏的子查询、连接查询等功能,并通过两个方面对连接过程进行了优化调整,使得相应时间能够一定程度上满足需求。

由于只是原型系统,后续工作将着手解决并发控制、可视化等复杂工程问题。

猜你喜欢

字段语句解析
图书馆中文图书编目外包数据质量控制分析
三角函数解析式中ω的几种求法
重点:语句衔接
睡梦解析仪
电竞初解析
对称巧用解析妙解
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述
如何搞定语句衔接题
关于CNMARC的3--字段改革的必要性与可行性研究