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分析, 全栈应用, 大语言模型, 威胁检测, 测试用例, 网络安全, 自动化攻击, 请求拦截, 逆向工具, 隐私保护