tobiia/infer_IDS
GitHub: tobiia/infer_IDS
基于XGBoost的DNS和TLS恶意流量检测系统,通过分析PCAP文件提取行为特征,实现高召回率的威胁识别。
Stars: 0 | Forks: 0
# Infer_IDS - 恶意网络流量检测
Infer-IDS 是一个基于机器学习的系统,用于识别恶意的 DNS 和 TLS 网络流量。它分析 PCAP 格式捕获的网络流,提取行为特征,并使用训练好的 XGBoost 分类器以高召回率检测潜在威胁。
## 功能特性
- PCAP 处理:使用 Zeek 将网络数据包捕获转换为结构化日志
- 行为特征提取:从 DNS 和 TLS 网络流中提取 50 多个特征
- 机器学习检测:XGBoost 分类器对恶意流量的召回率 >97%
- 交互式 Web 界面:基于 Streamlit 的 GUI,便于文件上传和分析
- 实时分析:实时处理和分类网络流量
- 全面的日志记录:详细的审计跟踪和预测日志
## 视觉展示

## 安装
Linux/macOS:
```
# Clone the repository
git clone https://github.com/tobiia/infer_IDS.git
cd infer_ids
# 创建并激活虚拟环境
python3 -m venv ./.venv
source .venv/bin/activate
# Upgrade pip and install dependencies
pip3 install --upgrade pip
pip3 install -r requirements.txt
# Install Zeek
# Ubuntu/Debian:
sudo apt-get install zeek
# macOS:
brew install zeek
# For other systems, see: https://zeek.org/download/
```
## Web 界面
```
# Navigate to the project root and run:
cd src/infer_ids
streamlit run app.py
```
## 命令行界面
```
cd src/infer_ids
python3 cli.py
```
## 依赖项
- Zeek
- Python 3.10+
- pip
- pandas
- numpy
- scikit-learn
- xgboost
- matplotlib
- seaborn
- jupyter
- ipykernel
- typer
- joblib
- rich
- streamlit
- streamlit_file_browser
## 工作流程
### 1. PCAP 处理
使用 Zeek 将网络数据包捕获转换为结构化日志:
```
from setup.zeek import process_file
from pathlib import Path
pcap_path = Path("path/to/capture.pcap")
log_directory = process_file(pcap_path)
```
### 2. 日志解析
将 Zeek 生成的日志解析为 Connection 对象:
```
from parse.parse_log import ParseLogs
from pathlib import Path
parser = ParseLogs()
dns_conns, tls_conns = parser.parse_logs(Path("path/to/logs"))
# Convert to pandas DataFrames for analysis
dns_df = parser.to_dataframe(dns_conns)
tls_df = parser.to_dataframe(tls_conns)
```
### 3. 数据集创建
构建包含标记的正常样本和恶意样本的混合数据集:
```
from model.create_datasets import DatasetCreator
from pathlib import Path
creator = DatasetCreator(Path("model/datasets/dns"), "dns", ratio=10)
mixed_dataset = creator.build_mixed_dataset(mal_min_size=2000)
```
### 4. 模型训练
使用优化的超参数训练 XGBoost 分类器:
```
import xgboost as xgb
from sklearn.model_selection import RandomizedSearchCV
model = xgb.XGBClassifier(
objective="binary:logistic",
eval_metric=["logloss", "aucpr"],
scale_pos_weight=3.39,
random_state=42,
n_jobs=4
)
# Hyperparameter tuning and training in analysis.ipynb
```
## 特征工程
系统从网络流中提取行为特征:
### 基础特征 (DNS 和 TLS)
- 流持续时间和数据包统计
- 字节数和数据包比率
- 平均数据包长度(前向和后向)
### DNS 特定特征
- 查询长度和熵
- 子域名分析(数量、长度模式、数字比率)
- 回答数量和 TTL 统计
### TLS 特定特征
- 协议版本和密码套件
- 证书链指纹
- 客户端和服务器扩展
- 弱密码检测
## 模型性能
系统在 DNS 和 TLS 流量上均实现了高召回率:
- DNS 模型:召回率 > 96%
- TLS 模型:召回率 > 99%
阈值经过优化以最大限度地减少漏报(优先考虑召回率),因为恶意流量检测需要高灵敏度。
## 训练流水线
完整的训练流水线记录在 analysis.ipynb 中。这包括:
- 数据集创建和平衡
- 特征预处理和编码
- 交叉验证的模型训练
- 超参数优化
- 针对召回率优化的阈值调整
- 使用混淆矩阵进行性能评估
### 添加新特征
要向连接对象添加新特征:
1. 在相应的数据类(Connection、DNSConnection 或 TLSConnection)中定义字段
2. 在 `_calculate_*_features()` 方法中实现计算逻辑
3. 在 parse_log.py 的 `to_dataframe()` 方法中添加提取逻辑
4. 在 analysis.ipynb 的模型训练流水线中包含该特征
## 安全注意事项
此工具旨在用于受控环境中的网络安全分析和威胁检测。部署时:
- 仅在您有授权监控流量的网络上使用
- 安全存储训练好的模型和预测结果
- 结合额外的威胁情报来源验证预测
- 随时间监控模型性能以应对概念漂移
- 定期使用新的恶意和正常样本重新训练模型
## 许可证
本项目根据 MIT LICENSE 的条款授权。有关更多详细信息,请参阅 LICENSE。
标签:AMSI绕过, Apex, Caido项目解析, DNS安全, IP 地址批量处理, Kubernetes, PCAP分析, Python, Rootkit, Streamlit, TLS分析, XGBoost, Zeek, 信标检测, 入侵检测系统, 威胁检测, 安全数据湖, 实时分析, 恶意流量检测, 数据科学, 无后门, 机器学习, 流量分类, 特征提取, 系统分析, 网络分析, 网络安全, 访问控制, 资源验证, 逆向工具, 隐私保护