Tejasvgipl/THREAT-INTELLIGENCE-DETECTION-SYSTEM

GitHub: Tejasvgipl/THREAT-INTELLIGENCE-DETECTION-SYSTEM

为 SOC 团队构建的 Docker 化威胁情报 SIEM 平台,集成日志采集、ML 异常检测、威胁情报查询和自动化封堵能力。

Stars: 0 | Forks: 0

# CyberSentinel — 威胁情报 SIEM 平台 一个为 SOC 团队提供的全栈、Docker 化威胁情报仪表盘。 为 **Virtual Galaxy Infotech Ltd** · 银行客户日志分析而构建。 ## 包含内容 ``` cybersentinel/ ├── docker-compose.yml ← Run everything with one command ├── .env.example ← Copy to .env and fill in keys │ ├── frontend/ ← Single-page dashboard (nginx) │ ├── index.html ← Full threat intel UI │ ├── nginx.conf │ └── Dockerfile │ ├── backend/ ← FastAPI REST API │ ├── main.py ← Log ingestion, IP trail, blocklist, intel │ ├── requirements.txt │ └── Dockerfile │ ├── ml-engine/ ← ML anomaly detection (FastAPI) │ ├── main.py ← Isolation Forest, subnet clustering, risk scoring │ ├── requirements.txt │ └── Dockerfile │ ├── ml-intern/ ← Hybrid retraining governance service (FastAPI) │ ├── main.py ← Time + data + drift retraining checks │ ├── requirements.txt │ └── Dockerfile │ ├── redis-config/ ← Redis with persistence │ ├── redis.conf │ └── Dockerfile │ ├── nginx/ ← Reverse proxy (routes /api/ml → ml-engine, /api → backend) │ ├── nginx.conf │ └── Dockerfile │ ├── scripts/ │ ├── watch_and_ingest.py ← Continuous folder watcher for live log ingestion │ └── fortigate_autoblock.py ← Push blocklist to Fortigate via REST API │ └── sample-data/ ├── generate_sample_data.py ← Generates realistic test logs └── sample_logs.csv ← Ready-to-use sample (1,390 events) ``` ## 快速开始 ### 1. 前置条件 - 已安装 Docker + Docker Compose - 端口 80、8000、8001、6379 处于空闲状态 ### 2. 克隆 / 解压并启动 ``` cd cybersentinel cp .env.example .env # optionally add ABUSEIPDB_KEY docker compose up --build -d ``` ### 3. 打开仪表盘 ``` http://localhost ``` ### 4. 加载示例数据 - 转到侧边栏的 **Ingest Logs** - 上传 `sample-data/sample_logs.csv` - 等待约 5 秒钟,点击 **Refresh** - 转到 **Overview** — 指标和图表将自动生成 ### 5. 训练 ML 模型 - 转到 **ML Anomaly** - 点击 **Train ML model** - 点击 **Load anomalies** — 查看 Isolation Forest 标记的 IP ## 功能特性 ### 仪表盘页面 | 页面 | 功能 | |------|-------------| | Overview | 指标卡片、威胁分布图表、热点 IP 表格 | | IP Trail | 任何 IP 的完整按时间顺序的事件历史 | | Live Alerts | 来自热点 IP 的所有实时事件 | | ML Anomaly | 训练 Isolation Forest,对 IP 进行评分,列出异常 | | Subnet Clusters | NetworkX 图形聚类 — 查找协同攻击组 | | Blocklist | 查看、添加、移除被封锁的 IP | | Ingest Logs | 上传 CSV 或粘贴单个 JSON 日志事件 | ### 后端 API 端点 ``` POST /api/ingest/csv Upload a CSV log file POST /api/ingest/log Ingest a single JSON log GET /api/trail/{ip} Full event trail for an IP GET /api/trail/{ip}/summary Summary (first/last seen, threat types) GET /api/stats Global metrics GET /api/hot-ips All high/critical severity IPs GET /api/intel/{ip} Threat intel (local + AbuseIPDB) GET /api/blocklist View blocklist POST /api/blocklist/add Block an IP DEL /api/blocklist/{ip} Unblock an IP GET /api/search?q= Search IPs by prefix ``` ### ML 引擎端点 ``` POST /api/ml/train Train Isolation Forest on all ingested IPs GET /api/ml/score/{ip} Score a specific IP (anomaly + risk 0-100) GET /api/ml/anomalies List all detected anomalies GET /api/ml/clusters Subnet clustering (coordinated attack groups) GET /api/ml/health Health + model status ``` ### ML Intern 端点 ML Intern 是一个用于模型治理的独立服务。它监视 Redis,检查 混合重训练条件,创建候选模型版本,并在 候选模型激活前等待人工批准。 ``` GET /api/ml-intern/health Service health GET /api/ml-intern/status Scheduler, trigger, and active model state POST /api/ml-intern/retrain Manual retraining trigger GET /api/ml-intern/models All model versions and statuses POST /api/ml-intern/approve-model/{id} Promote candidate model to active POST /api/ml-intern/rollback Revert to previous approved model GET /api/ml-intern/reports/latest Latest training report ``` 混合重训练检查每隔几分钟运行一次。如果满足以下 **任何** 条件,则启动重训练: - 自上次训练以来已过去 24 小时 - 新日志数量超过配置的阈值 - 特征分布漂移超过配置的漂移阈值 ## 用于实时/连续摄取 ### 选项 A — Wazuh alerts.json 流式传输器(推荐) 通过智能偏移量跟踪直接读取 Wazuh 的 `alerts.json`: - **首次运行:** 摄取整个告警历史 - **之后:** 仅摄取新告警(无重复) - **自动触发:** 达到阈值后进行 ML 训练 + 归档 **作为 Docker 服务:** ``` # 1. 在 .env 中设置 alerts.json 的路径 WAZUH_ALERTS_PATH=/var/ossec/logs/alerts/alerts.json # 2. 使用 wazuh 配置文件启动 docker compose --profile wazuh up -d ``` **独立运行:** ``` python scripts/wazuh_watcher.py \ --alerts /var/ossec/logs/alerts/alerts.json \ --api http://localhost:8000 \ --interval 5 ``` ### 选项 B — 文件夹监视器 将您的 SIEM 指向导出日志的文件夹,然后运行: ``` python scripts/watch_and_ingest.py \ --folder /var/log/siem-exports \ --api http://localhost:8000 \ --interval 10 ``` ### 选项 C — 直接 API 推送 从您的 Wazuh / Fortigate 日志传输器 POST 每个事件: ``` curl -X POST http://localhost:8000/api/ingest/log \ -H "Content-Type: application/json" \ -d '{"@timestamp":"2026-04-22T09:30:00Z","rule.description":"Login failed","data.ui":"85.11.187.36"}' ``` ### 选项 D — Fortigate 自动封锁集成 ``` python scripts/fortigate_autoblock.py \ --cs-api http://localhost:8000 \ --fg-host 192.168.1.1 \ --fg-token YOUR_TOKEN \ --dry-run # remove --dry-run when ready for real blocks ``` ## 热/冷存储(智能内存管理) Redis 保持精简,同时确保日志绝不丢失: | 层 | 内容 | 保留 | |-------|------|-----------| | **Redis (热)** | 每个 IP 的最近 200 个事件 + 基线 + 统计数据 + ML 分数 | 始终在内存中 | | **磁盘 (冷)** | 压缩为 `.jsonl.gz` 的所有旧事件 | 永久保存 | ### API 端点 ``` POST /api/archive/run Archive & trim ALL IP trails POST /api/archive/ip/{ip} Archive & trim single IP GET /api/archive/list List archive files with sizes GET /api/archive/search/{ip}?date=... Search cold archive for old events GET /api/storage/stats Redis + disk usage summary ``` ### 配置 ``` TRAIL_RETAIN=200 # events to keep in Redis per IP WAZUH_ARCHIVE_THRESHOLD=5000 # auto-archive after N new alerts ``` ## ML 说明 ### Isolation Forest(异常检测) - **功能:** 在 Redis 中的所有 IP 上进行训练,学习“正常”的特征 - **使用的特征:** 每分钟的事件率、事件间隔、唯一目标 IP、唯一目标端口、严重/高严重性占比、brute_force 计数、ssh_bf 计数、rdp 计数、db_scan 计数 - **输出:** 异常分数(负值 = 更异常)+ 0–100 的风险分数 - **重训练:** POST /api/ml/train — 每次大量摄取日志后执行此操作 ### ML Intern(混合重训练治理) - **功能:** 监视 Redis 并决定是否应训练新模型 - **混合触发器:** 经过的时间、新日志量或数据漂移 - **输出:** 候选模型、元数据、异常率、漂移分数、报告摘要 - **批准:** 候选模型不会自动部署;使用 `/api/ml-intern/approve-model/{model_id}` 批准模型 - **回滚:** `/api/ml-intern/rollback` 恢复之前批准的模型 ### 子网聚类 (NetworkX) - **功能:** 构建一个图,其中相同 /24 子网中的 IP 相互连接 - **输出:** 连通分量 = 协同攻击组 - **重要性:** 85.11.x.x 子网(21 个 IP,1,769 个事件)是一个集群 = 一个攻击者 ## 添加 AbuseIPDB 实时情报 1. 在 https://www.abuseipdb.com/register 免费注册 2. 复制您的 API 密钥 3. 添加到 `.env` 中:`ABUSEIPDB_KEY=your_key` 4. 执行 `docker compose restart backend` 5. 现在 IP Trail → **+ Intel** 将显示实时信誉分数 ## 环境变量 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | ABUSEIPDB_KEY | demo | 用于实时威胁情报的 AbuseIPDB API 密钥 | | REDIS_HOST | redis | Redis 主机名 | | REDIS_PORT | 6379 | Redis 端口 | | LOG_LEVEL | INFO | 后端日志级别 | | MODEL_RETRAIN_HOURS | 24 | ML 自动重训练间隔(未来) | | ML_INTERN_CHECK_MINUTES | 5 | ML Intern 检查重训练条件的频率 | | ML_INTERN_TIME_HOURS | 24 | 基于时间的重训练阈值 | | ML_INTERN_NEW_LOG_THRESHOLD | 10000 | 数据量重训练阈值 | | ML_INTERN_DRIFT_THRESHOLD | 0.35 | 分布漂移阈值 | | ML_INTERN_MIN_TRAINING_IPS | 5 | 训练所需的最少 IP 特征行数 | | TRAIL_RETAIN | 200 | 在 Redis 中为每个 IP 保留的事件数(其余归档到磁盘) | | WAZUH_ALERTS_PATH | ./sample-data/alerts.json | Wazuh alerts.json 的宿主机路径 | | WAZUH_POLL_INTERVAL | 5 | 轮询检查之间的秒数 | | WAZUH_BATCH_SIZE | 200 | 每批发送到后端的告警数 | | WAZUH_TRAIN_THRESHOLD | 500 | 在 N 个新告警后触发 ML 训练 | | WAZUH_ARCHIVE_THRESHOLD | 5000 | 在 N 个新告警后触发归档/清理 | ## 架构 ``` Browser ↓ :80 Nginx (reverse proxy) ↓ /api/ml/* ↓ /api/ml-intern/* ↓ /api/* ↓ / ML Engine :8001 ML Intern :8002 Backend :8000 Frontend :80 ↓ ↓ ↓ └────────────────── Redis :6379 ─────────┘ (IP trails, stats, blocklist, ML scores, model metadata) ``` ## 扩展此项目 | 要添加的内容 | 方法 | |-------------|-----| | 实时 WebSocket 推送 | 添加 FastAPI WebSocket 端点,使用 `redis.pubsub()` | | 针对 P1 的电子邮件告警 | 当 severity=critical 时在后端添加 `smtplib` 调用 | | Grafana 仪表盘 | Redis → Prometheus exporter → Grafana | | MISP 集成 | 在每个新热点 IP 出现时通过后端 POST IOCs 到 MISP API | | Elasticsearch 后端 | 用 ES 替换 Redis 轨迹存储以实现全文搜索 | | Wazuh 直接集成 | 使用 Wazuh Logstash output → POST 到 `/api/ingest/log` |
标签:Apex, AV绕过, Docker, Docker-Compose, FastAPI, Fortigate, IP 地址批量处理, IP封锁, Nginx, Python, Redis, REST API, TCP/IP协议栈, 前端仪表盘, 后端开发, 威胁情报, 子网聚类, 孤立森林算法, 安全运营中心, 安全防御评估, 开发者工具, 异常检测, 微服务架构, 搜索引擎查询, 数据摄取, 无后门, 机器学习, 模型重训, 漂移检测, 特权检测, 网络安全, 网络安全平台, 网络映射, 请求拦截, 逆向工具, 金融安全, 防火墙集成, 隐私保护, 风险评分