使用 Zeek 检测信标模式
使用说明
使用 ZAT(Zeek 分析工具)加载 Zeek conn.log 数据,按源/目标对分组连接,并计算时序统计信息以识别信标行为。
from zat.log_to_dataframe import LogToDataFrame
import numpy as np
log_to_df = LogToDataFrame()
conn_df = log_to_df.create_dataframe('/path/to/conn.log')
# 按源/目标对分组并计算到达时间间隔
for (src, dst), group in conn_df.groupby(['id.orig_h', 'id.resp_h']):
times = group['ts'].sort_values()
intervals = times.diff().dt.total_seconds().dropna()
if len(intervals) > 10:
std_dev = np.std(intervals)
mean_interval = np.mean(intervals)
# 相对于均值标准差低 = 可能是信标行为
关键分析步骤:
- 使用 ZAT LogToDataFrame 将 Zeek conn.log 解析为 DataFrame
- 按源 IP 和目标 IP 对分组连接
- 计算连续连接之间的到达时间间隔
- 计算标准差和变异系数
- 将变异系数低的对标记为潜在信标
示例
from zat.log_to_dataframe import LogToDataFrame
log_to_df = LogToDataFrame()
df = log_to_df.create_dataframe('conn.log')
print(df[['id.orig_h', 'id.resp_h', 'ts', 'duration']].head())