mickdbf/log-sentinel-ai
GitHub: mickdbf/log-sentinel-ai
这是一款利用大语言模型自动解析日志并生成 SOC 风格威胁分析报告的全栈安全运营辅助工具。
Stars: 0 | Forks: 0
# LogSentinel AI
一款全栈网络安全应用程序,允许 SOC 分析师上传日志文件,使用 AI 自动解析和分析它们,并在清晰的仪表板界面中呈现威胁、异常和入侵指标。
**在线演示:** https://log-sentinel-ai-491001.web.app
## 功能介绍
LogSentinel 接受 `.log` 和 `.txt` 文件,从每一行中提取结构化事件,并将它们发送给 LLM 进行安全分析。最终结果是一份包含严重性分类、置信度分数、按时间顺序排列的事件时间轴以及提取出的 IOC 的排名调查结果报告,整个过程在一分钟内即可交付。
支持的日志格式包括身份验证日志、Web 服务器日志、应用程序日志、防火墙日志和 ZScaler Web 代理日志。
## AI 方法
### 如何使用 AI
LogSentinel 采用两阶段 pipeline:
**阶段 1 — 解析(确定性)**
后端解析器从每行日志中提取客观字段:时间戳、带端口的 IP 地址以及原始事件文本。在此阶段不进行任何安全判断——解析器被有意设计为“非智能”模式。完整保留原始行,以便 LLM 获得完整的上下文。
**阶段 2 — 分析(LLM)**
结构化事件将与经过精心设计的 system prompt 一起发送给 OpenAI 的 GPT-4o-mini。该 LLM 扮演高级 SOC 分析师的角色——它阅读完整的日志,关联跨会话的事件,并返回包含以下内容的结构化 JSON 响应:
- `summary` — 2-4 句话的分析师威胁简报
- `findings[]` — 包含严重性(critical/warning/info)和置信度分数(0.0–1.0)的排名安全关注点
- `iocs[]` — 包含类型、值和上下文的入侵指标
- `timeline[]` — 按时间顺序排列的每个值得注意的事件
**大文件的分块处理**
超过约 400 个事件的日志文件将被拆分为多个块。每个块都会被独立分析,然后通过第二次 LLM 调用将结果合并为一个连贯的分析——在此过程中会对调查结果进行去重,并构建统一的时间轴。
**为什么选择 LLM 而不是基于规则的检测**
基于规则的方法要求提前列举出每一种可能的攻击模式。而 LLM 能够推理上下文,关联跨会话的事件,并在无需预先编程的情况下识别出新颖的攻击链。例如,它可以识别出:暴力破解尝试后紧跟一个成功的登录,再然后是从外部 IP 发起的 `wget`,这是一个相互关联的单一事件——而不是三个孤立的事件。
### 异常检测与置信度分数
每项发现都包含一个置信度分数,代表 LLM 对该活动确属恶意的确定程度:
- `0.90–1.00` — 高置信度,证据确凿
- `0.70–0.89` — 可疑,值得调查
- `0.50–0.69` — 不确定,可能为误报
LLM 被指示要关联事件,而不是标记孤立的行——例如,导致成功登录的暴力破解行为,其严重性评级会高于未成功的尝试。每项发现都包含具体的技术细节(确切的命令、IP、用户名、时间戳),用以解释被标记的原因。
## 技术栈
| 层级 | 技术 |
|---|---|
| 前端 | React, TypeScript, Vite |
| 后端 | FastAPI (Python) |
| 数据库 | GCP Cloud SQL 上的 PostgreSQL |
| AI | OpenAI GPT-4o-mini |
| 前端托管 | Firebase Hosting |
| 后端托管 | GCP Cloud Run |
| CI/CD | GitHub Actions |
## 本地设置
### 前置条件
- Python 3.12+
- Node.js 18+
- PostgreSQL 数据库(本地或远程)
- OpenAI API 密钥
### 1. 克隆仓库
```
git clone https://github.com/mickdbf/log-sentinel-ai.git
cd log-sentinel-ai
```
### 2. 后端设置
创建并激活虚拟环境:
```
# 创建虚拟环境
python -m venv .venv
# 激活 (Windows)
.venv\Scripts\activate
# 激活 (Mac/Linux)
source .venv/bin/activate
```
安装依赖项:
```
pip install -r requirements.txt
```
在项目根目录下创建 `.env` 文件:
```
DB_HOST=localhost
DB_PORT=5432
DB_NAME=logsentinel
DB_USER=your_db_user
DB_PASSWORD=your_db_password
SECRET_KEY=your_secret_key_here
OPENAI_API_KEY=sk-...
FRONTEND_URL=http://localhost:5173
```
生成密钥:
```
python -c "import secrets; print(secrets.token_hex(32))"
```
初始化数据库:
```
python -m app.db.init_db
```
启动后端:
```
uvicorn app.main:app --reload --port 8000
```
API 将在 `http://localhost:8000` 提供。Swagger 文档位于 `http://localhost:8000/docs`。
### 3. 前端设置
```
cd Frontend
npm install
```
在 `Frontend/` 文件夹中创建 `.env` 文件:
```
VITE_API_URL=http://localhost:8000
```
启动前端:
```
npm run dev
```
应用程序将在 `http://localhost:5173` 提供。
## Docker(备选后端设置方式)
使用 Docker 构建并运行后端:
```
docker build -t logsentinel-api .
docker run -p 8080:8080 --env-file .env logsentinel-api
```
## 项目结构
```
log-sentinel-ai/
├── app/
│ ├── auth/
│ │ ├── router.py # JWT auth endpoints (register, login)
│ │ ├── schemas.py # Pydantic models
│ │ └── utils.py # bcrypt + JWT helpers
│ ├── analysis/
│ │ ├── router.py # POST /analysis/upload, GET /analysis/history
│ │ ├── parser.py # Log file parser — extracts structured fields
│ │ ├── llm.py # OpenAI integration, chunking, merging
│ │ └── schemas.py # Analysis response models
│ └── db/
│ ├── database.py # SQLAlchemy engine setup
│ ├── models.py # User, Log, Analysis tables
│ └── init_db.py # Database initialization
├── Frontend/
│ └── src/
│ ├── components/
│ │ └── Navbar.tsx # Global navbar with auth modal
│ └── pages/
│ ├── SplashPage.tsx # Landing page
│ └── Dashboard.tsx # Main analyst dashboard
├── Dockerfile
├── requirements.txt
└── README.md
```
## API 端点
| 方法 | 端点 | 描述 |
|---|---|---|
| POST | `/auth/register` | 注册新用户 |
| POST | `/auth/login` | 登录并接收 JWT token |
| POST | `/analysis/upload` | 上传并分析日志文件 |
| GET | `/analysis/history` | 获取当前用户的历史分析记录 |
| GET | `/health` | 健康检查 |
所有 `/analysis` 端点都需要在 Authorization 头中提供 Bearer token。
## 示例日志文件
`example_logs/` 目录包含用于测试的示例日志文件:
| 文件 | 类型 | 包含内容 |
|---|---|---|
| `testlog.txt` | 身份验证日志 | 简单的暴力破解尝试 |
| `test_complex.log` | 身份验证日志 | 多阶段攻击 — 暴力破解、系统入侵、数据泄露 |
| `auth_lateral.log` | 身份验证日志 | 横向移动 — 后门密钥、新增特权用户 |
| `webserver_short.log` | Web 服务器日志 | 探测漏洞的 Web 扫描器 |
| `proxy_large.log` | Web 代理日志 | 内部威胁 — 通过代理进行数据泄露 |
| `app_errors.log` | 应用程序日志 | SQL 注入 + 账户接管链 |
| `zscaler_proxy.log` | ZScaler 代理日志 | C2 信标通信、恶意软件下载、数据泄露 |
| `mixed_threats.log` | 身份验证日志 | Cron 持久化、Web shell、反向 shell、日志擦除 |
| `normal_activity.log` | 身份验证日志 | 干净的日志 — 正常的业务活动,无威胁 |
## 部署
该应用程序部署在 GCP 上:
- **前端** → Firebase Hosting (`https://log-sentinel-ai-491001.web.app`)
- **后端** → GCP Cloud Run (`https://logsentinel-api-584409740995.us-central1.run.app`)
- **数据库** → GCP Cloud SQL (PostgreSQL)
CI/CD 由 GitHub Actions 处理 — 推送到 `prod` 分支会自动触发前端和后端的构建与部署。
标签:AMSI绕过, DLL 劫持, SOC分析, 全栈应用, 大语言模型, 威胁检测, 测试用例, 网络安全, 自动化攻击, 请求拦截, 逆向工具, 隐私保护