CERT NetSA Security Suite遇见 Spark:网络流量分析新操作

网络流量分析,广泛运用于流量监控、网络安全检测、用户行为分析、计费管理或其他网络活动中。说起网络流量分析工具,很多人会想到Tcpdump和Wireshark。Tcpdump是很好用的抓包工具,Wireshark用户界面也十分友好,但是面对大规模网络环境,它们都显得很无力。

那么,大规模网络环境下,网络流量分析问题怎么破?

我们可以借助CERT NetSA开发的工具和Spark来轻松实现较大规模网络分析。


CERT NetSA工具简介

CERT NetSA Security Suite是由美国卡内基梅隆大学的网络应急响应组(CERT)开发的一套网络流量分析工具套件,用于分析大规模网络流量。我们主要讨论的是套件中的YAF和super_mediator。 CERT NetSA Security Suite遇见 Spark:网络流量分析新操作 SiLK工具套件支持网络流数据的高效收集、存储和分析,使网络安全分析人员能够快速查询大型历史流量集。SiLK非常适用于分析大型分布式企业的网络流量,以及中型ISP的骨干网络或边界流量。SiLK工具分为两种类型:包装系统和分析套件。包装系统中的rwflowpack,用来收集IPFIX、NetFlow v9或NetFlow v5等的流量,并将数据转换为一种节约存储空间的格式,然后记录到特定的SiLK文件中。分析套件可以读取SiLK格式文件,并执行各种查询、统计和过滤操作。 CERT NetSA Security Suite遇见 Spark:网络流量分析新操作 YAF工具可以处理tcpdump产出的pcap格式文件,将其打包成yaf格式文件,也可以实时捕获一个网卡的流量,将其转化为双向流,然后输出给IPFIX收集程序或基于IPFIX格式的文件。YAF的输出可以直接用SiLK的分析套件来进行分析。YAF还有深度包解析的插件,支持主流的应用层协议。 CERT NetSA Security Suite遇见 Spark:网络流量分析新操作 super_mediator是一个中间件,用于将YAF的输出转换为csv和json格式文件,或者存储到mysql中。

CERT NetSA工具安装与配置

以下介绍ubuntu环境下,以服务的方式安装配置相关工具,搭建一个流量采集节点。

安装依赖的库

NetSA的工具依赖glib2-dev和libpcap,直接apt-get安装:
sudo apt-get -y install libglib2.0-dev sudo apt-get -y install libpcap-dev
libfixbuf是我们依赖的,按照以下流程安装:
wget http://tools.netsa.cert.org/releases/libfixbuf-1.7.1.tar.gz tar -zxvf libfixbuf-1.7.1.tar.gz cd libfixbuf-1.7.1 ./configure && make sudo make install

安装并配置YAF

YAF不需要修改过多繁杂的配置文件,直接从官方下载最新版的YAF码源,按照如下流程编译安装,注意编译配置时要添加applabel 和plugins配置项:
wget https://tools.netsa.cert.org/releases/yaf-2.8.4.tar.gz tar -xvzf yaf-2.8.0.tar.gz cd yaf-2.8.0 ./configure --enable-applabel --enable-plugins make make install
然后新建日志文件路径,并将YAF安装目录下可执行文件以及配置文件拷贝至系统目录下,并修改可执行文件权限:
mkdir /var/log/yaf cp etc/init.d/yaf /etc/init.d/ cp etc/yaf.conf /usr/local/etc/ chmod +x /etc/init.d/yaf
修改YAF配置文件如下:
#/usr/local/etc/yaf.conf ENABLED=1 YAF_CAP_TYPE=pcap YAF_CAP_IF=eth0 YAF_IPFIX_PROTO=tcp YAF_IPFIX_HOST=localhost YAF_IPFIX_PORT=18000 YAF_STATEDIR=/var/log/yaf YAF_EXTRAFLAGS="—silk --applabel --max-payload=2048 --plugin-name=/usr/local/lib/yaf/dpacketplugin.la"
然后我们就可以以服务的方式启动YAF了。 CERT NetSA Security Suite遇见 Spark:网络流量分析新操作

安装并配置super_mediator

同样从官网下载后编译安装:
wget https://tools.netsa.cert.org/releases/super_mediator-1.5.2.tar.gz cd super_mediator-1.5.2 ./configure && make make install
修改super_mediator的默认配置文件:
#/usr/local/etc/super_mediator.conf COLLECTOR TCP PORT 18000 COLLECTOR END rwflowpack EXPORTER TCP "silk" PORT 18001 HOST localhost FLOW_ONLY EXPORTER END EXPORTER TEXT "flow" PATH "/data/flow/flow.json" JSON EXPORTER END DEDUP_CONFIG "flow" PREFIX "useragent" [111] PREFIX "server" DIP [110, 171] PREFIX "host" [117] PREFIX "dns" [179] MAX_HIT_COUNT 10000 FLUSH_TIMEOUT 600 DEDUP_CONFIG END LOGLEVEL DEBUG LOG "/var/log/super_mediator.log" PIDFILE "/data/super_mediator.pid"
以后台运行方式启动super_mediator,启动后super_mediator会监听18000端口:
super_mediator -c /usr/local/etc/super_mediator.conf --daemonize
CERT NetSA Security Suite遇见 Spark:网络流量分析新操作

测试各工具是否能正常工作

