当前位置: 首页 > 工具软件 > Zeek > 使用案例 >

Zeek 技术介绍与应用:

窦志新
2023-12-01

简介

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的库中。

  1. 首先,我们需要安装一个docker, 具体的安装流程 在https://docs.docker.com/engine/install/ 对于不一样的系统,都有对应的案例。
  2. 第二步,获取github上的开源代码 git clone https://github.com/zeek/zeek-docker.git
  3. cd zeek-docker 进入git仓库
  4. 生成docker镜像 make build-stamp_3.0.0
    #这里需要注意的是,如果是在虚拟机上运行,请保证分配给虚拟机至少2GB以上的RAM内存。以避免出现内存不足问题
    5 . 使用Zeek进行解析pcap文件
  5. 首先我们需要在宿主机上创建一个目录,mkdir /home/pcap用于存储后面需要解析的pcap文件。这里我们会用test.pcap 为例
  6. 启动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容器目录。
  7. 然后我们进入docker 并进行zeek解析pcap ⽂件 sudo docker exec -it lord_elmelloi /bin/bash -c ‘cd /pcap && zeek -r test.pcap’
  8. 如果解析成功,这时候我们回到宿主机里的/home/pcap 目录,就可以看到一些日志文件了!

常见的日志文件除了conn.log 还有可能出现其他的日志文件

  1. dpd.log : 非标准端口上遇到的协议的摘要。
  2. dns.log :所有的DNS活动。
  3. ftp.log :FTP会话级别活动的日志。
  4. Files.log :通过网络传输文件的摘要,此信息来自不同的协议,包含HTTP,FTP和SMTP。
  5. http.log : 所有的HTTP请求及其回复的摘要。
  6. known_certs.log : 看到使用中的SSL证书。
  7. smtp.log : SMTP活动摘要。
  8. ssl.log : SSL 会话的记录,包括正在使用的证书。
  9. weird.log : 意外的协议级别活动的日志。每当Zeek的协议分析遇到意外情况时(例如,违反RFC),它都会将其记录在此文件中。

Zeek 解析pcap包的扩展用法

  1. 刚才我们用到了 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),等多种信息。
  2. 如果想获得更多的信息 ,我们可以通过改配置,或者运行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 ’
  3. 如果我们不想看到太多无用的信息,只想看到自己需要的信息呢,我们就可以使用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
	   解压文件夹下的所有文件
 类似资料: