siva404e/security-log-analyzer

GitHub: siva404e/security-log-analyzer

基于 Flask 的安全日志分析仪表板,专注解析 SSH 认证日志以检测暴力破解和凭据泄露等威胁。

Stars: 0 | Forks: 0

# SecureLog — 安全日志分析器与威胁仪表板 🔍 **一个基于 Flask 的威胁情报仪表板,通过解析 SSH 身份验证日志来检测暴力破解攻击、可疑 IP、凭据泄露指标以及被针对的用户名——并通过交互式深色主题 Web 界面进行可视化展示。** ## 仪表板预览 ``` Log File: auth.log (2,847 entries) ┌──────────────────────────────────────────────────────────────┐ │ 🚨 CRITICAL THREAT DETECTED │ │ 14 brute force IPs detected — 1,243 failed login attempts │ ├────────────────┬─────────────┬──────────────┬───────────────┤ │ Total Records │ Failed Logins│ Brute Force │ Unique IPs │ │ 2,847 │ 1,243 │ 14 │ 67 │ ├────────────────┴─────────────┴──────────────┴───────────────┤ │ Top Attacker: 45.33.32.156 — 847 attempts [CRITICAL] │ │ ⚠️ BREACH DETECTED: 192.168.100.55 failed then succeeded │ └──────────────────────────────────────────────────────────────┘ ``` ## 功能 - **SSH 暴力破解检测** — 标记超过可配置失败登录阈值的 IP - **泄露检测** — 当之前登录失败的 IP 随后成功登录时发出警报 (T1078) - **可疑 IP 分析** — 识别高频 IP 和已知的可疑 IP 范围 - **目标用户名追踪** — 显示受攻击最多的账号(root、admin、ubuntu) - **交互式图表** — 通过 Chart.js 展示攻击频率 Top 10 的 IP(柱状图)和被针对最多的用户名(环形图) - **威胁严重性评分** — 根据尝试次数为每个攻击者 IP 评估 CRITICAL / HIGH / MEDIUM / LOW 级别 - **基于检测到的威胁模式生成基于规则的安全建议** — 可操作的修复步骤 - **多格式日志支持** — 解析 `.log`、`.txt` 和 `.csv` 文件 - **CSV 导出** — 导出暴力破解调查结果,用于事件记录和工单管理 - **自动文件清理** — 分析完成后从服务器删除上传的日志 ## MITRE ATT&CK 覆盖范围 | 检测项目 | MITRE ID | 战术 | |------------------------------------|------------|---------------------| | SSH 暴力破解检测 | T1110.001 | 凭据访问 (Credential Access) | | 失败 → 成功登录(泄露) | T1078 | 初始访问 (Initial Access) | | 高频 IP 分析 | T1110 | 凭据访问 (Credential Access) | | 可疑 IP 范围标记 | T1133 | 初始访问 (Initial Access) | | 目标用户名追踪 | T1110.003 | 凭据访问 (Credential Access) | ## 技术栈 | 组件 | 技术 | |-----------------|-------------------------------------| | 后端 | Python 3.x, Flask | | 日志解析 | Python `re`, `csv`, `collections` | | 图表 | Chart.js 4.4 | | 前端 | Vanilla JS, CSS3 (暗黑主题) | | 文件处理 | Werkzeug `secure_filename` | ## 设置与安装 ### 1. 克隆仓库 ``` git clone https://github.com/siva404e/security-log-analyzer.git cd security-log-analyzer ``` ### 2. 安装依赖 ``` pip install -r requirements.txt ``` ### 3. 运行仪表板 ``` python log_dashboard.py ``` 在浏览器中打开 **http://127.0.0.1:5001** ## 使用说明 1. **上传日志文件** — 点击“📁 Browse Files”并选择一个 `.log`、`.txt` 或 `.csv` 文件 2. **分析** — 点击“🔬 ANALYZE LOG FILE” 3. **查看结果:** - 警报横幅(CRITICAL / WARNING / SAFE 状态) - 统计卡片 — 总记录数、失败登录次数、暴力破解 IP 数、独立 IP 数 - 图表 — 头号攻击 IP 和被针对的用户名 - 包含各 IP 威胁严重程度的暴力破解表 - 带有原因标记的可疑 IP 表 - 安全建议 ### 使用示例日志进行尝试 包含了一个即用型的示例日志文件,用于快速演示: ``` # 通过 dashboard UI 上传此文件: samples/sample_auth.log ``` ## 支持的日志格式 ### SSH 身份验证日志 (`.log` / `.txt`) ``` Nov 15 10:23:45 server sshd[1234]: Failed password for invalid user admin from 192.168.1.100 port 22 ssh2 Nov 15 10:23:50 server sshd[1234]: Accepted password for root from 192.168.1.50 port 22 ssh2 ``` ### CSV 格式 支持的列名:`source_ip`, `foreign_ip`, `ip`, `username`, `user`, `timestamp` ## 配置 编辑 `log_dashboard.py` 以调整检测阈值: ``` BRUTE_FORCE_THRESHOLD = 5 # Failed attempts before IP is flagged SUSPICIOUS_IP_THRESHOLD = 3 # Hit count to flag high-frequency IPs SUSPICIOUS_IP_RANGES = [ # IP ranges auto-flagged as suspicious "192.168.100.", "10.0.0." ] ``` ## 威胁严重性级别 | 级别 | 标准 | 建议操作 | |--------------|-------------------|---------------------------------| | **CRITICAL** | > 500 次尝试 | 立即通过防火墙阻断 | | **HIGH** | 100–500 次尝试 | 调查并考虑阻断 | | **MEDIUM** | 20–100 次尝试 | 监控并记录 | | **LOW** | < 20 次尝试 | 追踪模式 | ## API Endpoint ### `GET /` 提供主仪表板 UI。 ### `POST /analyze` 接受上传的日志文件并返回威胁分析。 **请求:** 包含 `file` 字段的 `multipart/form-data` **响应:** ``` { "total_lines": 1000, "total_failed": 150, "brute_force_count": 5, "unique_ips": 45, "threshold": 5, "brute_force": [ { "ip": "45.33.32.156", "count": 250, "users": ["admin", "root"] } ], "suspicious_ips": [], "top_ips": [], "top_users": [], "breach_detected": false, "recommendations": [] } ``` ### `POST /export` 以可下载的 CSV 报告形式返回暴力破解调查结果。 ## 项目结构 ``` security-log-analyzer/ ├── log_dashboard.py # Flask app — routes, log parsing, analysis logic, UI ├── requirements.txt # Python dependencies ├── samples/ │ └── sample_auth.log # Sample SSH auth log for demo and testing ├── README.md └── LICENSE ``` ## 限制与已知缺陷 - 仅解析 SSH 身份验证日志格式 — Windows 事件日志和 syslog 需要扩展格式支持 - 无持久化存储 — 分析结果不会在会话之间保存 - `SUSPICIOUS_IP_RANGES` 为硬编码 — 生产环境应集成威胁情报源 - 无法替代完整的 SIEM(Splunk、Elastic SIEM、Microsoft Sentinel) ## 未来改进 - [ ] 支持 Windows 事件日志 (.evtx) 解析 - [ ] 通过 AbuseIPDB / VirusTotal 丰富 IP 信誉信息 - [ ] 使用 SQLite 持久化以进行历史分析 - [ ] 实时日志流(等同于 `tail -f`) - [ ] 针对严重 (CRITICAL) 威胁的电子邮件警报 - [ ] Docker 容器化 ## 作者 **Sivamuthu Selvadurai M** 专注于 SOC 运营、日志分析和蓝队工具的网络安全爱好者。 GitHub: [siva404e](https://github.com/siva404e) ## 许可证 MIT 许可证 — 有关详细信息,请参阅 [LICENSE](LICENSE)。
标签:AMSI绕过, Flask, PB级数据处理, Python, 威胁检测, 安全运维, 无后门, 逆向工具