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。
## 架构(容器与云) Architecture Diagram ``` 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, 可观测性, 威胁情报, 开发者工具, 情报推送, 攻击面发现, 数据同步, 无后门, 暴力破解, 版权保护, 网络安全, 网络调试, 自动化, 请求拦截, 隐私保护