本文主要是介绍思考:日志的聚类(由蜜罐日志引出),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
20210223 -
0. 引言
去年中旬,研究过一段时间蜜罐的内容,也部署过几款开源的蜜罐,一些蜜罐自带了最后的展示界面,例如hfish,不过它属于粒度比较粗的,最终显示也仅仅有很少的信息;另一些蜜罐仅仅输出日志,需要自己进行数据的汇总和展示,不过这种也存在一个问题,例如cowrie,他把交互过程按照事件分类来输出日志,当时构建过程中使用了ELK的方式来进行日志展示,直接将进行输入,没有更多的中间性修改,文章发表在FreeBuf,《Cowrie蜜罐的Docker部署过程及Elasticsearch+Kibana可视化》。
蜜罐的功能,一方面能够捕获比较新的攻击样本,当时我也捕获了不少僵尸网络的样本;而另一方面也能获取到攻击的方式,例如poc到底是什么样的;在另外一篇文章中《全端口蜜罐的部署过程与数据分析》,利用无交互的方式,就能够捕获大量的扫描流量和攻击流量。
但是在关注这种蜜罐时,比较重点的任务应该是如何分析日志,当时我在分析全端口蜜罐日志的时候,就发现了这个问题,由于是一种无交互的蜜罐形似,而且部署过程中也不知道到底流量是针对哪个端口的,因为采用的是防火墙转发的方式。最后的日志是一种json形式,但是交互的信息无法直接还原,只能是利用字符串匹配初步进行匹配。
前面的说法主要是为了展现出来日志分析的重要性和难点,这篇文章打算从比较简单的角度来入手,通过聚类的方式,看看能不能更好地减少人工分析的参与。
本篇文章重点记录思考的过程,未必能够给出最终的答案。
1. 日志的聚类
日志的聚类本质上属于相似度比较的过程,无论是结构化的还是非结构化的,每一条日志都是一个比较的单位,通过相似度比较发现他们是否是属于同一类。相似度比较的函数就比较多了,到底哪种方式比较适合就需要具体来尝试。
那么从这个角度来看,如何对日志进行表征是比较重要的问题,如果都是数值类型的,而且具备一定的实际意义,那么就更好了。而实际场景中,更多的是字符串类型的日志,例如http访问日志,特别是有些日志还是非结构化的,可能需要前期将关键信息提取处理进行结构化。
1.2 聚类的目的
普通机器学习中,聚类是针对无标签数据来出发的,数据没有标签,无法通过有监督的方式进行分类或者预测。在日志的聚类过程中,实际上也是为了能够找出相似的日志,发现攻击的日志。
1.3 日志表征的方式
前面也说过,对于数值型的数据,可以直接进行比较,例如使用欧氏距离;但是对于字符串的形式呢,虽然在某些场景下能够使用编辑距离这种实现,但是可用性并不强。
在目前的自然语言处理技术中,采用的技术如下:n-gram,tf-idf,word2vec等。
但是这些技术在实际的场景中能有多大的用处,本质上直接从词的角度来看,肯定能够直接或者结果,但是这种方式的实际意义有多大?也就是说是不是表征出来的信息的确能够代表处一定的意义呢?这是后续要思考的关键点。
(20210223 记录关于日志聚类的思考,感觉没有得到比较实质性的内容,主要是自己之前脑海中的一个问题,但是我感觉是有一定意义的。)
这篇关于思考:日志的聚类(由蜜罐日志引出)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!