内容
# 🛡️ 思科安全 - 事件响应AI
### Spring Boot + Spring AI + 自定义MCP服务器
一个自主运行的AI系统,能够自动监控思科ISE安全日志,
使用大型语言模型分析威胁,并提出沙盒防火墙规则 —
所有操作都通过自定义MCP(模型上下文协议)服务器协调。
---
## 架构
```
┌─────────────────────────────────────────────────────────────────────┐
│ REST API + SSE 流 │
│ POST /api/incidents/trigger GET /api/incidents/stream │
│ GET /api/incidents/{id} POST /api/incidents/{id}/approve │
└───────────────────────────┬─────────────────────────────────────────┘
│
┌─────────────▼─────────────┐
│ 事件响应工作流 │ (编排器)
└─────────────┬─────────────┘
│ 顺序管道
┌─────────────────┼──────────────────┐
│ │ │
┌─────▼──────┐ ┌──────▼─────┐ ┌───────▼──────┐
│ 监控代理 │ │ 分析代理 │ │ 修复代理 │
│ 代理 1 │──▶│ 代理 2 │──▶│ 代理 3 │
│ │ │ │ │ │
│ 扫描ISE日志 │ │ 威胁检测 │ │ 沙盒规则 │
│ 通过MCP工具 │ │ + 大型语言模型 │ │ + 阻止IP │
│ │ │ 推理 │ │ 通过MCP │
└────────────┘ └────────────┘ └──────────────┘
│ │ │
└────────────────┴──────────────────┘
│ MCP工具调用
┌────────────▼──────────────────────┐
│ 思科IseMcp服务器(MCP) │
│ @Tool 获取安全日志 │
│ @Tool 获取终端状态 │
│ @Tool 阻止终端 │
│ @Tool 在沙盒中测试规则 │
│ @Tool 获取活动策略 │
└───────────────────────────────────┘
│
┌────────────▼────────────┐
│ Anthropic Claude │
│ (claude-sonnet-4) │
│ 通过Spring AI │
└─────────────────────────┘
```
---
## 项目结构
```
incident-response-ai/
├── pom.xml
└── src/main/java/com/security/incident/
├── IncidentResponseApplication.java ← Spring Boot 入口点
│
├── mcp/
│ ├── service/
│ │ ├── CiscoIseMcpServer.java ← MCP服务器包装器
│ │ ├── CiscoIseClient.java ← [新]网关接口
│ │ └── RestCiscoIseClient.java ← [新]真实REST API实现
│ └── model/
│ ├── LogEntry.java ← ISE日志事件模型
│ └── SecurityModels.java ← 终端/阻止/沙盒模型
│
├── agents/
│ ├── MonitorAgent.java ← 代理 1:日志扫描
│ ├── AnalyzerAgent.java ← 代理 2:威胁分析
│ └── RemediatorAgent.java ← 代理 3:规则 + 阻止
│
├── workflow/
│ ├── IncidentResponseWorkflow.java ← 管道编排器
│ └── IncidentReport.java ← 共享状态载体
│
├── events/
│ └── AgentEvent.java ← SSE广播事件
│
├── config/
│ └── AgentConfig.java ← Spring AI + MCP线路
│
└── controller/
└── IncidentController.java ← REST + SSE端点
```
---
## 技术栈
| 组件 | 技术 |
|-----------------|-------------------------------------|
| 框架 | Spring Boot 3.3 + Java 21 |
| AI编排 | Spring AI 1.0.0 |
| 大型语言模型 | Anthropic Claude(claude-sonnet-4) |
| HTTP客户端 | Spring RestClient(现代且流畅) |
| MCP服务器 | Spring AI MCP服务器启动器 |
| MCP协议 | @Tool注解 + stdio/SSE |
| 流媒体 | Spring MVC SSE(SseEmitter) |
| 构建 | Maven |
---
## 设置和运行
### 1. 先决条件
- Java 21+
- Maven 3.9+
- Anthropic API密钥
### 2. 设置API密钥
```bash
export ANTHROPIC_API_KEY=sk-ant-...
```
### 3. 构建和运行
```bash
cd incident-response-ai
mvn clean package -DskipTests
java -jar target/incident-response-ai-1.0.0.jar
```
---
## API用法
### 触发3代理管道
```bash
curl -X POST http://localhost:8080/api/incidents/trigger
```
响应:
```json
{
"status": "PIPELINE_STARTED",
"message": "事件响应管道正在运行...",
"stream": "/api/incidents/stream"
}
```
### 实时观看SSE事件(在另一个终端)
```bash
curl -N http://localhost:8080/api/incidents/stream
```
您将看到以下事件:
```
event: agent-event
data: {"agent":"MonitorAgent","status":"STARTED","message":"扫描思科ISE日志..."}
event: agent-event
data: {"agent":"MonitorAgent","status":"COMPLETED","message":"发现2个可疑IP地址:[185.220.101.47, 198.199.67.82]"}
event: agent-event
data: {"agent":"AnalyzerAgent","status":"STARTED","message":"分析IP地址185.220.101.47..."}
event: agent-event
data: {"agent":"RemediatorAgent","status":"COMPLETED","message":"沙盒批准,应用阻止,回滚:RBK-1002"}
```
### 获取事件报告
```bash
curl http://localhost:8080/api/incidents/INC-ABC12345
```
### 批准AI推荐的补救措施(人工介入)
```bash
curl -X POST http://localhost:8080/api/incidents/INC-ABC12345/approve
```
---
## 代理决策逻辑
```
监控代理
│ 调用:getSecurityLogs(50,“ALL”)
│ 标记IP地址:身份验证尝试> 5,事件类型在[BRUTE_FORCE,PORT_SCAN...]中
▼
是否发现可疑IP地址?
├── 否 → 关闭事件:CLEAN
└── 是 ▼
分析代理
│ 调用:getEndpointStatus(primaryIp)
│ 大型语言模型评估:威胁分数,姿势,合规性标签,ISE配置文件
▼
裁决?
├── FALSE_POSITIVE → 关闭:FALSE_POSITIVE(无操作)
├── 置信度< 0.6 → 关闭:ESCALATED(人工SOC审查)
└── 真实威胁 ▼
修复代理
│ 设计FTD阻止规则
│ 调用:testRuleInSandbox(...)
│ 沙盒结果?
│ REJECT / 发现假阳性 → DEFERRED(人工审查)
│ APPROVE ▼
│ 调用:blockEndpoint(ip,reason,QUARANTINE)
▼
状态:AWAITING_APPROVAL
(人类必须调用/approve才能推送到生产环境)
```
---
## MCP服务器工具
`CiscoIseMcpServer`通过`@Tool`注解公开5种工具:
| 工具 | 描述 |
|------|-------------|
| `getSecurityLogs` | RADIUS/TACACS日志流与身份验证事件 |
| `getEndpointStatus` | ISE终端配置文件+姿势+威胁分数 |
| `blockEndpoint` | 通过ISE CoA隔离+分配隔离VLAN |
| `testRuleInSandbox` | 验证FTD ACL规则对抗模拟流量 |
| `getActivePolicies` | 列出ISE AuthZ策略+FTD ACL规则 |
这些工具由Spring AI的MCP服务器启动器自动注册并可用:
- **进程内**:通过`MethodToolCallbackProvider`(此应用程序中的代理使用)
- **通过MCP stdio**:任何外部MCP客户端(Claude Desktop等)都可以连接
---
## 扩展到生产环境
| 领域 | 实现状态 |
|------|--------------------------|
| **思科ISE** | ✅ **已实现** 通过`RestCiscoIseClient`(ERS API) |
| **防火墙** | 与**思科FMC REST API**集成以实现真正的FTD规则推送 |
| **持久性** | 用**PostgreSQL**或**Redis**替换内存存储 |
| **身份验证** | 在REST API中添加**OAuth2/JWT** |
| **通知** | 在ESCALATED状态下添加**PagerDuty / Slack**网络钩子 |
| **审计日志** | 编写**Splunk**或**Elastic**以进行SIEM集成 |
---
## 学习成果(SDE转换)
该项目演示:
- ✅ **Spring Boot 3** – REST API,SSE流媒体,异步处理
- ✅ **Spring AI** – ChatClient,工具调用,代理循环
- ✅ **MCP协议** – 自定义服务器与@Tool注解
- ✅ **代理设计模式** – 监控→分析→修复管道
- ✅ **人工介入** – 生产变更前的安全门控
- ✅ **领域驱动设计** – 丰富的领域模型(IncidentReport)
- ✅ **事件驱动** – ApplicationEventPublisher + @EventListener
连接信息
猜你喜欢
暂无推荐服务器