nathanlopes45/siem

GitHub: nathanlopes45/siem

一个从零自建的 SIEM 后端实验室项目,通过自定义日志摄取、事件关联规则和自动化告警来深入实践检测工程。

Stars: 0 | Forks: 0

# SIEM — 安全信息与事件管理 (Security Information & Event Management) 实践实验室 一个自定义构建的 SIEM 后端,能够摄取日志、关联事件,并对可疑活动发出警报 —— 从零开始构建,以理解检测工程在底层的实际运作方式,而不是仅仅操作别人的工具。 ## 为什么会有这个项目 简历上的大多数 SIEM 经验都来自于点击 Splunk 或 Sentinel 的仪表板。这个项目更深入了一层:自己设计日志 schema、编写关联逻辑,并亲自权衡检测的取舍(误报、警报疲劳、时间窗口大小设定)。 ## 架构 ``` ┌─────────────┐ raw logs ───► │ FastAPI │ │ (ingest + │ │ detection) │ └──────┬──────┘ │ ▼ ┌─────────────┐ │ PostgreSQL │ │ hosts/logs/ │ │ alerts │ └─────────────┘ ``` - **API 层**:使用 FastAPI,处理日志摄取,并提供针对主机、日志和警报的查询 endpoint - **存储**:通过 SQLAlchemy ORM 使用 PostgreSQL - **检测引擎**:在每次写入时针对摄取的日志运行关联规则(路线图:将其转移至异步后台 worker —— 见下文) - **部署**:使用 Docker Compose 完全容器化(API + Postgres) ## 已实现的检测 | 检测项 | 逻辑 | MITRE ATT&CK | |---|---|---| | 暴力破解尝试 | 同一 IP 针对某主机的失败密码尝试 ≥5 次 | [T1110 – Brute Force](https://attack.mitre.org/techniques/T1110/) | | 快速暴力破解 | 同一 IP 在 2 分钟窗口内失败尝试 ≥5 次 | T1110(限时变体) | | 成功的暴力破解 | 某个 IP 在之前发生 ≥5 次失败尝试后成功登录 | T1110 → T1078(Valid Accounts,失陷后阶段) | | 威胁情报匹配 | 日志包含已知恶意 IP 列表中的源 IP | [T1071 – Application Layer Protocol](https://attack.mitre.org/techniques/T1071/)(C2 基础设施重用) | ## 技术栈 - **后端**:Python, FastAPI, SQLAlchemy - **数据库**:PostgreSQL - **容器化**:Docker, Docker Compose - **检测工程**:自定义关联规则(基于正则表达式的日志解析、IP 提取、时间窗口聚合) ## 快速开始 ### 前置条件 - 已安装 Docker 和 Docker Compose ### 设置 ``` git clone https://github.com/nathanlopes45/siem.git cd siem cp .env.example .env # 编辑 .env 并为 POSTGRES_PASSWORD 设置一个真实的密码 docker compose up --build ``` API 将在 `http://localhost:8000` 提供。 ### 验证运行状态 ``` curl http://localhost:8000/ # {"status":"SIEM backend running with database connected"} ``` ## API 用法 ### 注册主机 ``` curl -X POST "http://localhost:8000/hosts?hostname=web-server-01&ip_address=10.0.0.5&os_type=linux" ``` ### 摄取日志 ``` curl -X POST "http://localhost:8000/logs" \ -d "host_id=" \ -d "log_source=sshd" \ -d "raw_log=Failed password for root from 185.220.101.1 port 4444 ssh2" ``` ### 列出主机 ``` curl http://localhost:8000/hosts ``` ### 查询日志(可选:按主机或源进行过滤) ``` curl "http://localhost:8000/logs?host_id=&log_source=sshd" ``` ### 查看触发的警报 ``` curl http://localhost:8000/alerts ``` ## 本仓库的安全实践 - 不提交任何密钥 —— 凭据从被 gitignore 忽略的 `.env` 文件中加载,并以 `.env.example` 作为模板 - 集成了 `detect-secrets` 基线扫描,以便在意外泄露凭据被推送前将其捕获 - 数据库连接重试/健康检查逻辑,以避免容器启动时出现竞态条件 ## 路线图 - [ ] 针对 syslog/auth.log 格式的真实日志解析器(使用结构化字段,而非单一的正则表达式 IP 提取) - [ ] 将检测引擎转移至异步后台 worker,使其与日志摄取请求路径解耦 - [ ] 跨主机关联(例如,同一个攻击者 IP 攻击多个主机 —— 横向移动 / 凭据填充信号) - [ ] API 身份验证 - [ ] 警报集成(针对新警报的 Slack/webhook 通知) - [ ] LLM 辅助的警报分诊:根据原始日志上下文生成的自然语言事件摘要和严重性建议 - [ ] 用于可视化警报和日志量随时间变化的仪表板 - [ ] 针对检测逻辑的自动化测试套件 ## 许可证 MIT
标签:AV绕过, FastAPI, FOFA, PostgreSQL, 测试用例, 版权保护, 红队行动, 请求拦截, 逆向工具