安全实践:流量分类步骤

2018/10/23
关于网上很多流量分类的教程中,都没有说明应该如何去获取流量信息,更多的都是针对机器学习的算法来进行描述。
本篇作为流量分类流程的一个记录,主要记录应该如何进行流量分类的研究过程,对其中涉及的算法不进行深入探究。


一般来说, 进行分类研究包含以下几个步骤,主要涵盖数据收集、数据预处理、模型选择、模型评估等,下面分别对这几个步骤机型描述。
1、数据采集
流量采集的工作,是进行后续工作的基础。流量的采集可以在PC机上,也可以在局域网的交换机上,一般采用liunx下tcpdump命令,或PC机上wireshark进行采集工作。或者有条件的情况下,可以通过已有的包捕获引擎自己编写插件完成(这一步骤,一般需要一定的环境)。
(该部分,仅介绍对流量进行全采集,不涉及针对应用进行采集,这种采集需要编写脚本来控制应用,并采集系统信息)
对于不同的网络环境,进行补包的过程是一致的,没有什么区别,而包的内容可能有所不同。对于比较大的局域网,特别是有多个网络出口的,可能出现数据流单项流的情况。对于PC机捕获的数据,一定要注意可能出现巨型帧的情况,这种情况只需调整本机网卡驱动的配置即可,具体内容可以查看本文集中巨型帧的文章。

在PC机的流量的采集过程中,个人机器的流量数量可能很少,这是可以通过浏览器访问多个网页来形成流量。以谷歌浏览器为例,打开书签管理器,可以打开所有的书签。

2、数据预处理

正常机器学习过程的数据预处理,主要集中在处理已经得到的数据集,通过处理缺失值、对数据进行一些基础的变换等。这里针对流量处理过程的预处理,包含上面所说的成,但在这些步骤的执行前,需要将流量pcap文件,转化为数据集,即将pcap文件转化为后续算法可以利用的输入。

针对pcap处理的工具有很多,根据不同的需求:针对IP数据包直接处理的,针对TCP数据流进行处理的。
个人愚见:流量分类的很多目的是最起码用来去分应用层的协议,很多应用层的协议采用TCP作为传输层协议,所以以TCP层的数据流为单位进行处理会方便很多,通过可以分析一些非熟知的应用层协议。
以TCP层数据流为单位,需要对TCP层的数据进行重组,已经有开源的工具libnids,这个工具已经很多年了,作者早一步更新,并且其基本的功能均已实现。(这部分源码,有幸拜读过,大致逻辑不复杂, 但一些细节部分还是不理解。)并且,这个库的编程语言为C,编程的接口较为底层。
以libnids作为底层驱动的pynids可以作为该库的替代,该模块作为python的C扩展编写,可能是编写的过程,有些内容考虑不够准确,导致有bug出现。但如果谨慎使用,基本上可以满足需求,同时可以得到python语言编程的便利。
还有一些个人开发的python库,其底层实现了TCP重组等。
后续我觉得有必要自己去写一个libnids的说明,网上的内容都千篇一律,没有什么有价值的地方。

本文后续采用pynids作为流量文件的处理引擎。

pynids于libnids的处理流程一样,框架也一样,只是编程语言不同。不过pynids处理多个文件时会出现bug,应该是底层进程部分或者变量分配的时候不合法导致的。
在学习编程工具完成之后,就可以得到相应的流量数据。想得到什么样的流量数据,可以根据自己的需求,进行定义,一般内容包括双向报数, 包长序列,流持续时间等。
(2018/10/23)当前已经到了这个步骤。不过简单的画图,到了一部分样本

3、

2018/10/31
这部分实验已经很就不看了,主要就是弄了一下机器学习部分的内容,还是感觉朦朦胧胧的。
回到这个流量分类,很多天之前,弄得这个测试,这个测试主要用了两个算法,看起来貌似效果很好,但其实都是因为过拟合的原因,当然这部分的内容我后续还要继续跟进。
但是如果想弄好的哈,我感觉,还是应该好好把这个特征这部分的问题给弄好。

你可能感兴趣的:(安全实践:流量分类步骤)