aliloumak26/Python-SIEM

GitHub: aliloumak26/Python-SIEM

这是一个基于 Python 的轻量级实时 SIEM 系统,集成了 RegEx 签名与机器学习混合检测、日志加密及可视化仪表板,用于网络安全监控与威胁分析。

Stars: 10 | Forks: 1

# Python SIEM -- 实时入侵检测系统 一个用 Python 构建的安全信息和事件管理 (SIEM) 系统。本项目提供实时网络流量监控、多引擎威胁检测(RegEx 签名 + 人工智能)、全日志加密,以及带有全球威胁地图的现代化图形仪表板。 ## 目录 1. [总体架构](#general-architecture) 2. [核心功能](#key-features) 3. [项目结构](#project-structure) 4. [前置条件与安装](#prerequisites-and-installation) 5. [配置](#configuration) 6. [使用方法](#usage) 7. [检测引擎](#detection-engines) 8. [机器学习](#machine-learning) 9. [日志加密](#log-encryption) 10. [地理位置](#geolocation) 11. [数据库](#database) 12. [攻击生成器](#attack-generator) 13. [技术栈](#technology-stack) ## 总体架构 ``` Network Logs (encrypted) | v +---------------------+ | Decryption | utils/dechiffrer.py (Fernet AES-128-CBC) +---------------------+ | v +---------------------+ +---------------------+ | 11 RegEx Detectors | ----> | Alert Manager | | (detectors/) | | (core/) | +---------------------+ +---------------------+ | | v v +---------------------+ +---------------------+ | ML Model | | Database | | Isolation Forest | | SQLite (siem.db) | +---------------------+ +---------------------+ | | +---------------+---------------+ | v +---------------------+ | Dashboard GUI | | PySide6 + Folium | +---------------------+ ``` ## 核心功能 - **混合检测**:结合 11 个基于签名的检测器 (RegEx) 和一个机器学习模型 (Isolation Forest),以识别已知和未知威胁。 - **全加密**:所有日志在写入磁盘之前,均通过 Fernet (cryptography 库) 使用 AES 进行加密。分析期间会即时执行解密。 - **地理位置**:使用 MaxMind GeoLite2-City 数据库(国家、城市、GPS 坐标)定位源 IP 地址,并通过 AbuseIPDB API 进行信誉检查。 - **现代 GUI**:实时仪表板,包含统计卡片、警报表、Top 5 国家图表、Top 10 IP 列表以及交互式世界地图 (Folium + CartoDB dark_matter)。 - **持久化**:所有警报均存储在 SQLite 数据库中,包含严重性级别、ML 分数、地理位置数据和时间戳。 - **内置攻击生成器**:模拟恶意流量(基于签名和行为),用于演示和测试。 ## 项目结构 ``` Python-SIEM/ | |-- dashboard_gui.py # Main entry point (Graphical Interface) |-- attacks_generator.py # Malicious traffic generator for testing |-- geo_finder.py # Geolocation module (GeoLite2-City) |-- requirements.txt # Python dependencies |-- .env # Environment variables (keys, paths) |-- chiffred.enc # Encrypted log file (generated at runtime) |-- siem.db # SQLite database (generated at runtime) | |-- config/ | |-- settings.py # Configuration loader (.env) | |-- core/ | |-- alert_manager.py # Alert manager (severity, geo, DB) | |-- database.py # SQLite data access layer | |-- detectors/ # 11 signature-based detection engines | |-- sqli.py # SQL Injection | |-- xss.py # Cross-Site Scripting (XSS) | |-- bruteforce.py # Brute Force | |-- csrf.py # Cross-Site Request Forgery (CSRF) | |-- crlf.py # CRLF Injection | |-- nosql.py # NoSQL Injection | |-- os_injection.py # OS Command Injection | |-- traversal.py # Path Traversal | |-- file_upload.py # Malicious File Upload | |-- HTTP.py # HTTP Scanner Detection | |-- ip.py # IP Reputation (AbuseIPDB) | |-- ml/ # Machine Learning module (see ml/README.md) | |-- anomaly_detector.py # Anomaly detector (Isolation Forest) | |-- train.py # Training script | |-- anomaly_model.pkl # Serialized model (pre-trained) | |-- scaler.pkl # Serialized scaler (StandardScaler) | |-- utils/ | |-- chiffrer.py # Fernet encryption (AES) | |-- dechiffrer.py # Fernet decryption | |-- normalize.py # Log normalization | |-- data/ | |-- GeoLite2-City.mmdb # MaxMind geolocation database | |-- logs/ |-- alerts.log # Alert log file (plain text) ``` ## 前置条件与安装 ### 前置条件 - Python 3.10 或更高版本 - pip (Python 包管理器) - GeoLite2-City 数据库(放置在 `data/` 目录下的 `.mmdb` 文件) ### 安装 ``` # Clone the repository git clone cd Python-SIEM # Create a virtual environment (recommended) python -m venv venv venv\Scripts\activate # Windows source venv/bin/activate # Linux / macOS # Install dependencies pip install -r requirements.txt # Configure environment variables # Edit the .env file (see Configuration section) # Launch the dashboard python dashboard_gui.py ``` ML 模型随附 **预训练** 文件 (`ml/anomaly_model.pkl`)。仪表板会在启动时自动加载它。如果您希望使用新数据重新训练模型,请手动运行 `python ml/train.py`。 ## 配置 项目根目录下的 `.env` 文件包含以下变量: | 变量 | 描述 | 必填 | |------------------|----------------------------------------|:------:| | `FERNET_KEY` | Fernet 加密密钥 (base64, 32 字节) | 是 | | `CHIFFRED_PATH` | 加密日志文件的路径 | 否 | | `API_KEY` | 用于 IP 信誉查询的 AbuseIPDB API 密钥 | 是 | 生成 Fernet 密钥: ``` from cryptography.fernet import Fernet print(Fernet.generate_key().decode()) ``` ## 使用方法 ### 启动仪表板 ``` python dashboard_gui.py ``` 界面启动后会自动监控 `chiffred.enc` 文件。每条新的加密行都会被解密,由所有 11 个检测器和 ML 模型进行分析,然后实时显示。 ### 启动攻击生成器 在仪表板中,点击控制栏中的 **Start** 按钮。生成器会模拟各种攻击(SQL 注入、XSS、暴力破解、CSRF、行为异常等),并将加密日志写入 `chiffred.enc`。 ### 筛选警报 **Filter** 下拉菜单允许选择特定的攻击类型,以仅显示匹配的警报。 ## 检测引擎 `detectors/` 目录包含 11 个独立的检测引擎,每个引擎专用于特定类型的威胁: | 检测器 | 文件 | 检测方法 | |-------------------|---------------------|-----------------------------------------------------------------------| | SQL 注入 | `sqli.py` | 40+ RegEx 模式 (UNION, DROP, 堆叠查询等) | | XSS | `xss.py` | HTML/JavaScript 模式 (script, onerror, onload 等) | | 暴力破解 | `bruteforce.py` | 失败登录尝试的频率分析 | | CSRF | `csrf.py` | 缺失 CSRF token 或检测可疑 referer | | CRLF 注入 | `crlf.py` | 头部中的 %0d%0a 序列和回车符 | | NoSQL 注入 | `nosql.py` | MongoDB 运算符 ($gt, $ne, $where, $regex) | | OS 命令注入 | `os_injection.py` | 系统命令 (whoami, cat, ls, 管道, 反引号) | | 路径遍历 | `traversal.py` | ../ 序列和敏感文件访问 | | 文件上传 | `file_upload.py` | 危险扩展名 (.php, .exe, .jsp, 双重扩展名) | | HTTP 扫描器 | `HTTP.py` | 扫描工具 User-Agents (sqlmap, Nikto, Nmap, DirBuster) | | IP 信誉 | `ip.py` | 带缓存的 AbuseIPDB API(可配置的置信度阈值) | 每个检测器都公开一个 `detect(line)` 函数,该函数返回一个元组 `(found: bool, patterns: list, attack_type: str)`。 ## 机器学习 `ml/` 模块集成了一个基于 scikit-learn 中 **Isolation Forest** 算法的异常检测器。这个补充引擎能够检测绕过 RegEx 签名的未知或混淆攻击。 该模型从每个 HTTP 请求中提取 13 个特征(长度、Shannon 熵、特殊字符比率、已知模式匹配等),并分配一个 0 到 1 之间的异常分数。 模型 **经过预训练并随项目提供**。仪表板在启动时会自动加载它——无需手动训练步骤。 有关 ML 架构、训练流程和性能指标的更多详细信息,请参阅专用文档:[ml/README.md](ml/README.md)。 ## 日志加密 所有日志均使用 `cryptography` 库中的 **Fernet** 算法 (AES-128-CBC + HMAC-SHA256) 进行加密。 - **加密** (`utils/chiffrer.py`):每条日志行都被单独加密并追加到 `chiffred.enc` 文件中。 - **解密** (`utils/dechiffrer.py`):仪表板会即时解密每一行,以便进行分析和显示。 - **密钥**:存储在 `.env` 文件的 `FERNET_KEY` 变量中。 此机制确保了存储在磁盘上的日志的机密性,即使在文件系统受损的情况下也是如此。 ## 地理位置 源 IP 地理位置依赖两个组件: 1. **GeoLite2-City** (MaxMind):本地数据库 (`data/GeoLite2-City.mmdb`),为每个 IP 提供国家、城市和 GPS 坐标。会对坐标应用轻微抖动,以防止在地图上出现视觉重叠。 ![Geo ip map pic ](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ea2a8e8e6f052959.png) 2. **AbuseIPDB** (API):外部 IP 信誉服务。置信度分数 (0-100%) 会与可配置的阈值(默认:50%)进行比较。一小时的本地缓存可防止重复的 API 调用。 ## 数据库 `siem.db` 文件 (SQLite) 会在首次启动时自动生成。它包含: - **alerts 表**:时间戳、攻击类型、检测到的模式、源 IP、严重性 (critical/high/medium/low)、ML 分数、地理位置数据(国家、城市、坐标)、原始日志行。 - **honeypot_logs 表**:服务、源 IP、端口、尝试的凭据、执行的命令。 `Database` 类 (`core/database.py`) 提供插入、查询(最近警报、顶级攻击者、时间线、地理位置数据)和维护(清除超过 30 天的数据)的方法。 ## 攻击生成器 `attacks_generator.py` 文件模拟真实的网络流量,包括: - **基于签名的攻击**:可被 RegEx 检测到的 Payload(SQL 注入、XSS、CSRF、CRLF、路径遍历、NoSQL 注入、OS 命令注入、HTTP 扫描器、文件上传)。 - **行为攻击**:旨在绕过 RegEx 且仅能被 ML 模型检测到的混淆 Payload(高熵、非标准编码、大量 Payload、原型污染)。 - **正常流量**:合法的 HTTP 请求,以保持现实的比例。 这三种类别的分布是平衡的(各占 33%)。 ## 技术栈 | 组件 | 技术 | |----------------------|---------------------------------------| | 语言 | Python 3.10+ | | 图形界面 | PySide6 (Qt6) | | 地图 | Folium + CartoDB dark_matter | | 机器学习 | scikit-learn (Isolation Forest) | | 加密 | cryptography (Fernet / AES) | | 地理位置 | geoip2 (MaxMind GeoLite2-City) | | IP 信誉 | AbuseIPDB (REST API) | | 数据库 | SQLite3 | | 配置 | python-dotenv | ## 许可证 学术项目。保留所有权利。
标签:AbuseIPDB, AES加密, AMSI绕过, Apex, GUI, IP地理位置, Isolation Forest, PySide6, Python, SQLite, WSL, 仪表盘, 入侵检测系统, 威胁地图, 威胁情报, 威胁检测, 孤立森林, 安全数据湖, 开发者工具, 开源安全工具, 异常检测, 无后门, 日志加密, 机器学习, 混合检测, 网络安全, 网络安全运营, 网络流量分析, 逆向工具, 逆向工程平台, 隐私保护