Deadsteez/AI-Powered-Log-Forensics-Incident-Response-System
GitHub: Deadsteez/AI-Powered-Log-Forensics-Incident-Response-System
ARIA是一个基于AI的自主实时日志取证与事件响应系统,通过机器学习与大语言模型技术自动解析日志、关联威胁并生成分析摘要。
Stars: 0 | Forks: 0
# ARIA – 自主实时事件分析与响应 Agent
## 快速开始(3 条命令)
```
pip install -r requirements.txt
python app.py # Terminal 1 — Flask server
python demo_log_gen.py # Terminal 2 — synthetic log traffic
```
打开 **http://localhost:5000** 查看仪表板。
## 项目结构
```
aria/
├── app.py ← Flask app + SSE + route wiring
├── demo_log_gen.py ← Generates fake logs for testing
├── test_telegram.py ← Standalone Telegram alert test
├── requirements.txt
├── prometheus.yml ← Prometheus scrape config
├── .env ← Credentials (never commit this)
├── modules/
│ ├── database.py ← SQLite persistence (WAL, per-thread conn)
│ ├── parser.py ← Log parser: auth.log, Apache/Nginx, Windows
│ ├── log_watcher.py ← File tail watcher with rotation detection
│ ├── ml_detector.py ← Isolation Forest anomaly scoring
│ ├── correlator.py ← Rule engine + MITRE ATT&CK tagging
│ ├── alerter.py ← Email (SendGrid + SMTP) + Telegram + Pushover
│ └── llm_summarizer.py ← Gemini API / template fallback summaries
├── static/
│ ├── css/aria.css ← Dashboard stylesheet
│ └── js/aria.js ← Dashboard JavaScript (SSE, charts, table)
└── templates/
└── index.html ← Dashboard HTML (links external CSS/JS only)
```
## 配置(环境变量)
在项目根目录创建一个 `.env` 文件。所有变量都是可选的——ARIA
无需其中任何变量即可使用安全默认值和基于模板的摘要运行。
| 变量 | 默认值 | 描述 |
|---------------------------|-------------------------|------------------------------------------------|
| `ARIA_LOG_PATHS` | `logs/demo.log` | 要监视的逗号分隔文件路径 |
| `ARIA_DB_PATH` | `aria.db` | SQLite 数据库文件路径 |
| `ARIA_MODEL_PATH` | `aria_model.pkl` | Isolation Forest 模型文件路径 |
| `ARIA_CONTAMINATION` | `0.05` | Isolation Forest 污染率 (0–0.5) |
| `ARIA_DASHBOARD_URL` | `http://localhost:5000` | 嵌入在告警消息中的 URL |
| `GEMINI_API_KEY` | *(empty)* | 用于 LLM 摘要的 Gemini API 密钥 |
| `ARIA_ALERT_TO` | *(empty)* | 发件人邮箱地址(SendGrid 发件地址) |
| `ARIA_RECEIVER_EMAIL` | *(empty)* | 收件人邮箱地址 |
| `SENDGRID_API_KEY` | *(empty)* | SendGrid API 密钥(主要邮件发送) |
| `FALLBACK_SMTP_HOST` | `smtp.gmail.com` | SMTP 服务器(仅在 SendGrid 失败时使用) |
| `FALLBACK_SMTP_PORT` | `587` | SMTP 端口 |
| `FALLBACK_SMTP_USER` | *(empty)* | SMTP 用户名 / Gmail 地址 |
| `FALLBACK_SMTP_PASSWORD` | *(empty)* | SMTP 密码 / Gmail 应用密码 |
| `ARIA_TELEGRAM_TOKEN` | *(empty)* | Telegram Bot 令牌 |
| `ARIA_TELEGRAM_CHAT_ID` | *(empty)* | Telegram 聊天 ID |
| `ARIA_PUSHOVER_TOKEN` | *(empty)* | Pushover 应用程序令牌 |
| `ARIA_PUSHOVER_USER` | *(empty)* | Pushover 用户密钥 |
在启动之前加载您的 `.env`:
```
export $(cat .env | grep -v '^#' | xargs) && python app.py
```
## 监控真实日志
将 `ARIA_LOG_PATHS` 指向您的实际日志文件:
```
# Linux auth log + Apache
ARIA_LOG_PATHS=/var/log/auth.log,/var/log/apache2/access.log python app.py
# 多路径
ARIA_LOG_PATHS=/var/log/auth.log,/var/log/nginx/access.log,/var/log/syslog python app.py
```
ARIA 会等待尚未出现的文件创建,并自动
处理日志轮转(inode 更改检测)而不会遗漏任何行。
## 告警发送
告警仅针对 **HIGH** 和 **CRITICAL** 严重级别的事件发送。
**发送顺序:**
1. **Telegram** — 即时推送通知(最快)
2. **通过 SendGrid 发送邮件** — 主要邮件发送
3. **通过 SMTP 发送邮件** — 仅在 SendGrid 失败或未配置时的备选方案
4. **Pushover** — 可选的附加渠道
所有渠道相互独立——其中一个的失败不会阻塞其他渠道。
要在运行完整应用之前测试 Telegram:
```
python test_telegram.py
```
## Prometheus & Grafana
ARIA 通过 `/metrics` 暴露 Prometheus 指标(通过 `prometheus_flask_exporter`)。
| 指标 | 描述 |
|-------------------------|--------------------------------------|
| `aria_alerts_total` | 已发送的 HIGH/CRITICAL 告警总数 |
| `aria_anomalies_total` | 检测到的关联事件总数 |
使用提供的 `prometheus.yml` 抓取 ARIA:
```
prometheus --config.file=prometheus.yml
```
将 Grafana 指向您的 Prometheus 实例,并使用
`aria_alerts_total` 和 `aria_anomalies_total` 指标导入仪表板。
## MITRE ATT&CK 覆盖范围
| 技术 ID | 名称 | 触发条件 |
|--------------|----------------------------------|-------------------------------------|
| T1110 | 暴力破解 | 5 分钟内出现 ≥10 次身份验证失败 |
| T1110.001 | 密码猜测 | 无效的用户登录尝试 |
| T1548 | 滥用提权控制 | sudo / 权限提升 |
| T1083 | 文件和目录发现 | 路径遍历 / 目录扫描 |
| T1078 | 有效账户 | 未经授权或异常登录 |
| T1078.003 | 本地账户 | 明确的凭据使用 |
| T1499 | 端点拒绝服务 | HTTP 5xx 激增 |
| T1558.003 | Kerberoasting | Kerberos TGT 请求 (Windows) |
## 仪表板功能
| 组件 | 描述 |
|---------------------|---------------------------------------------------------------|
| 统计卡片 | 实时计数:严重、高、过去一小时、总计 |
| 时间轴图表 | 过去 60 分钟内每分钟的事件数 |
| 异常仪表盘 | 平均异常分数及带颜色的指针 |
| 严重程度环形图 | LOW / MEDIUM / HIGH / CRITICAL 细分 |
| 主要攻击 IP | 按命中次数排名,并带有正确的最高严重程度标签 |
| 实时事件流 | SSE 驱动的实时日志滚动条(最多 200 行) |
| 告警表 | 可按严重程度、IP、攻击类型、MITRE 搜索和过滤|
| AI 摘要弹窗 | Gemini 生成的简明英文事件解释 |
## 日志格式支持
| 格式 | 示例来源 | 检测方式 |
|----------------------|---------------------------------------|---------------------|
| Linux auth.log | `/var/log/auth.log` | `sshd`, `sudo` |
| Apache/Nginx 访问日志 | `/var/log/apache2/access.log` | 组合日志格式 |
| Windows 事件日志 | 带有 EventID 字段的文本导出 | EventID 4624/4625+ |
| 通用 | 任何包含有效 IP 地址的日志 | IP 正则表达式兜底 |
## ML 模型
ARIA 在启动时使用合成的基线流量训练 **Isolation Forest**。为了在您的基础设施上获得更好的准确性:
```
# 在 modules/ml_detector.py 中,将 fit_baseline() 替换为真实数据:
import numpy as np
X_real = np.load("your_baseline_features.npy") # shape: (n_samples, 8)
detector.fit_baseline(X=X_real)
```
模型在拟合后会持久化到 `aria_model.pkl`。删除此文件以
强制在下次启动时重新拟合。
**特征向量(8 维):**
| 索引 | 特征 | 描述 |
|-------|-----------------|---------------------------------|
| 0 | hour | 一天中的小时 (0–23) |
| 1 | first_octet | 源 IP 的第一段 |
| 2 | last_octet | 源 IP 的最后一段 |
| 3 | attack_code | 编码的攻击类型 (0–5) |
| 4 | service_code | 编码的目标服务 (0–4) |
| 5 | is_failure | 身份验证失败标志 (0/1) |
| 6 | is_root | 涉及 Root 用户 (0/1) |
| 7 | port | 源端口(未知时为 0) |
## 生产部署
```
pip install gunicorn
gunicorn -w 1 -b 0.0.0.0:5000 --timeout 120 app:app
```
推荐技术栈:**nginx → gunicorn → ARIA**,并使用 Prometheus + Grafana 进行
指标可视化,使用 Loki 进行日志聚合。
## 已完成 vs 待办事项
### ✅ 已完成
- 带有轮转检测和优雅关闭的日志监视器
- 用于 auth.log、Apache/Nginx、Windows 事件日志和通用 IP 回退的解析器
- 具有启用 WAL 模式的 SQLite 数据库,按线程连接以及正确的严重级别排序
- 具有特征工程和模型持久化的 Isolation Forest ML 检测器
- 具有突发检测、阈值规则和 MITRE 标记的事件关联器
- 带有 Gemini API + 模板回退的 LLM 摘要器
- 带有 SendGrid → SMTP 回退、Telegram 和 Pushover 的告警器
- 带有 SSE 流传输和 Prometheus 指标的 Flask API
- 带有实时信息流、图表、仪表盘和 AI 摘要弹窗的仪表板
### 🔧 为您的环境待完成的事项
1. **添加 API 密钥** — 在 `.env` 中设置 `GEMINI_API_KEY` 并运行 `python test_telegram.py` 以验证告警
2. **指向真实日志** — 将 `ARIA_LOG_PATHS` 设置为您实际的日志文件路径
3. **调整 ML 模型** — 用真实的流量特征替换合成基线以获得更好的准确性
4. **设置 `ARIA_CONTAMINATION`** — 为您的环境调整异常敏感度(默认为 `0.05`)
5. **可选:Twilio 语音告警** — 添加 `alerter._send_twilio()` 用于严重告警的电话呼叫
6. **部署** — 在 VPS 上使用 gunicorn + nginx;配置 Prometheus + Grafana 以实现可观测性
标签:Apex, CISA项目, Cloudflare, DLL 劫持, Flask, Gemini, HTTP/HTTPS抓包, IP 地址批量处理, Isolation Forest, MITRE ATT&CK, PB级数据处理, PE 加载器, Python, SOAR, SQLite, SSE, Telegram, 告警系统, 大语言模型, 子域名变形, 安全运维, 异常检测, 态势感知, 插件系统, 无后门, 服务器发送事件, 机器学习, 网络安全, 自动化分析, 自定义请求头, 跨站脚本, 逆向工具, 邮件告警, 隐私保护