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, 告警系统, 大语言模型, 子域名变形, 安全运维, 异常检测, 态势感知, 插件系统, 无后门, 服务器发送事件, 机器学习, 网络安全, 自动化分析, 自定义请求头, 跨站脚本, 逆向工具, 邮件告警, 隐私保护