使用ifconfig查看本地网卡信息,确定要抓取的网卡。 CERT NetSA Security Suite遇见 Spark:网络流量分析新操作 启动YAF,实时抓取网卡em1流量,并通过18001端口传输到rwflowpack,让SiLK输出处理后的流量文件。每60秒传输一次,并加上DPI解析插件,启动命令如下:
sudo yaf --in em1 --live pcap \ --ipfix tcp --out localhost\ --log /var/log/yaf/yaf.log \ --verbose --silk --verbose --ipfix-port=18001 \ --applabel --max-payload 2048 \ --applabel-rules=/usr/local/etc/yafApplabelRules.conf \ --plugin-name=/usr/local/lib/yaf/dpacketplugin.so --rotate=60
接下来将YAF抓到的流量包通过18000端口传输给super_mediator,然后super_mediator会将流量包数据转换为本地JSON文件,启动命令如下:
sudo yaf --in em1 --live pcap \ --ipfix tcp --out localhost\ --log /var/log/yaf/yaf.log \ --verbose --silk --verbose --ipfix-port=18000 \ --applabel --max-payload 2048 \ --applabel-rules=/usr/local/etc/yafApplabelRules.conf \ --plugin-name=/usr/local/lib/yaf/dpacketplugin.so --rotate=60
Super_mediator输出的json示例如下图: CERT NetSA Security Suite遇见 Spark:网络流量分析新操作

CERT NetSA工具配合Spark

上文已经提到,super_mediate可以将YAF的输出转换为本地的json文件。我们可以使用flume对super_mediator输出的json文件进行监控,并将文件变化实时传输到HDFS上,整体流程如下图。 CERT NetSA Security Suite遇见 Spark:网络流量分析新操作 首先下载flume到本地,然后在flume文件路径的下conf目录下添加一个配置文件,这里将这个文件命名为flume_flow.conf,具体内容如下:
#example.conf: A single-node Flume configuration # Name the components on this agent a1.sources = r1 a1.sinks = hdfs-sink a1.channels = c3 # Describe/configure the source a1.sources.r1.type = exec a1.sources.r1.command = tail -F /data/flow/flow.json a1.sources.r1.shell = /bin/bash -c a1.sources.r1.restart = true a1.sources.r1.restartThrottle=1000 # Use a channel which buffers events in memory a1.channels.c3.type = file a1.channels.c3.checkpointDir = ~/.flume/checkpoint/c3 a1.channels.c3.dataDirs = ~/.flume/data/c3 a1.sinks.hdfs-sink.type = hdfs a1.sinks.hdfs-sink.channel = c3 a1.sinks.hdfs-sink.hdfs.path = hdfs://192.168.*.*:9000/flume/%y-%m-%d/ a1.sinks.hdfs-sink.hdfs.useLocalTimeStamp = true a1.sinks.hdfs-sink.hdfs.filePrefix = flow a1.sinks.hdfs-sink.hdfs.round = true a1.sinks.hdfs-sink.hdfs.roundValue = 10 a1.sinks.hdfs-sink.hdfs.roundUnit = minute a1.sinks.hdfs-sink.hdfs.writeFormat = Text a1.sinks.hdfs-sink.hdfs.rollSize = 0 a1.sinks.hdfs-sink.hdfs.rollInterval = 60 a1.sinks.hdfs-sink.hdfs.rollCount = 0 a1.sinks.hdfs-sink.hdfs.batchSize = 10 a1.sinks.hdfs-sink.hdfs.fileSuffix = .json a1.sinks.hdfs-sink.hdfs.fileType = DataStream
需要注意的是flume向hdfs发送数据依赖Hadoop相应的jar包。可以下载一个完成的Hadoop安装文件,然后按Hadoop的安装流程配置好环境变量。 在YAF和super_mediator成功运行的情况下,使用刚写好的flume配置文件运行flume,命令如下:
cd apache-flume-1.7.0-bin/bin/ ./flume-ng agent -n a1 -c conf -f ../conf/flume-flow.conf -Dflume.root.logger=DEBUG,console
成功运行后会打印出HDFS文件写入日志。 CERT NetSA Security Suite遇见 Spark:网络流量分析新操作 通过Hadoop的web管理界面查看数据,可以看到flume实时传过来的数据。 CERT NetSA Security Suite遇见 Spark:网络流量分析新操作 数据到了HDFS,我们就可以用Spark分析flume发过来的json数据,还可以用zeppelin展现。 CERT NetSA Security Suite遇见 Spark:网络流量分析新操作 对于近期发生的xshell的DNS后门事件,我们可以借助DPI解析出来的DNS记录来定位内网中受影响的主机,示例如下: CERT NetSA Security Suite遇见 Spark:网络流量分析新操作

总结

YAF配合super_mediator可以方便的将流量数据实时的转化为Spark可读的json数据。在规模环境下,只需将配置好YAF和super_mediator的流量采集节点机器部署到网络主要出口的交换机旁路上,然后接入交换机流量镜像,在通过flume将数据传给Spark,即可通过Spark对网络流量数据进行分析,做到较大规模网络环境下近乎实时的网络流量分析。

参考文献

[1]https://tools.netsa.cert.org/index.html [2]http://tools.netsa.cert.org/yaf/libyaf/yaf_silk.html#install [3]https://tools.netsa.cert.org/super_mediator/super_mediator.html [4]http://flume.apache.org/documentation.html

查看原文:http://blog.nsfocus.net/cert-netsa-security-suite/