praxezz/Pherion.

GitHub: praxezz/Pherion.

Pherion 是一个 Python 编写的网络入侵检测系统,结合 MITRE ATT&CK 规则引擎、协议级机器学习基线和人工确认的自愈机制,为 SOC 实验室提供实时威胁检测与响应能力。

Stars: 0 | Forks: 0

# Pherion — SOC 高级检测与机器学习驱动的 IDS **Pherion** 是一个 Python 网络入侵检测系统(IDS),它结合了包含 37 条规则且映射到 MITRE ATT&CK 的检测引擎、基于协议的机器学习基线、告警关联,以及可选的 Human-in-the-loop 自愈(自动修复)引擎。它既可以作为桌面 GUI(实时数据包流、网络图表、协议图表)运行,也可以在服务器上完全以 headless 模式运行。 ``` ██████╗ ██╗ ██╗███████╗██████╗ ██╗ ██████╗ ███╗ ██╗ ██╔══██╗██║ ██║██╔════╝██╔══██╗██║██╔═══██╗████╗ ██║ ██████╔╝███████║█████╗ ██████╔╝██║██║ ██║██╔██╗ ██║ ██╔═══╝ ██╔══██║██╔══╝ ██╔══██╗██║██║ ██║██║╚██╗██║ ██║ ██║ ██║███████╗██║ ██║██║╚██████╔╝██║ ╚████║ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ``` ## ✨ 功能 - **37 条检测规则,映射至 MITRE ATT&CK** — SYN/UDP/慢速端口扫描、NULL/XMAS/FIN 扫描、ARP 欺骗、DNS 隧道/洪泛、ICMP 洪泛/隧道、暴力破解、撞库、SQL 注入、webshell 上传、SMB 横向移动、数据泄露、land/smurf/RST/HTTP 洪泛、beacon/C2 检测、JA3 TLS 指纹黑名单、TTL 异常以及 payload 熵分析。 - **类 Suricata 签名引擎** — 除了内置规则外,还可以编写自定义的轻量级签名。 - **基于协议的 ML 基线** — TCP、UDP 和 ICMP 分别进行建模;规则引擎与 ML 投票的集成减少了误报。支持通过随机森林(Random Forest)从 CSV 数据集(CIC-IDS、NSL-KDD、UNSW-NB15)进行监督训练,并提供针对不平衡类别的可选 SMOTE 过采样。 - **威胁情报与关联** — IOC feed 集成(IP/域名/hash),一个将相关告警分组为事件的关联引擎,以及严重/高/中/低的风险评分。 - **Human-in-the-loop 自愈** — 检测到威胁时,违规 IP 的流量将被暂停,并提示操作员(终端 + GUI)选择**拦截**、**限速**或**忽略**。如果没有明确的决定,任何操作都不会被自动修复;如果操作员未响应,流量将保持暂停状态。 - **生产级底层架构** — 有界环形缓冲区(自动驱逐)、与方向无关的告警去重、每条规则的限速(最高 10 次告警/分钟)、线程安全的共享状态(到处使用 RLock)、用于告警/统计/事件的 SQLite 持久化、带有空闲/活动超时的双向流跟踪,以及每条规则的错误隔离,确保一条糟糕的规则不会导致整个 pipeline 崩溃。 - **结构化日志** — JSONL 事件日志(支持 SIEM),外加可选的 syslog 转发。 - **GUI 或 headless** — 完整的 Tkinter 仪表板(实时数据包流、网络图表、波形/样条/柱状图)或用于服务器和 CI 环境的 `--headless` 控制台模式。 - **PCAP 导出**和 **BPF 过滤**支持,方便进行 Wireshark 跟踪分析。 - **GeoIP 丰富化**(可选)— 如果存在 GeoLite2-City 数据库,则对告警源 IP 进行位置标记。 ## 🚀 快速开始 ### 前置条件 - Python 3.9+ - Windows、macOS 或 Linux - **Root/管理员权限**(原始数据包捕获需要提权) - 仅限 Windows:安装 [Npcap](https://npcap.com) 以及 `scapy` ### 安装 ``` git clone https://github.com//pherion.git cd pherion pip install -r requirements.txt ``` ### 运行 ``` # GUI 模式 sudo python pherion.py # Headless 模式 sudo python pherion.py --headless # Headless、特定接口 + BPF filter sudo python pherion.py --headless --interface eth0 --bpf "tcp port 80" ``` ## 🧰 CLI 标志 | 标志 | 作用 | |---|---| | `--headless` | 在没有 Tkinter GUI 的情况下运行(控制台模式)。 | | `-i`, `--interface` | 用于捕获的网络接口。 | | `--bpf` | 用于限定捕获范围的 Berkeley Packet Filter 表达式。 | | `--rules` | 类 Suricata 签名规则文件的路径。 | | `--alert-json` | 追加 JSON 告警(每行一个)的路径。 | | `--syslog` | 告警的 `host:port` syslog 目标地址。 | | `--whitelist` | 始终忽略的逗号分隔的 IP/子网。 | | `--blacklist` | 始终触发告警的逗号分隔的 IP/子网。 | | `--promisc` | 开启混杂模式(默认开启)。 | | `--no-selfheal` | 禁用自愈引擎 — 仅发出告警,不弹出修复提示。 | ## 📊 检测工作原理 1. **捕获与解析** — Scapy 嗅探原始数据包,将其标准化为 `ParsedPacket`,并在双向 `FlowTracker` 中进行跟踪。 2. **规则引擎** — 每个数据包/流运行 37 条规则,每条规则相互隔离,因此有缺陷的规则不会导致 pipeline 崩溃;每次匹配都带有一个 MITRE ATT&CK 技术 ID。 3. **签名引擎** — 一个可选的类 Suricata 规则集与内置检测器并行运行。 4. **ML 集成** — 基于协议的基线(TCP/UDP/ICMP 分别建模)与规则引擎共同投票,以减少误报;模型可以从标记的 CSV 数据集中进行训练。 5. **关联与严重性** — 相关告警由关联引擎分组为事件,并进行严重/高/中/低的评分。 6. **自愈(可选)** — 匹配成功时,攻击者 IP 的流量将被暂停,操作员会被要求选择拦截、限速或忽略 — 绝不会采取任何全自动操作。 7. **持久化与导出** — 告警、统计和事件被写入 SQLite;结构化的 JSONL 事件和可选的 syslog 转发支持 SIEM 接入;捕获的数据可以导出为 PCAP 以供 Wireshark 分析。 ## ⚙️ 依赖项 | 包 | 是否必须? | 用途 | |---|---|---| | `scapy` | ✅ 必须 | 数据包捕获和协议解析 | | `numpy` | ✅ 必须 | ML 基线计算 / 特征向量 | | `pandas` | ✅ 必须 | 为 ML 训练加载 CSV 数据集 | | `scikit-learn` | ✅ 必须 | 随机森林分类器、缩放和指标 | | `joblib` | ✅ 必须 | 保存/加载训练好的 ML 模型 | | `psutil` | 可选 | 系统健康监控(CPU/内存/线程) | | `imbalanced-learn` | 可选 | 针对不平衡 ML 训练数据的 SMOTE 过采样 | | `geoip2` | 可选 | GeoIP 丰富化(需要本地 `GeoLite2-City.mmdb`) | | `tkinter` | 可选 | GUI 模式(随大多数 Python 安装附带) | 如果缺少可选依赖,Pherion 会按功能优雅降级 — 它会在启动时准确打印出缺少的内容以及如何安装它。 使用以下命令安装所有内容: ``` pip install -r requirements.txt ``` ## 📁 数据与输出布局 首次运行时,Pherion 会在脚本旁边创建一个 `pherion_data/` 目录: ``` pherion_data/ ├── db/ # SQLite persistence — alerts, stats, incidents ├── logs/ # daily rotating log + JSONL structured events ├── models/ # trained ML baseline/classifier artifacts └── pcaps/ # exported packet captures ``` `pherion_data/` 中的任何内容都不会提交到该仓库中 — 参见 `.gitignore`。 ## 🗺️ 路线图设想 - [ ] 实现 IPv6 优先的规则覆盖与 IPv4 对齐 - [ ] 为批准网关提供可插拔的通知渠道(Slack/webhook,而不仅仅是终端+GUI) - [ ] 使用配置文件来管理白名单/黑名单/阈值,而不是仅使用 CLI 标志 - [ ] 针对常见的网络环境配置(家庭/SOHO/企业)提供额外的预训练基线模型 有其他想法?欢迎提交 issue! ## 🔒 安全 在 Pherion 本身发现了安全问题?请参阅 **[SECURITY.md](SECURITY.md)**。 ## ⚠️ 免责声明 Pherion 是一款用于教育/个人 SOC 实验室环境的工具,用于监控**您拥有或被明确授权监控的**流量。它会捕获原始数据包,并且在启用自愈功能的情况下,可以在您明确批准的情况下对您自己系统上的 IP 进行限速或设置 null-route — 切勿将其用于您无法控制的网络。检测阈值针对通用场景进行了调整,可能需要根据您的环境进行微调;任何 IDS 都可能出现误报/漏报。在生产关键型环境中,它不能替代经过严格审查的企业级 SOC/SIEM 架构。 ## 📄 许可证 基于 [MIT License](LICENSE) 发布 — Copyright (c) 2025 Praveen K.
标签:逆向工具