Sahil1445/SOC-Log-Analyzer
GitHub: Sahil1445/SOC-Log-Analyzer
一个基于 Flask 的轻量级安全运营中心仪表板,提供日志解析、威胁检测和实时可视化监控功能。
Stars: 0 | Forks: 0
# 🛡 Mini SOC — 安全运营中心
一个功能完整的实时日志监控与威胁检测仪表板
使用 Python (Flask)、SQLite、Chart.js 以及深色网络安全风格 UI 构建。
## 📁 项目结构
```
mini-soc/
├── app.py ← Flask backend (all routes + logic)
├── requirements.txt ← Python dependencies
├── sample_logs.txt ← Sample Apache log file for testing
├── instance/
│ └── soc.db ← SQLite database (auto-created)
├── uploads/ ← Uploaded log files (auto-created)
├── templates/
│ ├── login.html ← Login page
│ └── dashboard.html ← Main SOC dashboard
└── static/
├── css/
│ └── dashboard.css ← Dark cybersecurity theme
└── js/
└── dashboard.js ← Charts, real-time updates, file upload
```
## ⚡ 快速开始
### 1. 安装 Python 依赖
```
pip install -r requirements.txt
```
### 2. 运行应用程序
```
python app.py
```
### 3. 在浏览器中打开
```
http://localhost:5000
```
### 4. 登录
- **用户名:** `admin`
- **密码:** `admin123`
## 🔑 功能
| 功能 | 描述 |
|---|---|
| **日志上传** | 上传 `.txt` / `.log` 文件(Apache、auth.log、自定义) |
| **日志解析** | 提取 IP、时间戳、方法、路径、状态、严重程度 |
| **威胁检测** | 暴力破解、HTTP flood、路径扫描检测 |
| **严重程度级别** | LOW / MEDIUM / HIGH 分类 |
| **实时仪表板** | 每 4 秒自动刷新 |
| **模拟** | 生成逼真的虚假日志流量 |
| **图表** | 每小时流量(折线图)+ 状态码分布(环形图) |
| **登录系统** | 基于 session 的身份认证 |
## 🧪 使用示例日志进行测试
1. 登录到仪表板
2. 点击侧边栏中的 **Upload Logs**
3. 上传 `sample_logs.txt`(已包含在内)
4. 在 **Threat Alerts** 部分查看检测到的威胁
示例文件包含:
- 暴力破解尝试 (192.168.1.100, 45.33.32.156, 10.10.10.10)
- 路径扫描 (185.220.101.34 — 20+ 个独立路径)
- HTTP 错误 flood (198.51.100.77)
## 🚀 工作原理
### 后端 (app.py)
1. **日志解析** — 正则表达式匹配 Apache Combined Log Format 和 auth.log
2. **严重程度分类** — 基于 HTTP 状态码
3. **威胁检测** — 在每次上传后或每约 10 个模拟 tick 后运行:
- 暴力破解: 同一 IP 产生 ≥5 个 HTTP 401 响应
- HTTP Flood: 同一 IP 产生 ≥10 个 4xx/5xx 响应
- 路径扫描: 同一 IP 访问 ≥20 个不同的路径
4. **REST API** — 用于所有数据的 JSON endpoint(`/api/stats`, `/api/logs`, `/api/upload`)
5. **实时模拟** — 后台线程每 2 秒插入条目
### 前端 (dashboard.js)
1. 每 4 秒自动轮询 `/api/stats`
2. 渲染 Chart.js 图表(折线图 + 环形图)并进行实时更新
3. 动态的 KPI 计数器、严重程度徽章、风险条
4. 支持拖拽的文件上传
## 🔧 扩展项目
### 添加更多威胁类型
在 `app.py` 的 `detect_threats()` 中:
```
# SQL 注入检测
rows = conn.execute("""
SELECT ip_address, COUNT(*) AS cnt FROM logs
WHERE path LIKE '%SELECT%' OR path LIKE '%UNION%'
GROUP BY ip_address HAVING cnt >= 1
""").fetchall()
```
### 添加 GeoIP 查询
```
pip install geoip2
```
```
import geoip2.database
reader = geoip2.database.Reader('GeoLite2-City.mmdb')
response = reader.city(ip_address)
country = response.country.name
```
### 添加邮件警报
```
import smtplib
def send_alert_email(threat):
# Send via SMTP when HIGH severity threat detected
...
```
### 添加更多日志格式
在 `parse_log_line()` 中扩展额外的正则表达式模式:
```
NGINX_PATTERN = re.compile(r'...')
SYSLOG_PATTERN = re.compile(r'...')
```
### 生产环境部署
```
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app
```
## 🛡 安全提示
- 在生产环境中更改 `SECRET_KEY`(使用环境变量)
- 首次登录后更改默认管理员密码
- 在生产环境中运行在反向代理 (nginx) 之后
- 使用 SSL 证书启用 HTTPS
标签:AMSI绕过, Flask, SQLite, 威胁检测, 安全运营中心, 数据可视化, 红队行动, 网络映射, 逆向工具