arusso-aboutcloud/crosswise
GitHub: arusso-aboutcloud/crosswise
一款用于检测 Microsoft Entra ID 和 Azure RBAC 中危险权限组合的只读 CLI 工具,帮助发现单独看似无害但组合后可导致权限提升或租户接管的配置风险。
Stars: 0 | Forks: 0

# Crosswise
[](https://github.com/arusso-aboutcloud/crosswise/actions/workflows/trivy.yml)
根据 [Business Source License 1.1](LICENSE) 授权。个人、开发、测试和内部使用免费。商业托管或转售需要单独的许可证。该许可将于 2030-05-07 转换为 Apache 2.0。完整条款请参见 [LICENSE](LICENSE)。
## 什么是 Crosswise?
Crosswise 是一款 CLI 工具,用于检测 Microsoft Entra ID 和 Azure RBAC 中的危险权限组合。危险组合是指由单一身份同时持有的一组权限,它能够实现该集合中任何单个权限都无法单独实现的结果——权限提升、凭据窃取、租户接管或持久化。Crosswise 会扫描租户和订阅中的角色与权限分配,将其与已知危险模式库进行比对评估,并生成调查结果报告。它完全是只读的:不会有任何数据离开您的计算机。
## 为什么需要这个工具
Microsoft Entra ID 和 Azure RBAC 是庞大且分层的权限系统。单独来看,各项权限似乎并无危害。Global Reader 角色听起来很安全。Application Administrator 角色听起来只是用于管理的。但在 Azure 租户根作用域内的 Reader 角色,实际上构成了针对整个 Azure 资产(包括每个订阅、每个资源组、每个资源)的有效侦察平台。单独的 Application Administrator 角色——如果分配给合适的服务主体——能够通过应用凭据注入实现权限提升,而无需接触任何特权目录角色。现有的工具只能报告某个主体持有何种角色;它们无法评估这些角色组合在一起时意味着什么。
Crosswise 正是为了检测此类组合而构建的。规则 CW-003 标记了 Privileged Authentication Administrator 角色,它听起来像是 Authentication Administrator 的受限版本,但实际上在功能上等同于 Global Administrator:它可以重置任何用户的密码,包括持有 Global Admin 角色的用户,从而实现悄无声息的租户接管。规则 CW-004 标记了分配给服务主体的 Application Administrator 角色,该服务主体对敏感的 Microsoft Graph 权限拥有管理员同意——这是一条通过凭据注入实现权限提升的路径,完全绕过了目录角色检查。这些正是 Crosswise 致力于发现的模式。
## 它能检测什么
Crosswise 评估四个类别的发现:
- **Entra 层面危险配置** —— Microsoft Entra ID 内的目录角色、应用注册权限和服务主体分配
- **Azure RBAC 危险配置** —— 管理组、订阅和资源作用域的角色分配
- **跨层面组合** —— 由 Entra 和 Azure RBAC 之间交互产生的风险,单独看任何一个层面都无法暴露这些风险
- **AI 代理特定风险** —— 在支持 AI 工作负载的服务主体上具有 Application Administrator 及等效权限的情况,此时凭据注入可能会重定向或破坏 AI 代理行为
## 身份验证与安全模型
Crosswise 使用 Microsoft 的设备代码流(device code flow)。当您运行 `crosswise scan` 时,终端会打印一个一次性代码和一个简短的 URL。您在任何浏览器中打开该 URL,并使用常规的 Entra 凭据进行身份验证。该身份验证过程直接在您与 Microsoft 之间进行——Crosswise 对此完全不可见,也绝不会看到您的密码或 MFA 响应。Crosswise 仅接收 Microsoft 颁发的访问令牌,该令牌在命令执行期间保存在内存中,并在退出时被丢弃。
Crosswise 请求三个 OAuth 作用域:`RoleManagement.Read.Directory`、`Directory.Read.All` 和 ARM `user_impersonation`。这三者都是只读的。`RoleManagement.Read.Directory` 读取角色定义和分配。`Directory.Read.All` 读取这些分配中引用的身份——用户、服务主体、组。ARM `user_impersonation` 使用您现有的 Azure RBAC 权限读取 Azure 资源层次结构和 RBAC 角色分配;不会授予任何额外的提升访问权限。Crosswise 无法修改角色分配、创建或删除用户、更改租户配置,也无法读取邮箱、文件或任何 Microsoft 365 内容。
无遥测。无回传数据。快照文件和报告均保留在您的本地计算机上。HTML 报告是自包含的:无外部 JavaScript,无 CDN 资源,无外部字体。报告文件可在无网络访问的浏览器中查看,适用于隔离网络(air-gapped)环境。
完整详情请参见[架构与安全](docs/ARCHITECTURE.md)。
## 两种版本
Crosswise 提供两种互补的形式,它们共享相同的规则引擎:
- **CLI**(v0.1.1,现已可用)—— 用于完整 Microsoft Entra + Azure RBAC 扫描的 Go 二进制文件。可通过 Homebrew、Scoop、Linux curl 或 Docker 安装 —— 详见 [docs/INSTALL.md](docs/INSTALL.md)。
- **浏览器版 Crosswise**(v0.2,设计中)—— 位于 `crosswise.aboutcloud.io`(或自托管)的基于浏览器的 UI,面向偏好引导式 Web 界面的用户。相同的规则引擎,编译为 WebAssembly。v1 版本范围限定在 Entra。详见 [docs/browser-crosswise-design.md](docs/browser-crosswise-design.md)。
两种版本都使用相同的设置模式(您租户中的自有 Entra 应用注册),并以相同的格式生成调查结果。Crosswise 项目不会为这两种版本运营任何用户数据基础设施。
从 v0.1.3 起,两种版本都包含一个**始终保持最新的 Microsoft 角色目录**,该目录通过自我修复管道每晚刷新——调查结果会内联显示权威角色上下文,无需手动查阅文档。详见 [`docs/role-enrichment-design.md`](docs/role-enrichment-design.md)。
## 快速入门
**快速设置(约 30 秒,无需订阅):**
```
# Linux/macOS — 审查并运行
curl -fsSL https://raw.githubusercontent.com/arusso-aboutcloud/crosswise/main/deploy/scripts/create-app.sh -o create-app.sh
bash create-app.sh
```
```
# Windows PowerShell
Invoke-WebRequest https://raw.githubusercontent.com/arusso-aboutcloud/crosswise/main/deploy/scripts/create-app.ps1 -OutFile create-app.ps1
.\create-app.ps1
```
若要使用 Bicep / 声明式 IaC,请参见 [`deploy/bicep/`](deploy/bicep/)。有关完整的手动演练或替代设置选项,请参见 [docs/INSTALL.md](docs/INSTALL.md)。
完成应用注册后,安装 Crosswise 二进制文件(Homebrew / Scoop / Linux curl / Docker)并运行您的首次扫描——完整设置说明详见 [docs/INSTALL.md](docs/INSTALL.md)。
## 文档
- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) —— 安全模型、身份验证流程、数据流和威胁模型
- [docs/INSTALL.md](docs/INSTALL.md) —— 应用注册、二进制文件安装、首次扫描和故障排除
- [docs/scan-command.md](docs/scan-command.md) —— 完整的扫描命令参考、标志、输出格式和退出码
- [docs/setup.md](docs/setup.md) —— Entra 应用注册演练和权限模型
- [docs/rule-schema.md](docs/rule-schema.md) —— 规则定义模式参考
- [docs/rule-authoring-guide.md](docs/rule-authoring-guide.md) —— 如何编写和验证自定义规则
- [docs/ai-classification.md](docs/ai-classification.md) —— Crosswise 如何识别 AI 代理服务主体
## 状态
Crosswise 处于早期开发阶段。当前的重点是 v0.1 版本:一个涵盖 Entra 和 Azure RBAC 危险组合的稳定规则库,已针对合成和真实租户数据进行验证,并提供适用于 Windows、macOS 和 Linux 的预构建二进制文件。
## 信息来源
所有检测规则均完全源自 Microsoft 官方文档和 API:
- [Microsoft Learn](https://learn.microsoft.com) —— 官方产品文档
- [Microsoft Graph API](https://learn.microsoft.com/en-us/graph/overview)
- [Azure Resource Manager API](https://learn.microsoft.com/en-us/azure/azure-resource-manager/)
- [Microsoft Security Response Center (MSRC)](https://www.microsoft.com/en-us/msrc)
规则定义未使用任何第三方博客、社区 Wiki 或非 Microsoft 仓库作为来源。
## 安全态势
Crosswise 在每次推送到 `main` 分支以及每周的定时任务中,使用 [Trivy](https://github.com/aquasecurity/trivy) 扫描其自身的容器镜像和 Go 模块依赖项。如果发现任何严重级别漏洞,构建将会失败。完整的 SARIF 结果会发布到 [GitHub Security 标签页](https://github.com/arusso-aboutcloud/crosswise/security)。
**上次扫描:** 2026-05-12 14:43 UTC · [查看工作流](https://github.com/arusso-aboutcloud/crosswise/actions/runs/25741908956)
| 严重性 | 镜像 | Go 模块 | 总计 |
|----------|-------|-----------|-------|
| 🔴 严重 | 0 | 0 | 0 |
| 🟠 高 | 0 | 0 | 0 |
| 🟡 中 | 0 | 0 | 0 |
| 🟢 低 | 0 | 0 | 0 |
[aboutcloud.io](https://aboutcloud.io) 平台的一部分。标签:AI工具, Azure, Azure RBAC, EVTX分析, IAM, Microsoft Entra ID, 反取证, 安全评估, 开源安全工具, 日志审计, 有毒权限组合, 本地执行, 权限安全, 权限扫描, 特权升级, 请求拦截, 读取模式, 越权检测, 身份与访问管理, 逆向工程平台, 防御分析