Zeek的前身为Bro,是一款性能良好的开源网络安全监控工具,可以实时分析网络流量,帮助用户监测网络活动、安全威胁和运行性能。Zeek是一款被动网络嗅探器,因此不会生成任何流量干扰网络正常运行。它可以用于监控包括HTTP、SMTP、DNS和SSH的众多网络协议,还可以检测和警报恶意软件、僵尸网络和拒绝服务攻击等安全威胁。最新版的Zeek还提供广泛的日志和报告功能,以便用户分析和显示来自多个来源的数据。 Zeek 并非主动安全设备,例如防火墙或入侵防御系统。相反,Zeek 位于"传感器"上,传感器是一种硬件、软件、虚拟或云平台,可以悄无声息地、不引人注意地观察网络流量。Zeek 会解释所看到的内容,并创建紧凑、高保真的事务日志、文件内容和完全自定义的输出,适合在磁盘上进行手动审查,或者在更方便分析师的工具(例如安全和信息事件管理 (SIEM) 系统)中进行审查。
为什么是要用Zeek?
安全团队在尝试检测和应对可疑和恶意活动时,通常依赖四种数据源。这些数据源包括第三方来源,例如执法部门、同行以及商业或非营利威胁情报组织;网络数据;基础设施和应用程序数据,包括来自云环境的日志;以及端点数据。Zeek 主要是一个收集和分析第二种数据形式(网络数据)的平台。然而,这四种数据都是任何安全团队计划的重要组成部分。 在查看来自网络的数据时,分析师可以获得四种类型的数据。根据网络安全监控范式的定义,这四种数据类型是完整内容、交易数据、提取内容和警报数据。使用这些数据类型,可以分别记录流量、汇总流量、提取流量(或者更准确地说,以文件的形式提取内容)和判断流量。 收集和分析四种类型的网络安全监控数据至关重要。问题变成了确定实现这一目标的最佳方法。值得庆幸的是,Zeek 作为 NSM 平台,可以收集至少两种(某些方面是三种)这些数据形式,即交易数据、提取内容和警报数据。
Zeek部署模式
图 1 描绘了标准的 SOHO 网络架构。字母 AD 是可能的监控位置
图 2 所示的可见网络架构描绘了如果将可见性设计到架构中而不是事后添加的话所需的设置类型。
客户路由器和客户 WAP 都没有执行 NAT,则位置 C 是一个不错的选择。 位置 D 是更好的选择。现在只需确保客户 WAP 没有进行 NAT。事实上,假设可以跨越客户交换机上的上行链路端口,则无需在此处引入另一个交换机或分路器。 位置 E 只能看到有线设备,这不是一个好的选择,因为它会忽略 WiFi 设备。 位置 F 只会看到 WiFi 设备,这不是一个好的选择,因为它会忽略有线设备。 正如图 1 所示,位置 G 基本上是不可能的。
安装 Zeek
在 Docker Hub 上提供官方 Docker 镜像,网址为https://hub.docker.com/u/zeek * * * * * * *
For the latest feature release: docker pull zeek/zeek:latest
For the latest LTS release: docker pull zeek/zeek:lts
For a specific release: docker pull zeek/zeek:5.0.0-rc1
For the nightly build: docker pull zeek/zeek-dev:latest
重要的一点:zeek的可视化是所有技术不强劲的运维人员使用的壁垒,不过没有关系,我们可以集成ELK来完成流量日志的简易化,这样可以使各个运维水平的技术人员实时掌握我们内部网络的情况。
*
*
*
Elasticsearch :一个分布式RESTful搜索引擎,用于存储所有收集的数据。Logstash :Elastic Stack的数据处理组件,用于将传入数据发送到Elasticsearch。Kibana :用于搜索和可视化日志的Web界面。
如果你要仔细观察你所见过的大多数商业化产品的数据处理和可视化都是基于ELK来实现,技术好的朋友可以去他们的后台看一看。
默认情况下,所有Zeek日志都被写入/usr/local/zeek/logs/current(在Linux上),并且每天轮换一次。
接下来,我们安装ELK,如果您参照我的文章,请使用ubuntu18.04
安装Elasticsearch
添加Elastic库sudo suapt-get update -yapt-get install apt-transport-https -ywget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.listapt-get update -y
-
安装配置 Java
apt-get update -yapt install openjdk-8-jdkjava -version
-
安装配置 Elasticsearc
apt-get install elasticsearchsed -i 's/#network.host: 192.168.0.1/network.host: localhost/g' /etc/elasticsearch/elasticsearch.ymlsed -i 's/#http.port: 9200/http.port: 9200/g' /etc/elasticsearch/elasticsearch.ymlsystemctl enable elasticsearchsystemctl start elasticsearchsystemctl status elasticsearch
-
测试 Elasticsearc
curl http://localhost:9200
安装Kibana
apt-get install kibanased -i 's/#server.host: "localhost"/server.host: "localhost"/g' /etc/kibana/kibana.ymlsed -i 's/#server.port: 5601/server.port: 5601/g' /etc/kibana/kibana.ymlsed -i 's?#elasticsearch.hosts:?elasticsearch.hosts:?g' /etc/kibana/kibana.ymlsystemctl enable kibanasystemctl start kibanasystemctl status kibana
安装Logstash
apt-get install kibanased -i 's/#server.host: "localhost"/server.host: "localhost"/g' /etc/kibana/kibana.ymlsed -i 's/#server.port: 5601/server.port: 5601/g' /etc/kibana/kibana.ymlsed -i 's?#elasticsearch.hosts:?elasticsearch.hosts:?g' /etc/kibana/kibana.ymlsystemctl enable kibanasystemctl start kibanasystemctl status kibana
安装Logstash
apt-get install logstash -ymkdir /etc/logstash/sslopenssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/logstash/ssl/logstash.key -out /etc/logstash/ssl/logstash.crt
-
配置Logstash
sudo vim /etc/logstash/zeek-conn-01.conf
下面是完整的配置文件,用于从Filebeat输入zeek conn日志,处理它们并将它们发送到Elasticsearch中进行索引 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
input { beats { host => "localhost" port => 5044 }}
filter { if [message] =~ /^#/ { drop { } }
if [type] == "zeek-conn" { csv { columns => ["ts","uid","id_orig_h","id_orig_p","id_resp_h","id_resp_p","proto","service","duration","orig_bytes","resp_bytes","conn_state","local_orig","local_resp","missed_bytes","history","orig_pkts","orig_ip_bytes","resp_pkts","resp_ip_bytes","tunnel_parents"] separator => " " }
date { match => [ "ts", "UNIX" ] } geoip { source => "id.orig_h" }
mutate { convert => { "id.orig_p" => "integer" } convert => { "id.resp_p" => "integer" } convert => { "orig_bytes" => "integer" } convert => { "duration" => "float" } convert => { "resp_bytes" => "integer" } convert => { "missed_bytes" => "integer" } convert => { "orig_pkts" => "integer" } convert => { "orig_ip_bytes" => "integer" } convert => { "resp_pkts" => "integer" } convert => { "resp_ip_bytes" => "integer" } } }}
output { elasticsearch { hosts => ["localhost:9200"] }}
systemctl enable logstashsystemctl start logstash
使用Filebeat运送Zeek日志
-
在Ubuntu 18.04上安装/设置Filebea
mkdir /etc/filebeat/sslwget https://raw.githubusercontent.com/CptOfEvilMinions/BlogProjects/master/ElasticStackv7/configs/filebeat/filebeat.yml -O /etc/filebeat/filebeat.ymlsed -i 's#"localhost:5044"#"<IP addr or FQDN of Logstash>:5044"#g' /etc/filebeat/filebeat.ymlsystemctl enable filebeatsystemctl start filebeatsystemctl status filebeat
- 配置Filebeat
在Filebeat配置文件中,定义到日志文件和输出目的地的路径。下面的示例定义了zeek的conn.log文件的prospectors,该文件包含网络TCP/UDP/ICMP连接上的数据。要跟踪其他日志,需要以类似的方式为每个文件添加prospectors。 * * * * * * * * * * * *
sudo vim /etc/filebeat/filebeat.ymlfilebeat.prospectors:- input_type: log paths: - "/usr/local/zeek/logs/current/conn.log" fields: type: "zeek-conn" fields_under_root: true
output.logstash: # The Logstash hosts hosts: ["localhost:5044"]
-
启动logstash
cd /usr/share/logstashsudo bin/logstash -f zeek-conn-01.conf
-
启动Filebea
sudo service filebeat start
也可以通过http://localhost:5601/status查看kibana状态,这个页面也包括了所有安装的插件列表。
输入索引模式,选择timestamp字段,并创建新的索引模式。打开Kibana中的发现页面,显示zeek conn.log消息。左侧将显示Logstash处理的所有可用字段的列表,以供分析
创建可视化
点击左侧导航条中的"Visualize"按钮点击"Create new visualization"按钮或者加号(+)按钮选择一个可视化类型指定一个搜索查询来检索可视化数据在可视化的构建器中选择Y轴的聚合操作。例如,sum,average,count等等设置X轴Y轴
创建Dashboard仪表板
在导航条上点击"Dashboard"点击"Create new dashboard"或者"加号(+)"按钮点击"Add"按钮为了添加一个可视化,从可视化列表中选择一个,或者点击"Add new visualization"按钮新创建一个为了添加一个已保存的查询,点击"Saved Search"选项卡,然后从列表中选择一个当完成添加并且调整了dashboard的内容后,去顶部菜单栏,点击"Save",然后输入一个名字
各位朋友只要用心去研究和学习,你就会发现起初没有现成的东西,我们做安全的时候都是通过技术去实现。如下图:
你到底层产品去研究的话,你发现几乎都是重复造轮子。只是说法概念不同罢了。所以掌握核心底层的技术原理,你才能快速判断一个商业化产品到底好不好,能不能解决问题。到底靠不靠谱,因为它的底层逻辑你知道,到底有没有创新,打破了什么瓶颈,有没有优化,有没有在老外思维上添加了适合中国环境的元素。有没有核心差异化技术,有没有引入新的思维和逻辑,都是评价商业化产品好与坏的重要指标。
大家一起学习,只有人人提升,才不会有概念即安全的生态! 加油⛽️