项目已归档,原因是开发优先级发生变化,且我将社区工作重心转移到其他领域(PoC、其他工具和演示/展示),因此该项目已设为只读。
Azure AD 条件访问差距分析器是一种解决方案,用于扫描复杂的 Azure Active Directory 条件访问策略设置中可能存在的差距。
如果您是条件访问的新手,我们建议您阅读以下 Microsoft 文章:https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/overview
运行此工具的一行命令:(如果您只打算阅读这一部分,并且已完成安装)
node ./ca/main.js --mapping --skipObjectId=259fcf40-ff7c-4625-9b78-cd11793f161f --clearPolicyCache --clearTokenCache --clearMappingCache
完成先决条件并阅读本自述文件后,请考虑以下事项:
reportOnly 策略不被视为终止策略:
阅读:scope
每次扫描都使用 --clearPolicyCache 运行
如果对与策略相关的组/用户进行了更改,每次扫描都使用 --clearMappingCache 运行
仅针对用户和应用的策略在范围内(这是最常见的范围,但例如,这意味着安全注册策略不会被评估)
阅读:scope
从测试环境开始,这样您可以积累一些经验,并对工具机制有所预期
如果您有已知被策略排除的组或用户,请使用 --skipObjectIds 定义要从扫描中排除的对象,除非您想确认这些排除项
如果您在多个环境中运行扫描,请确保:在运行新扫描之前清除登录信息和缓存
阅读:参数
az account clear 继续之前清除 AZ CLI 缓存,然后使用 az login 对您计划扫描的环境重新执行登录阅读 其他重要说明
发布说明:0.7.1
- 更新了依赖项和报告文本输出
发布说明:0.7
- 现在默认使用 beta 端点,--expand 选项现在会将结果扩展到报告中,无论是否使用 --allTerminations
发布说明:0.6.9
- 使用 --expand=9c06d103-f5b0-4404-bb25-aec4636912cd,47087cd3-64e9-470b-980a-5662f498e016 并展开 10 个组成员以进行单独检查。
发布说明:0.6.8
- 当您在 GUI 中使用任何来宾条件更新策略时,该策略在更新后将只能从 beta 端点获取(预览期间)。
- 此更新为因该行为而转移到 beta 端点的策略带来了规范化。
- 只要包含以下条件 "internalGuest,b2bCollaborationGuest,b2bCollaborationMember" 且策略中未排除任何租户,该策略将像之前的来宾条件一样被评估。为了评估已转移的策略,
- 在运行 CaOptics 时使用 '--allowPreviewPolicies' 以考虑此行为
发布说明:0.6.6-7 beta
- 允许通过参数 --altLogin --altGraph 为登录和 graph 使用不同的登录端点
- 允许对策略使用自定义过滤(仅当策略不符合预期架构时才建议使用)
发布说明:0.6.5 beta
- 当报告中也添加了大量排列时,为报告增加了计数器(默认仅添加未终止的排列)
- 小代码修复,将 <var> 改为 <let>
- 报告文件名现在包含日、月、年和 tenantId,例如 report_day_4_month_9_year_2022-tenant_48f55450-183a-45d6-a9ce-68f3cbc68947.csv
发布说明:0.6.4 beta
- 每次调用获取更多组(减少批处理)
- 修复了通常使用 for await 循环时检测到的竞态条件
- 在分隔符之间用 "" 将值括起来(CSV)
发布说明:0.6.3 beta
- 对映射对象的处理方式进行了优化。
- 映射对象会被缓存。您可以通过使用参数 'clearMappingCache' 重新创建对象映射
- 查找键将始终首先从 'user/group/role' 条件开始
- 增加了使用随机 UUID 填充用户映射以测试性能影响的可能性(这仅是调试选项,并不是非 beta 版本中真正会有的功能)
发布说明:0.6.2 beta
- 将缓存参数拆分为单独的函数 -> (clearTokenCache 和 ClearPolicyCache)
- 增加了使用参数 --aggressive 对排列运行预优化算法的可能性(高内存消耗,仅用于 A/B 测试)
- 合并已完成。
发布说明:0.6.1 beta
- 添加了 CSV 报告的基本版本
- 简化了排列生成,以确保生成必要的排列,并且某些排列会在查找时提前终止
发布说明:0.6 beta(首个非“静默”发布)
- 将应用显示名称添加到 MD 报告中。将对象类型添加到用户类型中
发布说明:0.5.2,0.5.1,0.5 beta(有关发布说明,请参阅早期分支)

跨策略检测示例
❌ 任何值为 0 的排列意味着对于该特定条件组合,没有策略被终止。
| 策略 | 终止数 | 查找 |
|---|---|---|
| All | 0 | Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:GuestsOrExternalUsers |
| All | 0 | Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:Jane Doe |
| All | 0 | Applications:88cc92be-d474-4d95-a57d-7b3ef701f510 -> Locations:finland -> users:John Doe |
✅ 在 docs/example.md 中阅读检测的详细描述
排列由 getPol2.js 生成
(可视化由 https://jsoncrack.com/ 提供)
运行时
如果您不希望使用 fire & forget 版本```bash nvm use 16 git clone https://github.com/jsa2/caOptics; cd caOptics; npm install;
**适用于 Azure Cloud Shell (Bash) 的即发即弃运行设置**```bash
curl -o- https://raw.githubusercontent.com/jsa2/caOptics/main/init.sh | bash;
# Force reload of NVM
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# This loads nvm
未提供输入内容,请发送需要翻译的文本。```bash cd caOptics
az login
**Azure AD 相关**
- 已启用 Azure AD Security Reader 角色
- 如果安装了 Azure CLI 且已有 CLI 会话,此工具将使用该[会话](https://github.com/jsa2/caoptics/blob/main/tokenHandler/getCode.js)。
- 如果你没有安装 Azure CLI,则仅使用 Azure CLI clientID 通过 Node.js http 客户端发起的 device_code 流来获取令牌
>
**以下为所使用的开源软件包**
为减少代码量,我们使用以下依赖项来实现操作和美观(向这些优秀软件包的维护者致敬。每个软件包的许可证链接均已在许可证列中提供)
软件包 | 美观|操作|许可证
-|-|-|-
[axios](https://www.npmjs.com/package/axios)||✅ | [MIT](https://github.com/axios/axios/blob/v1.x/LICENSE)
[yargs](https://www.npmjs.com/package/yargs)||✅ | [MIT](https://github.com/yargs/yargs/blob/main/LICENSE)
[jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken) | |✅|[MIT](https://github.com/auth0/node-jsonwebtoken/blob/master/LICENSE)
[chalk](https://www.npmjs.com/package/chalk)| ✅ | |[MIT](https://github.com/chalk/chalk/blob/main/license)
[js-beautify ](https://www.npmjs.com/package/js-beautify) | ✅ | |[MIT](https://github.com/beautify-web/js-beautify/blob/main/LICENSE)
**此工具工作需要哪些网络访问权限?**
1. 操作需要以下主机 ```sh
graph.microsoft.com
login.microsoftonline.com
如果你计划在网络受限环境中运行此工具,请先在允许访问软件包安装和 github.com 的环境中下载依赖。然后你可以将整个安装目录打包成 zip 传输到网络受限环境中。
以下是我在 Node.js 应用上运行任何第三方包时进行的典型跟踪。它显示了运行时被调用的 URL
