AmanSK5/shadow-ai-guard

GitHub: AmanSK5/shadow-ai-guard

一个跨六个层面检测企业内未授权 AI 工具使用情况的自部署影子 AI 监控与治理平台。

Stars: 0 | Forks: 0

# shadow-ai-guard Shadow AI 检测覆盖其出现的所有层面:browser、CLI、IDE、desktop、network 和 cloud。专为在你现有的基础设施上运行而构建,几乎零成本。 ## 为什么会有这个项目 没有任何一款单一的商业工具能够监控到 AI 工具出现的所有位置。CASB 和 DLP 产品只关注 browser。Endpoint 工具只监控已安装的应用程序。Cloud 访问工具只监控 OAuth 授权。它们都不会读取 `~/.claude.json` 来告诉你你的开发者登录了哪个 AI CLI 账户,而账户才是最关键的部分:在个人账户上使用已批准的工具属于不受管束的数据流、隐形的开支,同时也是离职管理上的漏洞。 本项目通过一个统一的发现 schema、一个已知 AI 工具的 registry 以及一个仪表板,实现了跨六个层面的检测。要将新的 AI 工具纳入检测,只需向一个 YAML 文件提交合并请求,而无需在每个 endpoint 上去修改脚本。 ## 五分钟试用 https://github.com/user-attachments/assets/f114e781-7053-4000-ba82-2b2d0fcc3e85 你不需要 Kubernetes cluster、MDM 或任何 cloud 登录就能看到它的作用。这里有一个 demo,它使用模拟数据运行真实的 receiver 和真实的 Grafana 仪表板,所有内容都在 Docker 中运行: ``` git clone https://github.com/AmanSK5/shadow-ai-guard.git cd shadow-ai-guard/demo docker compose up ``` 然后打开 **http://localhost:3000** 并查看 **AI Guard - Shadow AI Visibility** 仪表板。它会启动 Loki、receiver(基于本仓库中真实的 Dockerfile 构建),以及一个小型 seeder,用于发布跨各个层面和 OS 的示例发现结果。这样你看到的就会是一个已经填满数据的仪表板,而不是一个空仪表板:谁在运行什么、个人账户与工作账户的对比、各个工具的明细,以及人们配置好的 MCP 集成。 该 demo 使用 `example.com` / `example.co.uk` 作为工作域名,并使用了虚构的设备和用户名。它只运行 Loki,因此省略了一些 Prometheus 磁贴。这不是真实部署所能呈现的完整画面,但足以让你在不进行任何设置的情况下了解其工作原理。仪表板本身的标题栏说明了不同之处,更多细节请参阅 [`demo/README.md`](demo/README.md)。 当你想要真正运行它时,请从 [docs/getting-started.md](docs/getting-started.md) 开始。 ## 文档 所有内容都位于 `docs/` 和各个组件文件夹中。请从这里开始阅读,不要直接深入子文件夹。 **让它运行起来** - [入门指南](docs/getting-started.md) - 从克隆到在仪表板上看到第一条发现结果,这是最小可行性部署 - [架构](docs/architecture.md) - 心智模型:finding schema,以及各组件为何如此设计 **部署各个层面** - [macOS endpoint collector](endpoint/macos/README.md) - 通过 Jamf - [Windows endpoint collector](endpoint/windows/README.md) - 通过 Intune - [Linux endpoint collector](endpoint/linux/README.md) - 通过任何 RMM、cron 或配置管理工具 - [Browser 扩展](extension/README.md) - browser 层面 - [Cloud 和 network 扫描器](scanner/README.md) - Entra、Exchange、Intune、 Jamf、SentinelOne 以及 MCP 安全扫描器 **扩展与运维** - [编写扫描器](docs/writing-a-scanner.md) - 通过输出 finding schema 来添加新的检测源 - [安全模型](SECURITY.md) - 坦率陈述的信任模型 - [隐私和 DPIA 指南](docs/deployment-privacy.md) - 部署前请阅读; 这属于工作场所监控,通常需要进行 DPIA ## 工作原理 ``` browser extension ─┐ macOS collector ──┤ Windows collector ─┼──► receiver ──► logs (Loki) ──► Grafana dashboard Linux collector ──┤ │ cloud scanners ───┤ └──────► Alertmanager ──► alerts (personal accounts) network scanner ───┘ ▲ registry (YAML, MR-reviewed) ── served to collectors at runtime ``` - **receiver** - FastAPI 服务。接收发现结果,将其记录为结构化的 JSON,针对个人账户触发警报,并向 collector 提供 registry。 - **registry** - 判定何为 AI 工具的真理之源:包括域名、扩展 ID、配置文件路径、批准状态。在 CI 中进行 schema 验证。Collector 会在 runtime 从 receiver 获取它们的标识符列表,因此添加新工具无需更改 endpoint。 - **scanner** - cloud 和 fleet 扫描器:Entra ID 登录记录、Exchange 注册邮件证据、Intune 和 Jamf 软件清单、SentinelOne DNS 遥测数据(用于包括本地进程桥在内的网络级检测)。每个模块都是可选的;请运行你的环境支持的那些。 - **endpoint** - 用于 macOS(Jamf、bash)、Windows(Intune、PowerShell)和 Linux(任何 RMM、cron 或配置管理)的 collector。它们会读取 AI 工具的配置文件,以报告每个工具登录的账户。这是任何基于 API 的产品都不具备的数据。 - **discovery** - 每周任务,从 DNS 遥测数据中对无法识别的疑似 AI 域名进行分类,并以合并请求的形式提出 registry 添加建议。每一项更改都需要由人工批准。 - **dashboards** - 基于 Loki 的 Grafana 仪表板。在仪表板变量中设置你的企业域名,个人账户就会亮起红灯。 discovery 任务目前会开启 GitLab 合并请求;GitHub backend 已在路线图上。 ## Finding schema 每个来源都使用相同的结构。任何输出该结构的新 scanner 或 collector 都能与下游的所有组件协同工作: ``` { "tool": "claude-code", "surface": "cli", "os": "macos", "account_domain": "gmail.com", "device": "SERIAL123", "user": "aman.test", "evidence": "~/.claude.json", "severity": "warn", "reported_at": "2026-01-01T09:00:00Z", "source": "collector-macos" } ``` 当账户域名不属于你的企业域名时,`severity` 为 `warn`,否则为 `info`。`user` 字段包含账户名,以便针对正确的人员跟进发现结果;关于其具体何时填充,请参阅 [隐私](docs/deployment-privacy.md)。 ## 你需要准备什么 - 一个用于运行 receiver 和 scanner CronJob 的 Kubernetes cluster。任何符合规范的都可以;核心部分没有任何特定于 cloud 的内容。 - 一个获取容器 stdout 的日志 pipeline。提供的仪表板默认使用 Loki,但 receiver 的唯一输出格式是 JSON lines。 - 用于显示仪表板的 Grafana,用于报警的 Alertmanager(可选)。 - 你关注的每个层面至少需要一个检测源。目前支持:Microsoft Graph(Entra、Exchange、Intune)、Jamf Pro、SentinelOne、Chrome/Edge 托管扩展策略,以及用于 macOS、Windows 和 Linux 的 endpoint collector。 - 用于你启用的任何来源的 Secrets。本地开发使用 `.env`(参见 `scanner/README.md`);部署后的 scanner 会从 Kubernetes Secrets 或你的 secret store 中读取数据。 CI 会将预构建的镜像发布到 GHCR。Helm chart 正在开发中;在此之前,receiver 是一个 Deployment,并在 `/etc/ai-guard` 处挂载了 registry ConfigMap,而 scanner 则是 CronJob。有关详细信息,请参阅各组件的 README。 ## 部署顺序 1. 部署 receiver,创建其 bearer token Secret,并将其暴露在 endpoint 可以访问的 ingress 上。 2. 发布 registry:`python registry/build.py`,然后将 `registry/dist/registry.json` 和 `registry/dist/collector.json` 加载到 receiver 挂载的 ConfigMap 中。 3. 启用你的环境支持的 scanner 并对其进行调度。 4. 通过你的 MDM 或 RMM 推出 endpoint collector。首先在一台机器上进行试点;`endpoint/*/README.md` 中的部署说明正是根据这种操作实践编写的。 5. 导入仪表板,设置企业域名变量。 刚接触这里?[docs/getting-started.md](docs/getting-started.md) 逐步讲解了如何进行最小化部署。 ## 状态和已知限制 这是一个 alpha 版本,是特意提前发布的。它目前在一个环境中投入了生产运行,粗糙的地方都被明确标记了出来,而不是被隐藏。目前的已知限制包括: - **Registry 一致性。** 并非每个层面都能检测到所有的 registry 条目。某些工具被 endpoint collector 覆盖,但未被 scanner 覆盖,反之亦然,这取决于各个层面能看到哪些标识符。缩小这一差距是 ongoing 的 registry 工作,而不是代码变更。 - **Scanner 准确性。** Cloud 和 network scanner 会根据登录应用程序名称和 DNS pattern 等标识符进行匹配,其中一些边界仍在调整中。预计偶尔会出现漏报或误报;请将发现结果视为需要跟进的线索,而不是最终定论。 - **交付途径。** Collector 已通过本项目背后实际运行的交付机制(Jamf、Intune 以及用于 Linux 的 RMM)进行了测试。其他已记录的途径(例如 Ansible 或普通的 cron)虽然按预期编写,但在实际场景中的锻炼较少。请先在一台机器上进行试点。 如果你遇到了上述问题或未在此列表中的问题,请提交一个包含发现 JSON 和你期望结果的问题,这将会非常有帮助。 ## 治理说明 Registry 在发布时,将每个工具都设置为 `approved: false`。是否批准是由你的组织决定的,而不是本项目的默认设置。discovery 任务只提出添加建议;它从不执行合并。如果你在 ISO 42001 或类似标准下运营,registry 可以兼作你正在使用的 AI 系统的维护清单,而仪表板则可作为其证据。 在部署之前,请阅读 docs/deployment-privacy.md:在大多数司法管辖区,这属于工作场所监控,通常需要进行 DPIA。 ## 安全模型 请参阅 SECURITY.md。简短版本:报告源共享一个 bearer token,进行速率限制的公开数据获取,由于发现结果包含用户名和设备标识符,因此请将你的日志存储视为敏感数据,并且 endpoint collector 是通过你的 MDM 或 RMM 以 root/SYSTEM 权限运行的,因此请像审查你通过这些途径推送的任何其他内容一样审查它们。 ## 许可证 Apache-2.0。
标签:AI合规, Docker, Grafana, Loki, Shadow AI检测, 子域名突变, 安全可见性, 安全防御评估, 应用安全, 请求拦截, 逆向工具