使用 Zeek 和 Python 进行实时威胁检测
Zeek(前身为Bro)是一个网络安全监测系统,可以通过监控网络流量来检测威胁,同时还提供了丰富的协议解析和日志输出功能。Python 是一种流行的编程语言,使用 Python 可以扩展 Zeek 的功能,进行更高级的威胁检测和数据分析。
本文将介绍如何使用 Zeek 和 Python 进行实时威胁检测。我们将通过 Zeek 监控网络流量,将检测到的数据传递给 Python 脚本进行分析,并输出检测结果。
- Zeek 的安装和配置
首先需要安装 Zeek,可以从官网 https://www.zeek.org/download/index.html 下载二进制安装包进行安装。
安装完成后,需要配置 Zeek 监听的网络接口和输出的日志格式。编辑 Zeek 的主配置文件 /usr/local/zeek/etc/zeekctl.cfg,修改以下配置项:
[zeek] interface=eth0
将 interface 配置为需要监听的网络接口。
然后编辑 /usr/local/zeek/share/zeek/site/local.zeek,添加以下内容:
@load policy/tuning/json-logs.zeek event bro_init() { Log::add_filter(Conn::LOG, [$name="json", $path="conn.json"]); }
这将启用 JSON 格式的日志并输出到 conn.json 文件中。
- Python 脚本
接下来我们将编写 Python 脚本,用于分析 Zeek 输出的网络流量数据。
首先需要安装 Python,推荐使用 Python 3.x 版本。然后安装以下依赖库:
pip install bro_log_parser pip install pygtail
- bro_log_parser 用于解析 Zeek 的 JSON 格式日志;
- pygtail 用于实时读取日志文件并获取新增的日志数据。
代码如下:
from bro_log_parser import parse_file from pygtail import Pygtail def analyze_log(): # 监控日志文件,在有新的日志输出时进行解析 for line in Pygtail('conn.json'): # 解析 JSON 格式的日志 conn = parse_file(line.strip(), 'conn') if conn is None: continue # 进行威胁检测 if 'pidancode.com' in conn.orig_host: print('检测到恶意流量:', conn.orig_host, conn.resp_host, conn.service) if __name__ == '__main__': analyze_log()
以上代码实现了读取 Zeek 输出的 conn.json 日志文件,并解析其中的连接记录。对于每条连接记录,如果 orig_host 包含字符串“pidancode.com”,则将其视为恶意流量并输出。
- 启动 Zeek 和 Python
最后我们需要启动 Zeek 和 Python,让它们能够协同工作。
启动 Zeek:
sudo /usr/local/zeek/bin/zeekctl start
启动 Python:
python analyze.py
运行后,Python 会持续监听 conn.json 文件的变化,并进行威胁检测。如果检测到了恶意流量,会输出类似如下的结果:
检测到恶意流量: 54.246.64.145 192.168.1.103 http
相关文章