dcodev1702/Sentinel-TI-Upload-with-Mock-TI-API
GitHub: dcodev1702/Sentinel-TI-Upload-with-Mock-TI-API
一个将 STIX 2.1 格式威胁情报指标从 Mock API 同步到 Microsoft Sentinel 的容器化 PoC 方案,演示了自定义 TI 源与 Sentinel 的对接方法。
Stars: 1 | Forks: 0
# TI 同步服务 - SC.AI X-GEN API <-> Microsoft Sentinel
该解决方案从 Mock TI API 获取威胁情报指标,并使用 [TI Upload API (Preview)](https://learn.microsoft.com/en-us/azure/sentinel/stix-objects-api?source=recommendations) 将其上传到 Microsoft Sentinel。
## 架构(容器与云)
```
Flow:
1. TI Sync Service request TI indicators via backend network from Mock TI API via API (1)
2. Mock TI API responds with TI indicators via backend network (json:stixobjects[]) (2)
3. TI Sync Service uploads indicators (stixobjects[]) via frontend network to Microsoft Sentinel (3)
```
## 功能特性
- ✅ 从 Mock TI API 获取 STIX 2.1 指标
- ✅ 处理分页(每次 Sentinel 上传最多 100 个指标)
- ✅ 支持单次和连续同步模式
- ✅ 使用 client credentials 进行 Azure AD 认证
- ✅ 用于 dry run(空运行)的测试模式
- ✅ 支持 Docker 容器化部署
- ✅ 详细的日志记录和进度跟踪
## 前置条件
- [Docker](https://www.docker.com/)
- PowerShell 5.1 或更高版本
- 已启用 Microsoft Sentinel 的 Azure 订阅
- 具有适当权限的 Azure AD App Registration
- Mock TI API 正在运行且可访问
- 包含 Azure 凭证的 `.env` 文件
## 快速开始
### 1. 配置环境
确保您的 `.env` 文件包含以下内容:
```
# Azure 配置
AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret
AZURE_TENANT_ID=your-tenant-id
AZURE_WORKSPACE_ID=your-sentinel-workspace-id
# Mock API 配置(示例和可选 - 甚至可以进行 b64 解码 ;)
API_KEYS=QUxMIFVSIEJBU0UgQU5EIEFQSSdTIEFSRSBCRUxPTkcgVE8gVVMh
```
## 使用示例
### 推荐且优化的方法
### 使用 Docker Compose 构建并运行
```
# 同时启动 Mock API 和 Sync Service
docker compose up --build -d
```
```
# 查看日志
docker compose logs -f
docker compose logs -f ti-sync-service
```
```
# 停止服务
docker compose down --rmi all -v
docker system prune -f
```
### 连续同步
```
# 每 30 分钟运行一次持续同步
Start-TISyncFromMockAPI -IntervalMinutes 30
# 运行一次(适用于 cron jobs)
Start-TISyncFromMockAPI -RunOnce
```
### 使用运行脚本
```
# 单次同步
.\run.ps1 -Mode Single
# 每 30 分钟持续同步
.\run.ps1 -Mode Continuous -IntervalMinutes 30
# Test 模式
.\run.ps1 -Mode Test
# 启动 Docker 容器
.\run.ps1 -Mode Docker
```
## Docker 部署
### 仅运行同步服务
```
# 构建 image
docker build -t ti-sync-service:latest .
# 运行 container(挂载 .env 文件)
docker run -d \
--name ti-sync \
-v $(pwd)/.env:/app/.env:ro \
-e INTERVAL_MINUTES=60 \
-e MOCK_API_URL=http://192.168.10.27:8080 \
ti-sync-service:latest
```
## API 端点
### Mock TI API
- **健康检查**: `GET /healthz`
- **显示 API 端点**: `GET /routes`
- **获取指标**: `GET /api/v1/indicators`
- Headers: `X-API-Key: {api_key}`
- Response: `{ sourcesystem, stixobjects[] }`
### Microsoft Sentinel TI Upload API
- **上传端点**: `POST /workspaces/{workspaceId}/threat-intelligence-stix-objects:upload`
- **API 版本**: `2024-02-01-preview`
- **最大指标数**: 每次请求 100 个
- **文档**: [Microsoft Learn](https://learn.microsoft.com/en-us/azure/sentinel/stix-objects-api)
## 参数
### Invoke-TI2UploadAPI
| 参数 | 描述 | 默认值 |
|-----------|-------------|---------|
| `-EnvFile` | .env 文件路径 | `.\.env` |
| `-MockApiUrl` | Mock TI API 基础 URL | `http://172.18.0.2:8080` |
| `-ApiKey` | Mock API 的 API key | 从 .env 读取 |
| `-MaxIndicatorsPerUpload` | 每批次最大指标数 | 100 |
| `-ShowProgress` | 显示详细进度 | False |
| `-TestMode` | 不执行上传的 dry run | False |
| `-SaveToFile` | 保存获取的指标 | False |
### Start-TISyncFromMockAPI
| 参数 | 描述 | 默认值 |
|-----------|-------------|---------|
| `-IntervalMinutes` | 同步间隔(分钟) | 60 |
| `-RunOnce` | 仅运行单次同步 | False |
| `-EnvFile` | .env 文件路径 | `.\.env` |
| `-MockApiUrl` | Mock TI API 基础 URL | `http://192.168.10.27:8080` |
## 故障排除
### 常见问题
1. **认证失败**
- 验证 `.env` 中的 Azure 凭证
- 检查 App Registration 权限
- 确保已分配 Sentinel Contributor 角色
2. **Mock API 连接失败**
- 验证 Mock API 是否正在运行:`curl http://192.168.10.27:8080/healthz`
- 如果启用了认证,请检查 API key
- 验证网络连通性
3. **上传失败并返回 400 Bad Request**
- 检查指标格式(需符合 STIX 2.1 规范)
- 验证每批次最多 100 个指标
- 查看 Sentinel API 文档
4. **速率限制**
- 批次之间自动延迟 500ms
- 调整 `IntervalMinutes` 以进行连续同步
### 调试模式
```
# 启用详细输出
$VerbosePreference = "Continue"
Invoke-TI2UploadAPI -ShowProgress
# 保存 indicators 以供检查
Invoke-TI2UploadAPI -TestMode -SaveToFile
```
## 安全注意事项
- 安全存储 `.env` 文件(不要放入版本控制)
- 在生产环境中使用托管标识
- 定期轮换 API keys 和 client secrets
- 监控上传日志是否存在异常
- 实施适当的错误处理和告警
## 性能
- Mock API 每个周期可生成 10-25 个指标
- Sentinel 每次上传最多接受 100 个指标
- 批处理可高效处理大量指标集
- 建议同步间隔:30-60 分钟
## 许可证
这是一个用于教育目的的演示/模拟解决方案。
## 支持
对于与以下相关的问题:
- Mock TI API:检查 `generator.py` 和 FastAPI 日志
- 同步服务:查看 PowerShell 错误消息
- Sentinel API:查阅 [Microsoft 文档](https://learn.microsoft.com/en-us/azure/sentinel/stix-objects-api)
## 架构(容器与云)
标签:AI合规, API集成, Azure AD认证, Docker容器, IPv6, Libemu, Microsoft Sentinel, PoC, PowerShell, Python, STIX 2.1, TI Upload API, 可观测性, 威胁情报, 开发者工具, 情报推送, 攻击面发现, 数据同步, 无后门, 暴力破解, 版权保护, 网络安全, 网络调试, 自动化, 请求拦截, 隐私保护