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, 威胁检测, 安全运维, 无后门, 逆向工具