liamthuynh/cybersec-log-analyzer
GitHub: liamthuynh/cybersec-log-analyzer
一款面向 SOC 的日志分析平台,通过规则与 Claude AI 结合实现异常检测与威胁简报。
Stars: 0 | Forks: 0
# CyberScope
**浏览器中的 SOC 级日志分析。**
CyberScope 允许安全分析师上传代理或 Web 服务器日志,自动检测异常,并生成 AI 威胁简报——所有操作无需离开 Web UI。





## 概述
| | |
|---|---|
| **上传** | 拖放 `.txt`、`.log` 或 `.csv` 日志文件(最大 16 MB) |
| **解析** | 自动检测 ZScaler 风格代理日志、Apache/Nginx 组合日志和通用 CSV |
| **检测** | 八种基于规则的异常检测器,带置信度分数和人类可读解释 |
| **摘要** | 可选的 Claude AI 层生成执行摘要、威胁级别、关键发现和 SOC 风格事件时间线 |
| **审查** | 在可过滤的异常表格、每小时活动图表和完整 AI 分析面板中浏览结果 |
| **历史** | 所有上传按用户持久化;点击任意历史上传可重新加载其完整结果 |
## 目录
- [功能](#features)
- [架构](#architecture)
- [快速启动 — Docker](#quick-start--docker)
- [快速启动 — 本地](#quick-start--local)
- [日志格式](#log-format)
- [异常检测](#anomaly-detection)
- [AI 分析](#ai-analysis)
- [API 参考](#api-reference)
- [项目结构](#project-structure)
## 功能
**检测**
- 来自单个 IP 的高请求速率(>20 req / 60 秒窗口)
- 非工作时间访问(UTC 时间 06:00 前或 22:00 后)
- 大数据传输(>5× 会话中位数)
- 被阻止或拒绝的流量
- 每个源 IP 的错误率峰值
- 可疑域名 — 高风险 TLD、已知恶意关键词、高风险类别
- 凭证填充模式(120 秒内 ≥5 次失败的 POST 登录)
- 可能指示隧道或隐蔽外传的慢速请求
**仪表板**
- 汇总指标:条目数、异常数、唯一 IP 数、数据量、用户数、阻止计数
- 包含总请求数、错误数和阻止流量的每小时时间线图表
- 顶级域名和源 IP 细分
- 按严重程度(关键 / 高 / 中 / 低)可过滤的异常表格,带可展开的详细行
- 每个异常上的置信度分数条
- 带有威胁级别徽章、关键发现卡片和建议操作的人工智能分析面板
**平台**
- 带有用户注册和内置演示账户的基于 JWT 的认证
- 支持 PostgreSQL 的上传历史记录和每个用户的隔离
- 用于一键本地堆栈的 Docker Compose
- Next.js API 重写 — 前端和后端在所有环境中均在同一源上
## 架构
```
Browser
└── Next.js 14 (TypeScript + Tailwind + Recharts)
└── /api/* rewrite proxy
└── Flask REST API (Python 3.11)
├── parser.py — log format detection & normalization
├── analyzer.py — rule-based anomaly detection
├── ai_analyzer.py — Claude API integration
└── PostgreSQL 16 — users & upload persistence
```
## 快速启动 — Docker
最快的路径。需要 Docker Desktop。
**1. 克隆并配置**
```
git clone https://github.com/your-username/cybersec-log-analyzer.git
cd cybersec-log-analyzer
cp .env.example .env
```
打开 `.env` 并设置以下两个值。其他内容使用默认配置即可。
| 变量 | 是否必需 | 说明 |
|---|---|---|
| `SECRET_KEY` | 是 | 签名 JWT 令牌。生成方式:`python3 -c "import secrets; print(secrets.token_hex(32))"` |
| `ANTHROPIC_API_KEY` | 否 | 启用 AI 分析。在 [console.anthropic.com](https://console.anthropic.com) 获取 |
**2. 启动堆栈**
```
docker compose up --build
```
三个服务按依赖顺序启动:`postgres` → `backend` → `frontend`。
**3. 打开应用**
- UI:`http://localhost:3000`
- API:`http://localhost:8000`
**演示凭据:** `demo` / `demo1234`
**4. 上传示例日志**
仓库附带一个真实的测试日志:
```
sample_logs/sample_proxy_log.txt
```
将其拖入上传区域以查看异常检测(如果设置了 API 密钥,还可查看 AI 分析面板)。
## 快速启动 — 本地
需要 Python 3.11+、Node.js 20+ 和 PostgreSQL 15+。
**1. 创建数据库**
```
createdb cyberscope
```
**2. 配置后端**
```
export SECRET_KEY="$(python3 -c 'import secrets; print(secrets.token_hex(32))')"
export FLASK_ENV=development
export DATABASE_URL=postgresql://localhost/cyberscope
export CORS_ORIGINS=http://localhost:3000
# 可选:
export ANTHROPIC_API_KEY=sk-ant-...
```
**3. 启动后端**
```
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app.py
```
**4. 启动前端**
```
cd frontend
npm install
npm run dev
```
打开 `http://localhost:3000`。
**冒烟测试**
堆栈运行后,完整验证端到端主流程:
```
./scripts/smoke_test.sh
```
## 日志格式
CyberScope 自动从第一行内容检测格式。默认支持三种格式:
### ZScaler 风格代理日志(主要)
以竖线分隔的字段,无需标题行:
```
timestamp | source_ip | user | method | url | status_code | bytes_sent | bytes_received | action | category | user_agent | duration_ms
```
示例:
```
2024-01-15T08:23:41Z | 10.0.1.100 | jsmith | GET | https://example.com/api/data | 200 | 1024 | 8192 | ALLOW | Business | Mozilla/5.0 | 234
```
### Apache / Nginx 组合日志
自动检测标准组合日志格式。
### 通用 CSV
任何带有标题行的 CSV 文件都会被解析;字段会尽可能按列名映射。
## 异常检测
实现在 [`backend/analyzer.py`](backend/analyzer.py) 中。
每个异常包含:
| 字段 | 说明 |
|---|---|
| `rule` | 机器可读的规则标识符 |
| `reason` | 为什么标记该条目的易读解释 |
| `confidence` | 基于与基线偏差的 `0.0` – `1.0` 分数 |
| `severity` | `critical` / `high` / `medium` / `low` |
| `entry` | 被标记行的原始日志字段 |
规则在整个上传上单次运行,并通过行号去重——触发多条规则的行会合并为一个异常。
## AI 分析
实现在 [`backend/ai_analyzer.py`](backend/ai_analyzer.py) 中。
当设置了 `ANTHROPIC_API_KEY` 且 AI 开关开启时,后端会:
1. 构建上下文数据包 — 汇总统计、顶级异常和最多 50 条日志条目的代表性样本(异常条目优先,剩余槽位均匀填充)
2. 通过 Anthropic API 将数据包发送至 **Claude**(`claude-sonnet-4-6`)
3. 返回包含以下字段的结构化 JSON
| 字段 | 说明 |
|---|---|
| `executive_summary` | 一段式威胁概述 |
| `threat_level` | `critical` / `high` / `medium` / `low` / `minimal` |
| `key_findings` | 包含严重性、影响实体和建议的标题化发现数组 |
| `timeline` | 按时间排序的事件序列,含重要性评分 |
| `patterns_detected` | 识别出的行为模式短列表 |
| `recommended_actions` | 分析师的优先响应操作 |
如果未配置 API 密钥,后端会返回基于规则的备用摘要,确保面板永不空白。
## API 参考
### 公共接口
| 方法 | 路径 | 说明 |
|---|---|---|
| `POST` | `/api/auth/register` | 创建新账户 |
| `POST` | `/api/auth/login` | 认证并接收 JWT |
| `GET` | `/api/health` | 健康检查 |
### 认证(需要 Bearer 令牌)
| 方法 | 路径 | 说明 |
|---|---|---|
| `POST` | `/api/upload` | 上传日志文件以进行分析 |
`GET` | `/api/uploads` | 列出当前用户的所有上传记录 |
| `GET` | `/api/uploads/` | 获取特定上传的完整结果 |
## 项目结构
```
cybersec-log-analyzer/
├── backend/
│ ├── app.py # Flask app, routes, auth, DB
│ ├── parser.py # Log format detection and normalization
│ ├── analyzer.py # Rule-based anomaly detection engine
│ ├── ai_analyzer.py # Claude API integration
│ ├── config.py # Environment-based configuration
│ ├── requirements.txt
│ └── Dockerfile
├── frontend/
│ ├── src/
│ │ ├── app/
│ │ │ ├── dashboard/ # Main analysis UI
│ │ │ ├── login/ # Auth page
│ │ │ └── globals.css
│ │ ├── components/
│ │ │ ├── AnomalyTable.tsx
│ │ │ ├── AISummaryPanel.tsx
│ │ │ ├── StatsCards.tsx
│ │ │ ├── TimelineChart.tsx
│ │ │ └── UploadHistory.tsx
│ │ └── lib/
│ │ └── api.ts # Typed API client
│ ├── Dockerfile
│ ├── next.config.js
│ └── package.json
├── sample_logs/
│ └── sample_proxy_log.txt
├── scripts/
│ └── smoke_test.sh
├── docker-compose.yml
├── .env.example
└── README.md
```
## 许可证
MIT
标签:AI安全, Anomaly Detection, Apache日志, Chat Copilot, Claude, CSV解析, CVE检测, Docker, MIT License, Nginx日志, PostgreSQL, Python, SEO:AI SOC工具, SEO:日志分析工具, SEO:浏览器安全分析, SEO:网络安全分析, TCP/UDP协议, Web服务器日志, ZScaler, 事件时间线, 云计算, 人工智能, 代理日志, 关键词:AI威胁简报, 关键词:异常检测, 关键词:规则引擎, 历史记录, 可过滤表格, 威胁简报, 安全运营中心, 安全防御评估, 异常检测, 拖拽上传, 无后门, 日志上传, 柱状图, 测试用例, 浏览器UI, 用户模式Hook绕过, 网络安全, 网络映射, 置信度评分, 规则引擎, 请求拦截, 逆向工具, 隐私保护