简介
Zeek(bro) 是一款被动的开源网络流量分析器,它的主要用作一种安全监视器,可以对链接上的所有流量进行深入检查,并且生成大量的日志文件,以便于查找可疑活动的迹象。
部署Zeek后得到的这些日志不仅包括对网络上每个连接的全面记录,还包括应用程序层记录,例如所有HTTP会话及其请求的URI,密钥标头,MIME类型和服务器响应;带回复的DNS请求;SSL证书;SMTP会话的关键内容。
我们选择使用Zeek而不是传统IDS的原因是因为Zeek更加灵活,可以进行定制和扩展。Zeek的脚本语言支持在UNIX系统上用不同的方法去查找可疑活动,包括语义滥用检测,异常检测和行为分析。
Docker – Zeek
我们这里选择把Zeek安装到Docker上,是考虑到客户进行这个功能更新时,是无法连接到网络的,所以我们尽可能让客户不在线安装包,把Zeek嵌入docker,做好Docker镜像配置即可。
Docker 是一款使用者通过容器(container)开发,部署,运行应用的平台。这里面我们需要做一个Docker的镜像并且安装Zeek的容器。
Zeek安装
这里我们使用github上开源的Zeek Docker,它实现了自动把Zeek编译并且安装在docker的库中。
- 首先,我们需要安装一个docker, 具体的安装流程 在https://docs.docker.com/engine/install/ 对于不一样的系统,都有对应的案例。
- 第二步,获取github上的开源代码 git clone https://github.com/zeek/zeek-docker.git
- cd zeek-docker 进入git仓库
- 生成docker镜像 make build-stamp_3.0.0
#这里需要注意的是,如果是在虚拟机上运行,请保证分配给虚拟机至少2GB以上的RAM内存。以避免出现内存不足问题
5 . 使用Zeek进行解析pcap文件 - 首先我们需要在宿主机上创建一个目录,mkdir /home/pcap用于存储后面需要解析的pcap文件。这里我们会用test.pcap 为例
- 启动dockers 并且对于宿主机上的目录建立docker容器里的目录
sudo docker run -itd --rm --name lord_elmelloi -v /home/pcap:/pcap broplatform/bro:3.0.0 /bin/bash
在这一段里面 /home/pcap:/pcap 冒号前是宿主机目录,对应的冒号后是docker容器目录。 - 然后我们进入docker 并进行zeek解析pcap ⽂件 sudo docker exec -it lord_elmelloi /bin/bash -c ‘cd /pcap && zeek -r test.pcap’
- 如果解析成功,这时候我们回到宿主机里的/home/pcap 目录,就可以看到一些日志文件了!
常见的日志文件除了conn.log 还有可能出现其他的日志文件
- dpd.log : 非标准端口上遇到的协议的摘要。
- dns.log :所有的DNS活动。
- ftp.log :FTP会话级别活动的日志。
- Files.log :通过网络传输文件的摘要,此信息来自不同的协议,包含HTTP,FTP和SMTP。
- http.log : 所有的HTTP请求及其回复的摘要。
- known_certs.log : 看到使用中的SSL证书。
- smtp.log : SMTP活动摘要。
- ssl.log : SSL 会话的记录,包括正在使用的证书。
- weird.log : 意外的协议级别活动的日志。每当Zeek的协议分析遇到意外情况时(例如,违反RFC),它都会将其记录在此文件中。
Zeek 解析pcap包的扩展用法
- 刚才我们用到了 zeek -r test.pcap 这里会让zeek进行对于test.pcap的默认解析,解析出来的conn.log文件 会报含例如 时间(ts), 用户id(uid),源地址(id.orig_h),源端口(id.orig_p),目的地地址(id.resp_h),目的地端口(id.resp_p),通讯协议(proto),等多种信息。
- 如果想获得更多的信息 ,我们可以通过改配置,或者运行zeek的时候手动添加,这里面因为我们使用的是docker-zeek,zeek已经嵌入docker了,所以改配置不太容易实现,就讲一下手动添加的方法。
a. 首先,我们要先去https://docs.zeek.org/en/current/script-reference/scripts.html 找到对应的脚本语句,这里我们以policy/protocols/conn/mac-logging.zeek 为例,这是解锁mac地址的功能,会在conn.log日志上添加源MAC地址和目的地MAC地址。
b. 之后我们只需要在运行zeek的时候加上这一行就可以手动添加新信息了sudo docker exec -it lord_elmelloi /bin/bash -c 'cd /pcap && zeek -C -r test.pcap policy/protocols/conn/mac-logging ’ - 如果我们不想看到太多无用的信息,只想看到自己需要的信息呢,我们就可以使用zeek-cut 来只提取我们需要的信息,zeek-cut可以灵活且准确的更改日志文件,它将通过解析每个文件的标头,并返还用户可用的特定列数据。
a. sudo docker exec -it lord_elmelloi /bin/bash -c 'cd /pcap && zeek -C -r test.pcap && zeek-cut -c < conn.log id.orig_h id.orig_p
比如这种情况下,我们就会在stdout返回出conn.log里源地址和源接口这两列。 这里-c的意思为 保留标头。
b. 特殊的情况是 如果想返回时间,因为conn.log里保存的是epoch time,如果想转为可读的话,我们需要添加-d ts
zeek-cut -c -d ts < conn.log id.orig_h id.orig_p
Zeek 作为命令行的扩展
1.监控事实流量
zeek -i en0 <list of scripts to load>
en0 可以由您选择的接口代替,一般情况下会加载一些常用的基本脚本
2. 让Zeek加载指定脚本
zeek <options> <scripts...>
比如刚才的,添加mac地址
zeek -C -r test.pcap policy/protocols/conn/mac-logging
或者
zeek -r mypackets.trace frameworks/files/extract-all
解压文件夹下的所有文件