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,便于文件上传和分析 - 实时分析:实时处理和分类网络流量 - 全面的日志记录:详细的审计跟踪和预测日志 ## 视觉展示 ![](https://raw.githubusercontent.com/tobiia/infer_IDS/main/src/infer_ids/public/infer_ids.gif) ## 安装 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, 信标检测, 入侵检测系统, 威胁检测, 安全数据湖, 实时分析, 恶意流量检测, 数据科学, 无后门, 机器学习, 流量分类, 特征提取, 系统分析, 网络分析, 网络安全, 访问控制, 资源验证, 逆向工具, 隐私保护