aiagentmackenzie-lang/incident-response-automation
GitHub: aiagentmackenzie-lang/incident-response-automation
一款轻量级 SOAR 平台,实现日志驱动的威胁检测、AI 辅助分类与自动化响应的完整链路。
Stars: 0 | Forks: 0
# 🚨 事件响应自动化工具
一个自动化的突发事件响应与分类系统,能够摄取日志、检测威胁并近实时触发响应,设计为适用于现代防御工程的紧凑型 SOAR 风格平台。
本项目是一个轻量级的安全编排、自动化和响应 (SOAR) 引擎,专注于小型环境、实验室和蓝队作品集的**日志驱动事件响应**。它将日志源连接到检测引擎、可选的基于 AI 的分类,以及一个既能**模拟**也能**执行**真实封堵动作的响应层。
该设计强调:
- **结构化日志记录与规范化**,使日志机器可读且易于关联。
- **基于规则的检测**,具有清晰、可审计的逻辑,并为后续更高级的分析预留接口。
- **AI 辅助分类**作为丰富层,绝不作为静默决策者。
- **安全自动化模式**,针对高风险操作采用“人在回路” 原则,体现 SOAR 最佳实践。
## 🔎 执行摘要
此工具展示了 SOC 风格的思维:检测、丰富、封堵和报告。它提供了一个整洁、可扩展的 Node.js 代码库,使用结构化日志和模块化组件,支持批量分析(文件)和近实时流式处理(tail/watch 模式)。
## 🎯 目标与非目标
### 目标
- 展示 **SOC 风格思维**:检测、丰富、封堵和报告。
- 提供一个整洁、可扩展的 Node.js 代码库,使用结构化日志和模块化组件。
- 支持**批量分析**(文件)和**近实时流式处理**(tail/watch 模式)。
- 使 AI 分类可插拔(支持 OpenRouter / Claude 或任何 HTTP LLM 后端)。
### 非目标
- 不是完整的 SIEM 替代品;假设上游已进行日志收集。
- 不是完整的企业级 SOAR;专注于少数高价值剧本(例如,暴力破解、恶意 IP)。
- 不是通用的异常检测引擎;依赖显式规则及可选的 AI 指导。
## 🧠 功能集
- **日志摄取**
- 基于文件(批处理)。
- 流式 / tail 模式用于近实时处理。
- 可插拔解析器(syslog 风格、JSON 日志、自定义文本格式)。
- **检测引擎**
- 基于规则的关联和阈值(例如,暴力破解、请求激增)。
- 滑动时间窗口逻辑(例如,T 秒内发生 N 个事件)。
- 按主体(IP、用户、API key)进行有状态跟踪。
- **分类层(AI 辅助,可选)**
- 严重性评分和置信度。
- 封堵建议。
- 推理说明以支持分析师审查(无日志不静默自动拦截)。
- **响应引擎**
- 模拟或真实 IP 封堵(例如,iptables、云防火墙 API)。
- 本地进程终止和会话标记。
- Webhook 通知(Slack, Teams, 自定义 HTTP endpoint)。
- **报告与可观测性**
- 结构化安全事件日志 (JSON),供下游 SIEM 摄取。
- 每个案件的事件时间线和摘要工件。
- CLI 摘要和机器可读输出。
## 🔐 检测用例
基线规则具有明确的主观性,直接映射到经典的 SOC 剧本:
- **暴力破解认证尝试**
- 在滚动时间窗口内来自同一 IP 或用户的多次登录失败。
- 可针对不同环境(实验室 vs 生产)设置可选阈值。
- **可疑 IP 行为**
- 访问已知的恶意范围(通过威胁情报源或静态列表)。
- 地理位置异常(例如,不可能的移动模式),当数据可用时。
- **请求 / 事件激增**
- 每个 IP、用户或 endpoint 的体量突增——可能是 DoS/撞库攻击。
- **未授权访问模式**
- 对敏感 endpoint 的重复 403/401 错误。
- 对已停用 API 或蜜罐路径的访问尝试。
每条规则实现为一个纯函数,消费规范化日志事件并发出 `null` 或 `DetectionEvent` 结构。
## 🏗️ 高层架构
```
┌──────────────────────────┐
│ Log Sources │
│ (files, streams, APIs) │
└────────────┬─────────────┘
│ normalized events
▼
┌──────────────────────────┐
│ Log Parser │
│ (format → structured) │
└────────────┬─────────────┘
│ events
▼
┌──────────────────────────┐
│ Detection Engine │
│ (rules, thresholds, etc) │
└────────────┬─────────────┘
│ threats
▼
┌──────────────────────────┐
│ Classification Layer │
│ (AI optional) │
└────────────┬─────────────┘
│ enriched incidents
▼
┌──────────────────────────┐
│ Response Engine │
│ (block, kill, notify) │
└────────────┬─────────────┘
│ actions + logs
▼
┌──────────────────────────┐
│ Reporting & Alerts │
│ (timeline, reports, CLI) │
└──────────────────────────┘
```
## 📁 仓库结构
```
incident-response/
├── src/
│ ├── parser/
│ │ ├── logParser.js
│ │ └── formats/
│ │ ├── textParser.js
│ │ └── jsonParser.js
│ ├── detection/
│ │ ├── rules.js
│ │ └── stateStore.js
│ ├── response/
│ │ ├── actions.js
│ │ └── integrations/
│ │ └── firewall.js
│ ├── ai/
│ │ └── classifier.js
│ ├── utils/
│ │ ├── reporter.js
│ │ └── logger.js
│ ├── config/
│ │ └── default.json
│ ├── cli/
│ │ └── index.js
│ └── index.js
├── test/
│ └── detection.test.js
├── logs/
│ └── sample-auth.log
├── package.json
└── README.md
```
## 🛠️ 技术栈
- **运行时**: Node.js (LTS)
- **日志**: Winston 用于结构化 JSON 安全日志
- **CLI**: Node streams + `readline` 用于高效的文件和 tail 处理
- **测试**: Jest 用于单元测试
- **AI 集成**: 任何 HTTP LLM 提供商(例如,通过 OpenRouter),支持按环境配置 API key
## ⚙️ 安装与设置
```
# 克隆 repo
git clone https://github.com/your-org/incident-response.git
cd incident-response
# 安装依赖
npm install
# 复制并编辑 configuration
cp src/config/default.json src/config/local.json
```
示例 `src/config/default.json`:
```
{
"logFormat": "text",
"timeWindowSeconds": 60,
"bruteForceThreshold": 10,
"spikeThreshold": 100,
"ai": {
"enabled": false,
"endpoint": "https://openrouter.ai/api/v1/chat/completions",
"model": "your-model-id",
"apiKeyEnvVar": "OPENROUTER_API_KEY"
},
"response": {
"simulate": true,
"webhookUrl": null
}
}
```
切勿硬编码机密(API key、webhook URL);通过环境变量或密钥管理器加载它们。
## 🧪 使用示例
### 分析日志文件(批量)
```
node src/cli/index.js --file logs/auth.log
```
### 近实时监控(tail 模式)
```
node src/cli/index.js --file logs/auth.log --watch
```
### JSON 输出(用于管道传输到其他工具)
```
node src/cli/index.js --file logs/auth.log --json | jq
```
## 🧱 核心组件
### 1. 日志解析器
将原始日志行解析为结构化事件:
```
// Text format: "192.168.1.1 - failed login - 2026-03-29T12:34:56Z"
const { buildParser } = require('./src/parser/logParser');
const parse = buildParser('text');
const event = parse('192.168.1.1 - failed login - 2026-03-29T12:34:56Z');
// → { ip: '192.168.1.1', event: 'failed login', timestamp: Date, raw: '...' }
```
### 2. 检测引擎
用于暴力破解检测的滑动窗口计数器:
```
const { detectAll } = require('./src/detection/rules');
// After 10 failed logins from same IP within 60 seconds
detectAll({ ip: '10.0.0.1', event: 'failed login', timestamp: new Date() });
// → { type: 'BruteForceLogin', ip: '10.0.0.1', count: 10, ... }
```
### 3. 响应动作
模拟或真实封堵:
```
const { respondToThreat } = require('./src/response/actions');
// SIMULATE_RESPONSE=true (default)
await respondToThreat({ type: 'BruteForceLogin', ip: '10.0.0.1' });
// → [SIMULATE] Would block IP: 10.0.0.1
```
### 4. AI 分类(可选)
使用 LLM 分析丰富事件:
```
const { classifyIncident } = require('./src/ai/classifier');
const classification = await classifyIncident(threat);
// → { enabled: false, severity: 'MEDIUM',
// recommendation: 'Review incident manually; AI not configured.' }
```
## 📊 示例输出
```
[INFO] incident_detected {"type":"BruteForceLogin","ip":"192.168.1.10", ...}
=== INCIDENT DETECTED ===
Type: BruteForceLogin
IP: 192.168.1.10
Count: 25
Severity: MEDIUM
Advice: Multiple failed logins from a single IP within 60 seconds. Block IP and investigate associated accounts.
[SIMULATE] Would block IP: 192.168.1.10
```
## 🔒 安全与隐私考量
- **最小权限**:如果与真实防火墙或基础设施 API 集成,仅使用限定范围的凭证运行此工具。
- **环境隔离**:为实验室、预发布和生产环境维护独立的配置。
- **日志卫生**:避免在事件日志中存储完整的机密、访问令牌或高度敏感的 PII。
- **安全自动化**:首先在**模拟**模式下启动,收集证据,然后有选择地启用真实操作。
- **可审计性**:每个自动操作都记录了时间戳、输入威胁和结果。
## ✅ 测试策略
```
# 运行所有测试
npm test
# 运行 with coverage
npm test -- --coverage
```
示例测试:
```
const { detectAll } = require('../src/detection/rules');
function buildLog(ip, event, ts) {
return { ip, event, timestamp: ts ? new Date(ts) : new Date() };
}
test('detects brute force after threshold', () => {
const ip = '10.0.0.1';
let threat = null;
for (let i = 0; i < 9; i++) {
threat = detectAll(buildLog(ip, 'failed login'));
expect(threat).toBeNull();
}
threat = detectAll(buildLog(ip, 'failed login'));
expect(threat).not.toBeNull();
expect(threat.type).toBe('BruteForceLogin');
});
```
## 🚀 升级路径
将此转变为旗舰级作品集项目的后续步骤:
1. **实时多源摄取**
- 添加 TCP/UDP 监听器用于 syslog。
- 添加 HTTP 摄取 endpoint 用于应用日志。
- 在检测前导入队列(例如,Kafka, Redis streams)。
2. **威胁情报丰富**
- 集成免费或付费的 IP/域名信誉源。
3. **仪表盘与案件管理**
- 构建一个小型 Web UI 显示活跃事件和时间线。
4. **额外剧本**
- 可疑管理员活动。
- API key 滥用检测。
- 来自网络边界日志的 RDP/SSH 暴力破解。
5. **加固与部署**
- 使用最小化基础镜像进行容器化。
- 添加 CI 以运行测试、SAST 和依赖检查。
- 提供 Kubernetes manifests 或 Docker Compose。
## 📄 许可证
MIT
## 参考资料
1. [自动化事件响应:构建有效的 SOAR 剧本](https://johnpemberton.dev/blog/automating-incident-response-soar-playbooks)
2. [什么是 SOAR?4 大核心组件、用例与最佳实践](https://radiantsecurity.ai/learn/what-is-soar-4-core-components-use-cases-and-critical-best-practices/)
3. [关键 SOAR 能力 - Exabeam](https://www.exabeam.com/explainers/siem-security/incident-response-and-automation/)
4. [NodeJS 安全速查表](https://pentest.y-security.de/OWASP%20Cheat%20Sheet%20Series/Nodejs_Security_Cheat_Sheet/)
5. [Nodejs 安全 - OWASP 速查表系列](https://cheatsheetseries.owasp.org/cheatsheets/Nodejs_Security_Cheat_Sheet.html)
6. [结构化日志记录 - ClickHouse](https://clickhouse.com/resources/engineering/structured-logging)
7. [结构化日志记录:最佳实践与 JSON 示例 - Uptrace](https://uptrace.dev/glossary/structured-logging)
8. [什么是结构化日志记录? - Nxlog](https://nxlog.co/whitepapers/structured-logging)
9. [日志格式标准:JSON、XML 和键值对解释 - Last9](https://last9.io/blog/log-format/)
10. [安全编排自动化与响应 (SOAR):完整指南 - Cynet](https://www.cynet.com/incident-response/security-orchestration-automation-and-response-soar-a-quick-guide/)
11. [如何保护 Node.js API 免受常见漏洞影响](https://oneuptime.com/blog/post/2026-01-06-nodejs-api-security-owasp-top-10/view)
12. [工程团队网络安全实践 - LinkedIn](https://www.linkedin.com/top-content/engineering/systems-engineering-cybersecurity-measures/cybersecurity-practices-for-engineering-teams/)
13. [安全软件开发最佳实践 - Hyperproof](https://hyperproof.io/resource/secure-software-development-best-practices/)
14. [OWASP Node.js 最佳实践指南](https://www.nodejs-security.com/blog/owasp-nodejs-best-practices-guide)
标签:AI安全, AMSI绕过, Chat Copilot, GNU通用公共许可证, MITM代理, Node.js, PMD, SOAR, 人工智能辅助分类, 威胁分类, 威胁检测, 安全剧本, 安全运营中心, 实时流处理, 日志规范化, 网络安全, 网络映射, 自动化应急响应, 自定义脚本, 防御工程, 隐私保护