hondo78/Warroom

GitHub: hondo78/Warroom

面向中小型 Sophos 环境的安全运营仪表盘,聚合多源日志与威胁情报,提供 AI 辅助的事件响应和防火墙 IOC 源自动分发能力。

Stars: 0 | Forks: 0

# Warroom 适用于中小型 Sophos 环境的安全运营仪表盘。 聚合来自 **Sophos Central**(告警、事件、端点、防火墙)、 **Sophos Firewall (SFOS) syslog**(IPS、WAF、身份验证、流量)以及 **NetFlow v5/v9/IPFIX** 的数据,并通过 **GeoIP + AbuseIPDB / VirusTotal / Shodan / Sophos Intelix / GreyNoise** 来丰富 IP 信息。被封锁的 IP、域名和 URL 会作为 **IOC 源**(TXT)发布,供防火墙通过 URL 拉取。 ``` ┌──────────────────┐ Syslog 5514 ┌──────────┐ │ Sophos Firewall │ ───────────────► │ syslog │──┐ └──────────────────┘ NetFlow 2055 └──────────┘ │ │ ▼ │ ┌──────────┐ ┌────────────────────┐ │ │ netflow │ ──►│ PostgreSQL │◄──┐ │ └──────────┘ └────────────────────┘ │ ▼ ▲ │ ┌──────────────────┐ REST API │ │ │ Sophos Central │ ◄─────────────────── ┌─────────┐ │ └──────────────────┘ │ backend │ ──► Redis │ └─────────┘ (Cache) │ ▲ │ │ /ioc_IP │ ▼ │ ┌─────────┐ │ Browser ◄───► │ nginx │ │ └─────────┘ │ ▲ │ │ HTTP-Pull │ │ (X-API-Key) │ ┌────┴────┐ │ │Firewall │──────────┘ └─────────┘ Blocklist ``` ## 目录 - [Warroom 能做什么?(用户视角)](#what-can-warroom-do-user-view) - [环境要求](#requirements) - [6 步设置](#setup-in-6-steps) - [我需要获取什么?(清单)](#what-do-i-need-to-obtain-checklist) - [连接数据源](#connecting-data-sources) - [用于防火墙的 IOC 源](#ioc-feeds-for-firewalls) - [Block API (Web UI)](#block-api-web-ui) - [AI agent (可选)](#ai-agent-optional) - [Microsoft 365 审计日志 (可选)](#microsoft-365-audit-logs-optional) - [Entra ID 登录封锁 (可选)](#entra-id-login-blocking-optional) - [Telegram 审批 (可选)](#telegram-approvals-optional) - [AI 聊天与 Teams 命令](#ai-chat--teams-commands) - [安全与加固](#security--hardening) - [技术栈与服务](#stack--services) - [故障排除](#troubleshooting) ## Warroom 能做什么?(用户视角) 登录后(仪表盘位于 `http://:8448`),可以使用以下页面: | 页面 | URL | 功能描述 | |-------|-----|------------------------| | **Dashboard** | `/` | 来自 Sophos Central 的告警、事件和检测;带有攻击者地理位置的实时地图;防火墙日志(IPS / WAF / 身份验证 / 登录失败);AI agent 建议;端点概览。只需点击即可直接封锁 IP、确认告警、隔离端点。 | | **AI Chat** | `/chat.html` | 自然语言命令:封锁 IP/域名/FQDN/URL、隔离端点、查询隔离区、OSINT 查询、统计报告。同一引擎也可通过 **Microsoft Teams** 访问。 | | **Blocklist** | `/blocked.html` | 手动封锁/解封 IP、域名和 URL;维护白名单;检查最终的 IOC 源。 | | **NetFlow** | `/netflow.html` | 流量分析:Top talkers、目标地址、端口、协议分布、接口吞吐量。 | | **Firewalls** | `/firewalls.html` | 地图上的防火墙位置、接口统计信息、白名单管理。 | | **Endpoints** | `/endpoints.html` | Sophos Endpoint Management API:设备**清单**(健康状态/隔离/防篡改/操作系统)及详细视图、隔离/解除隔离、按需扫描、注销 · **分组**(创建/删除) · **策略**(列表 + 详情) · **设置**(全局防篡改保护、允许/阻止列表、扫描排除项、Web 控制本地站点 —— 均可添加/删除) · 各平台的**安装包下载**。 | | **Agent** | `/agent.html` | AI agent 的决策日志;批准/拒绝建议;LLM 统计数据。它可以检测(除其他事项外)**分布式暴力破解攻击**(来自多个 /24 网络的大量源 IP 针对同一账户 → `block_ips`)并接受**分类输入**。 | | **Agent Workflow** | `/agent-workflow.html` | 可视化决策流水线,并可实时编辑**每个阶段**(触发器、阈值、间隔、允许的操作、系统提示词、自动执行)。LLM 使用**结构化输出**(通过 `response_format` 定义 Pydantic schema)进行寻址,并以类型化方式进行验证。 | | **Email** | `/email.html` | Sophos Email Management API:管理邮箱(创建/修改/删除)、搜索隔离区和送达后隔离区、释放/删除邮件(可选允许/阻止发件人)。 | | **Microsoft 365** | `/o365.html` | M365 登录审计(Management Activity API):成功和失败的登录记录,包含应用、**设备**(名称/操作系统/浏览器/合规性)、源 IP、位置。列**可排序和过滤**;每个 IP 都可进行 OSINT 下钻;失败的登录可直接封锁(受白名单保护的 IP 除外)。 | | **OSINT** | `/osint.html` | 手动检查 IP、域名或 URL —— 并行使用 Sophos Intelix、AbuseIPDB、VirusTotal、GreyNoise、ipinfo 和 DNS;支持绕过缓存。**Shodan** 是节省额度的可选功能:仅通过“🛰️ Query Shodan”按钮使用。检查到的值可以**立即封锁**或交给 **AI 分类**。每次查询都会存储在可搜索的**持久化历史记录**(`osint_results`)中(超出 1 小时的 Redis 缓存限制);开放端口和 CVE 还可作为地图图层展示。 | | **Stats** | `/stats.html` | OSINT 提供商的使用情况(每日/每月限制)、LLM 调用和 token、缓存命中率。 | | **Admin** | `/admin.html` | 实时编辑所有 API 密钥、时间间隔、日志级别和 agent 设置**在线进行** —— 无需重启容器。 | | **Grafana** | `:3030` | 直接在 PostgreSQL 数据库上预置的仪表盘(Warroom、NetFlow、Blocklist)。 | ## 环境要求 在宿主机上,您只需要: - **Docker** 和 **Docker Compose v2**(`docker compose version` ≥ 2.x) - **Git** - 宿主机上的空闲端口:**8448**(仪表盘)、**3030**(Grafana)、 **5514/udp+tcp**(syslog)、**2055/udp**(NetFlow) - 可选但建议:第二台发送 syslog/NetFlow 的设备 (Sophos Firewall 或类似设备) 前端无需任何**构建步骤**(原生 JS),也不需要本地 安装 Python —— 一切都在容器中运行。 ## 6 步设置 ``` # 1) Clone git clone https://github.com/hondo78/Warroom.git cd Warroom # 2) 创建配置 cp .env.example .env # 3) 填写 .env – 至少包含: # - POSTGRES_PASSWORD + DATABASE_URL(相同的密码!) # - WARROOM_API_KEY (openssl rand -hex 32) [强烈建议] # - GRAFANA_ADMIN_PASSWORD # - SOPHOS_CLIENT_ID / SOPHOS_CLIENT_SECRET [用于 Sophos Central 数据] $EDITOR .env # 4)(可选)提供 GeoIP 数据库 – 请参阅下面的检查清单。 # 如果没有它们,Warroom 将使用 ip-api.com 回退运行。 # 将 GeoLite2-City.mmdb 和 GeoLite2-ASN.mmdb 放入 ./geoip/。 # 5) 启动 docker compose up -d # 6) 检查状态 docker compose ps docker compose logs -f backend ``` 然后可以通过以下地址访问: - **仪表盘:** - **管理界面:** - **Grafana:** (使用 `GRAFANA_ADMIN_*` 登录) 其余配置(OSINT 密钥、agent、时间间隔)可以方便地 在 **管理界面** 中添加 —— 无需重启。 ## 我需要获取什么?(清单) | # | 项目 | 是否必须? | 获取来源 | 存放位置 | |---|-----|----------|-------|-------| | 1 | **数据库密码** | ✅ | 自己设定一个 | `.env` 中的 `POSTGRES_PASSWORD` **和** `DATABASE_URL` | | 2 | **WARROOM_API_KEY** | ⭐ 强烈建议 | `openssl rand -hex 32` | `.env` 中的 `WARROOM_API_KEY` | | 3 | **Grafana 密码** | ⭐ 建议 | 自己设定一个 | `.env` 中的 `GRAFANA_ADMIN_PASSWORD` | | 4 | **Sophos Central 凭据** | 用于获取 Central 数据 | Sophos Central → Global Settings → API Credentials Management → *Add Credential* | `SOPHOS_CLIENT_ID` / `SOPHOS_CLIENT_SECRET` | | 5 | **GeoLite2-City.mmdb + GeoLite2-ASN.mmdb** | 可选 | [MaxMind GeoLite2](https://www.maxmind.com/en/geolite2/signup) (免费) | 存放在 `./geoip/` 中的文件 | | 6 | **AbuseIPDB 密钥** | 可选 | | `ABUSEIPDB_API_KEY` | | 7 | **VirusTotal 密钥** | 可选 | | `VIRUSTOTAL_API_KEY` | | 8 | **Shodan 密钥** | 可选 | | `SHODAN_API_KEY` | | 9 | **Sophos Intelix 凭据** | 可选 | | `SOPHOS_INTELIX_CLIENT_ID/SECRET` | | 10 | **LLM endpoint** (用于 AI agent) | 可选 | LMStudio / Ollama / vLLM / OpenAI | `.env` 中的 `AGENT_*` | ## 连接数据源 ### Sophos Firewall Syslog *System → Administration → Notification settings → Syslog Server:* - **Host:** Warroom 宿主机的 IP - **Port:** 5514 (UDP 或 TCP) - **Format:** Standard / Device-Syslog - 启用的类别:**Firewall**(流量)、**IPS**、**WAF**、 **Authentication**、**Admin**、**System** ### NetFlow 将防火墙/路由器的 NetFlow 导出 (v5/v9/IPFIX) 指向 **`:2055/udp`**。数据桶按分钟进行聚合, 默认保留 30 天(在 `netflow` 服务中配置 `RETENTION_DAYS`)。 ### Sophos Central 一旦设置了 `SOPHOS_CLIENT_ID`/`SECRET`,`collector` 就会 每隔 `COLLECTOR_INTERVAL` 秒(默认 300)获取一次 告警、事件、端点和防火墙状态。 ## 用于防火墙的 IOC 源 这些列表在 维护。每个 封锁/解封操作都会**立即**在数据源中可见(直接从数据库实时读取,无需 推送、无需核对、无缓存)。 | 源 | Endpoint | 格式 | |------|----------|--------| | IPs | `GET /ioc_IP` | 每行一个 IPv4/IPv6,已排序 | | Domains | `GET /ioc_domain` | 主机名,允许使用通配符 `*.evil.tld` | | URLs | `GET /ioc_url` | 包含 `http(s)://` 和路径的完整 URL | 所有源都需要请求头 `X-API-Key: `(除非在 开放模式下)。 ``` GET https://:8448/ioc_IP Header: X-API-Key: ``` ### 防火墙集成 **Sophos XG / XGS** — *Hosts and Service → IP List → Add* → 输入 URL, 为 `X-API-Key` 使用 "Custom HTTP Headers",更新间隔例如 5 分钟。 **Fortinet FortiGate** — *Security Fabric → External Connectors → Threat Feeds → IP Address* → 输入 URL,设置 HTTP 请求头 `X-API-Key`。 **pfSense / OPNsense (pfBlockerNG)** — 将 URL 添加为 IPv4 源。 pfBlockerNG 不会发送自定义请求头 → 需要通过代理配合 IP 白名单放置该端点, 或者通过 nginx 配置仅为防火墙 IP 开启开放模式(`WARROOM_API_KEY` 留空)。 ## Block API (Web UI) 仪表盘和黑名单页面中的封锁按钮会调用以下 endpoints: | 方法 | 路由 | Body | |---------|-------|------| | POST | `/api/firewall/block-ip` | `{"ip": "1.2.3.4", "comment": "..."}` | | POST | `/api/firewall/block-ips` | `{"ips": ["1.2.3.4", ...]}` | | POST | `/api/firewall/unblock-ip` | `{"ip": "1.2.3.4"}` | | GET | `/api/firewall/blocked-ips` | – | | POST | `/api/firewall/block-domain` | `{"domain": "evil.tld", "comment": "..."}` | | POST | `/api/firewall/block-domains` | `{"domains": ["evil.tld", "*.adsrv.tld"]}` | | POST | `/api/firewall/unblock-domain` | `{"domain": "evil.tld"}` | | GET | `/api/firewall/blocked-domains` | – | | POST | `/api/firewall/block-url` | `{"url": "https://evil.tld/x", "comment":""}` | | POST | `/api/firewall/block-urls` | `{"urls": ["https://a/b", "http://c/d"]}` | | POST | `/api/firewall/unblock-url` | `{"url": "https://evil.tld/x"}` | | GET | `/api/firewall/blocked-urls` | – | IP 最终存入 `blocked_ips`,主机名存入 `blocked_domains`,URL 存入 `blocked_urls`。数据源实时读取这些 → 无需同步逻辑。 ## AI agent (可选) agent 通过 LLM 分析防火墙日志(WAF/IPS/登录失败)并提出 封锁建议 —— 或自动执行。默认**关闭**。 1. 提供一个 LLM endpoint(本地的 LMStudio/Ollama/vLLM 或 OpenAI)。 `host.docker.internal` 将从容器指向 Docker 宿主机。 2. 在管理界面或 `.env` 中:设置 `AGENT_ENABLED=true`、`AGENT_BASE_URL`、 `AGENT_MODEL`。 3. 默认情况下,建议保持**待处理**状态,必须在 `/agent.html` 进行批准。`AGENT_AUTO_EXECUTE=true` 或置信度快速通道 (`AGENT_AUTO_EXECUTE_THRESHOLD`)会自动执行它们。 ## Microsoft 365 审计日志 (可选) 从 Microsoft 365 Management Activity API 拉取**登录事件** (UserLoggedIn / UserLoginFailed),并使用 GeoIP 丰富数据。登录失败 还会作为告警显示在攻击地图上,并由 AI agent 进行评估。显示页面位于 `/o365.html`,配置位于 **Admin → Microsoft 365**。 **Azure 应用注册(一次性):** 1. [entra.microsoft.com](https://entra.microsoft.com) → **App registrations → New registration**(单租户)。 2. **API permissions → Office 365 Management APIs → Application permissions → `ActivityFeed.Read`** → **Grant admin consent**。 3. **Certificates & secrets → New client secret** → 复制该值。 4. 在 Warroom **Admin → Microsoft 365** 中:输入租户 ID、客户端 ID、客户端密钥 → **Test connection**。收集器会自动启动 (审计事件会有约 5–30 分钟的延迟到达)。 ## Entra ID 登录封锁 (可选) 额外将 Warroom 黑名单同步到绑定在**条件访问策略**的 Entra **Named Location** 中 —— 这样来自被封锁 IP 的 M365 登录 就会直接在微软被拒绝(作为防火墙 IOC 源的补充)。 配置位于 **Admin → Entra ID**。 - **使用与** M365 收集器**相同的应用注册**,但还需要 Graph 应用权限 `Policy.ReadWrite.ConditionalAccess` + `Policy.Read.All`(管理员同意)以及 **Entra ID P1** 许可证(包含在 Microsoft 365 E3/E5 中)。 - **Named Location 和策略会自动创建**(自我修复:如果 策略被外部删除,下一次同步会重新创建它)。策略名称: *"Warroom — Block IPs (managed)"*。 - **安全默认仅报告:** 该策略最初不会强制执行任何操作。通过 管理员开关 *"Enforcement ON/OFF"* 启用它 —— 此时 强制要求提供一个**紧急访问账号**(UPN 或对象 ID),该账号永远不会被 封锁(防止将您自己锁定在外)。UPN 会从 M365 审计日志中免权限解析为对象 ID。 ## Telegram 审批 (可选) 将**每个待处理的 agent 决策**作为 Telegram 消息发送,并带有 **✅ 批准 / ❌ 拒绝** 按钮;决策可直接从 Telegram 执行 (长轮询,无需公开的 webhook)。配置位于 **Admin → Telegram**。 1. 通过 [@BotFather](https://t.me/BotFather) 创建机器人 → 复制 bot token。 2. 确定 `chat_id`(例如通过 `@userinfobot`),并**先给机器人发送一条 消息**或将其添加到群组中。 3. 在 Warroom **Admin → Telegram** 中:输入 token 和 chat ID,启用, **发送测试消息**。 ## AI 聊天与 Teams 命令 一个**自然语言命令接口** —— 可通过应用内的 **AI 聊天** (`/chat.html`) 和 **Microsoft Teams** 访问。通过它,可以执行以下 消息命令: - **Blocklist:** 设置 IP / 域名 / FQDN / URL ("block 1.2.3.4", "block boese.example") - **隔离端点** ("isolate PC-12345") - **查询隔离区** ("show the quarantine") - 针对IP/域名的 **OSINT** ("OSINT for 8.8.8.8") — 低成本提供商;Shodan 仍然 仅限按钮使用 - **统计报告** ("statistics report for the last 7 days") 意图检测首先通过**关键词解析器**运行(对明确的 命令立即响应),对于不明确的表述,则回退到 **LLM agent** —— 因此即使没有 agent,核心命令也能工作。 **与 LLM 自由聊天:** 任何未被识别为命令的内容,都会由 **安全分析师角色** (LLM) 回答 —— 分类威胁、解释 CVE、 评估指标、解释日志。适用于**所有三个 渠道**(AI 聊天、Teams、Telegram)。该角色的系统提示词 可在 **Admin → AI Analyst — Persona** 中编辑(带有 "Load default")。需要 启用 agent(LLM endpoint)。 **设置 Microsoft Teams** (Admin → Microsoft Teams): 1. 在团队中 → **… → Manage → Outgoing Webhooks → Create**。 2. 回调 URL:`https:///api/teams/command`(必须可以通过 HTTPS 访问 Warroom)。 3. 将 Teams 生成的 **HMAC 密钥** 存储在管理区域中 —— 每个 Teams 请求都会使用它进行签名验证。 4. 在团队中输入 `@Botname `。 ## Shodan 主机情报 (可选) 提供每个 IP 的**开放端口**和**已知 CVE**。这些内容会长期存储在 `shodan_hosts` 中,并作为可选的地图图层显示 (标记按 CVE 数量着色,弹窗包含端口 + CVE 链接)。需要 **Shodan API 密钥** (Admin → OSINT)。 **Shodan 额度很稀缺 —— 这就是为什么永远不会自动查询 Shodan 的原因:** - **人工:** 仅通过 OSINT 面板中的 **"🛰️ Query Shodan"** 按钮 (`POST /api/osint/shodan/{ip}`)。常规 OSINT 面板**不会**触发 Shodan 查询。 - **自动:** 基于规则的 agent 循环只有在 廉价的提供商已经将该 IP 分类为**明确的恶意**时 (AbuseIPDB ≥ 阈值 / VirusTotal ≥ 3 / GreyNoise = 恶意),才会查询 Shodan。可通过 *Shodan: auto-query on malicious IP* + *阈值* (Admin → OSINT) 进行控制; 将其关闭 ⇒ Shodan 变为纯手动。 您可以在**攻击地图图例**中的 "LAYER → Shodan Hosts" 下找到该图层(在 OSIRIS 仪表盘中作为单独的图层)。 ## 安全与加固 Warroom 旨在作为**位于 VPN/防火墙后的内部工具**。在 使用真实数据之前,请务必注意: - **设置 `WARROOM_API_KEY`。** 如果没有它,后端将在*开放模式*下运行 —— 任何 具有网络访问权限的人都可以操作仪表盘、封锁/解封 IP 并 隔离端点。这里**没有用户登录**;API 密钥是 唯一的访问控制。 - **`.env` 包含明文密钥**(数据库密码、Sophos 密钥、API 密钥)。 该文件在 `.gitignore` 中,**绝对不能**被提交。在 数据库 (`app_settings`) 中,密钥也是未加密存储的 → 请保护好数据库访问权限。 - **Grafana** 预设为 `admin/admin` 并允许**匿名 查看者访问**(无需登录即可看到所有日志/地图)。如果不希望如此,请更改密码并 设置 `GF_AUTH_ANONYMOUS_ENABLED=false`。 - **开箱即用不支持 HTTPS** —— nginx 监听 80 端口(映射到 8448)。 对于生产环境,请在前面放置 TLS 反向代理。 - **暴露的端口**(5514、2055、3030、5051、5540、8448)应仅在 受信任的网络中暴露。**RedisInsight (5540)** 运行时没有身份验证,并 允许对缓存进行完全的读/写访问,**pgAdmin (5051)** 需要 登录(`PGADMIN_EMAIL`/`PGADMIN_PASSWORD`),但授予完整的数据库访问权限 → 请将两者都保护在防火墙/代理之后,并更改默认密码。 - **M365/Telegram 密钥**(客户端密钥、bot token)与所有其他密钥一样, 未加密存储在 `app_settings` 中。Entra 应用应仅具有最低限度的 必需 Graph 权限。 包括改进路线图在内的详细评估位于 [`docs/REVIEW.md`](docs/REVIEW.md)。 ## 技术栈与服务 | 组件 | 技术 | |------------|------| | Backend | FastAPI 0.115, SQLAlchemy 2 async, APScheduler | | Database | PostgreSQL 16 | | Cache | Redis 7 | | Frontend | 原生 JS + Nginx(无构建步骤) | | Syslog | 自定义 Python 接收器 (UDP/TCP 5514) | | NetFlow | 自定义 Python 收集器 (UDP 2055) | | GeoIP | MaxMind GeoLite2 (后备: ip-api.com) | | Dashboards | Grafana 11 | | Redis GUI | RedisInsight (缓存检查) | | DB GUI | pgAdmin 4 (PostgreSQL 管理) | | Cloud APIs | Sophos Central/Email, Microsoft 365 (Management Activity + Graph), Telegram | | 容器 | 端口 (宿主机) | 描述 | |-----------|-------------|--------------| | `frontend` | `8448` | Nginx,静态文件 + 反向代理 | | `backend` | (内部 8000) | FastAPI,REST + IOC 源 | | `syslog` | `5514/udp+tcp` | Sophos Firewall syslog 接收器 | | `netflow` | `2055/udp` | NetFlow v5/v9/IPFIX 收集器 | | `postgres` | (内部 5432) | 数据持久化 | | `redis` | (内部 6379) | 缓存(摘要、OSINT 查询) | | `redisinsight` | `5540` | RedisInsight — Redis 图形界面(预配置缓存) | | `pgadmin` | `5051` | pgAdmin 4 — PostgreSQL 图形界面(预配置 "Warroom DB" 服务器) | | `grafana` | `3030` | 仪表盘 | ### 数据流 1. **Sophos Central API** → `collector.py`(默认每 300 秒) → 数据库 2. **Sophos Firewall syslog** → `syslog` 服务 → 数据库 (`firewall_logs`) 3. **NetFlow** → `netflow` 服务 → 数据库 (`netflow_buckets`) 4. **Microsoft 365 Activity API** → `o365_client.py` → 数据库 (`o365_audit_logs`) 5. **仪表盘** → 后端从数据库读取 → 前端渲染 6. **封锁操作 (UI/agent/Telegram)** → `blocked_ips` / `_domains` / `_urls` 7. **防火墙拉取** `/ioc_*` → 后端实时读取表 8. **可选:Entra 同步** → 黑名单 → Named Location + Conditional Access 策略 ## 故障排除 | 症状 | 原因 / 解决方案 | |---------|------------------| | 仪表盘为空,没有告警 | Sophos 凭据缺失/错误 → `docker compose logs backend`。如果没有 Sophos,则只有 syslog/NetFlow/blocklist 会有数据。 | | 获取源时出现 `401 invalid or missing X-API-Key` | 防火墙未发送 `X-API-Key` 请求头或发送错误。 | | 地图未显示位置 | 缺少 GeoIP 数据库并且 ip-api.com 受到速率限制 → 将 mmdb 文件放入 `./geoip/`。 | | Syslog/NetFlow 未到达 | 宿主机上的端口 5514/2055 是否打开?防火墙是否发送到了正确的 IP? | | Postgres 无法启动 | `POSTGRES_PASSWORD` ≠ `DATABASE_URL` 中的密码。两者必须相同。 | | `.env` 中的更改无效 | `.env` 值仅用作初始值。请通过 `/admin.html` 应用运行中的更改,或者使用 `docker compose up -d` 重新应用。 | | M365 页面为空 / "not configured" | Admin → Microsoft 365 下缺少 Entra 应用凭据,或者未授予 `ActivityFeed.Read` 同意。审计事件也会有延迟到达的情况。 | | Entra 同步 `403 not licensed` | 租户没有 Entra ID P1(包含在 M365 E3/E5 中) —— 向用户分配许可证。没有 P1 则无法创建/激活 CA 策略。| Entra 策略无法激活 | 未设置紧急访问账号(微软的 "BlockEveryonePolicy" 保护)或 UPN 无法解析 → 输入对象 ID。 | | Telegram 审批未到达 | 未启用机器人、`chat_id` 错误,或者从未给机器人发过消息/不在群组中。通过 "send test message" 进行检查。 | ## 许可证 私人项目 —— 不提供官方支持。 ## 商标 Sophos、Sophos Central、Sophos Firewall 和 Sophos Intelix 是 Sophos Ltd. 的注册 商标。本项目与 Sophos 无关。
标签:HTTP/HTTPS抓包, IOC, Sophos, 威胁情报, 安全运营, 开发者工具, 态势感知, 扫描框架, 搜索引擎查询, 数据可视化, 测试用例, 版权保护, 请求拦截, 逆向工具