HarrierSecurity/HarrierOps-Azure
GitHub: HarrierSecurity/HarrierOps-Azure
一款面向 Azure 的攻击路径侦察 CLI 工具,聚焦身份关系与横向移动分析以辅助安全评估与威胁狩猎。
Stars: 1 | Forks: 0
# HarrierOps Azure
在信息过载淹没你之前,发现攻击路径、横向移动机会以及在 Azure 中的移动方式。
大多数 Azure 工具告诉你存在什么。
HarrierOps Azure 告诉你一个身份如何在那些资源之间移动。
大多数 Azure 工具倾倒权限。
HarrierOps Azure 优先突出显示哪些关系、横向移动和提升路径最重要。
附带的 CLI 二进制文件是 `ho-azure`。
## 为什么这很重要
你拥有:
- 一个 compromised user
- 服务主体访问权限
- 托管身份 foothold
- 部分订阅可见性
你需要快速回答:
- 我实际持有的是哪个身份?
- 它现在能控制什么?
- 它接下来可以横向移动到哪?
- 哪条路径最可能成为权限提升或更广 Azure 控制?
HarrierOps Azure 就是为这个工作流而构建的。
## 为什么与众不同
- 以攻击路径思维,而非以清单优先的报告
- 以横向移动为先的工作流,而非孤立命令输出
- 关注身份与权限关系,而不仅仅是原始角色列表
- 提供操作指引,指向值得调查的下一步路径
- 比单纯的 foothold 检查更全面:适用于移动、影响与后续访问
## 核心能力
- 显示当前活动的 Azure 身份、令牌上下文与作用域
- 暴露高影响 RBAC 与权限关系,这些关系会改变当前身份的能力
- 映射身份信任、服务主体所有权、联合凭证与跨租户边界
- 突出通过工作负载、托管身份、部署系统与承载密钥的配置所构成的横向移动路径
- 暴露提升机会与可能的下一步操作,而不是让你去整理原始 Azure 数据
## 安装
从源码构建:
```
go build -o ho-azure ./cmd/azurefox
```
如果你想在不先创建本地二进制文件的情况下运行:
```
go run ./cmd/azurefox help
```
## 操作员工作流
从你拥有的身份开始,然后向外推进以实现移动与影响。
典型流程:
- `whoami`:确认当前的 foothold、令牌上下文与订阅范围
- `permissions`:识别该身份已经拥有的控制权限
- `privesc`:暴露当前访问权限下的直接滥用或提升路径
- `role-trusts` 和 `cross-tenant`:查找身份控制转换与租户边界横向移动
- `tokens-credentials` 和 `chains`:跟踪令牌、密钥与部署线索,寻找下一个可用的路径
## 操作员结果
一次完整运行后,你应该知道:
- 哪个身份最重要
- 哪些访问是真实的,而不仅仅是可见的
- 最佳的横向移动机会在哪里
- 哪条攻击路径值得优先跟进
HarrierOps Azure 通过优先排序影响来减少噪音,而不仅仅是返回 Azure 对象。
## 使用场景
- 对 compromised user、服务主体或托管身份进行故障排查,并确定其能启用的 Azure 控制
- 评估服务主体或应用关系是否创建了横向移动或提升路径
- 从订阅或租户可见性向外推进,识别跨资源与跨租户的移动
## 运行
从当前 Azure 身份与最强可见控制路径开始:
```
ho-azure whoami
ho-azure permissions
```
## 当前支持的 Azure 命令
### 编排
| 分组命令 | 实时家族 |
| --- | --- |
| `chains`
分组路径视图,将最强的 Azure 横向移动故事置顶。 | `credential-path`
将暴露的密钥与令牌线索转化为最可能扩大访问的下游目标。
`deployment-path`
暴露最可能让攻击者变更 Azure 的构建、流水线与自动化路径。
`escalation-path`
突出显示从当前 foothold 到更强 Azure 控制的最清晰可见路径。
`compute-control`
查找已经可以生成身份支持访问并横向扩展到更广控制的工作负载。 | ### 平铺命令 | 分类 | 命令 | | --- | --- | | `core` | `inventory` | | `identity` | `whoami`, `rbac`, `principals`, `permissions`, `privesc`, `role-trusts`, `lighthouse`, `cross-tenant`, `auth-policies`, `managed-identities` | | `config` | `arm-deployments`, `env-vars` | | `secrets` | `keyvault`, `tokens-credentials` | | `resource` | `automation`, `devops`, `acr`, `api-mgmt`, `databases`, `resource-trusts` | | `storage` | `storage` | | `network` | `application-gateway`, `nics`, `dns`, `endpoints`, `network-effective`, `network-ports` | | `compute` | `workloads`, `app-services`, `functions`, `container-apps`, `container-instances`, `aks`, `vms`, `vmss`, `snapshots-disks` | ## 需要测试环境? 使用配套的 HarrierOps Azure 实验仓库进行实时验证,当你希望获得后端真实行为时。 本仓库中的静态提供者用于确定性本地检查与测试,**不能替代**真实的 Azure 支持实验环境。 ## CLI 调用 共享标志如 `--tenant`、`--subscription`、`--output`、`--outdir`、`--debug` 和 `--devops-organization` 在命令前后均可使用。 以下形式等价: ``` ho-azure dns --output json --outdir ./ho-azure-demo ho-azure --output json --outdir ./ho-azure-demo dns ``` 使用 `ho-azure --help` 或 `ho-azure help ` 获取命令特定帮助。
## 安装配置
HarrierOps Azure 默认构建实时 Azure 运行时路径,因此普通源码构建即可用于真实的 Azure 命令执行。
对于本地二进制文件:
```
go build -o ho-azure ./cmd/azurefox
```
对于直接从检出运行:
```
go run ./cmd/azurefox whoami
```
对于本地开发:
```
go test ./...
```
HarrierOps Azure 在 macOS、Linux 与 Windows 上均可运行。下面的命令示例使用可移植的相对路径如 `./ho-azure-demo`;shell 语法主要因环境变量导出与二进制调用而不同。
实时操作指引内建于 `ho-azure help` 与 `ho-azure help `。
- `go build -o ho-azure ./cmd/azurefox`
从本地检出构建标准操作二进制文件
- `go run ./cmd/azurefox ...`
直接从源码运行相同的实时 Azure 命令配置
- `go test ./...`
运行 Go 仓库的贡献者验证基线
## 认证优先级
1. Azure CLI 凭据
2. 环境凭据
### 支持的身份验证矩阵
| 路径 | 启动方式 | 当前支持 | 元数据 `auth_mode` |
| --- | --- | --- | --- |
| 通过 Azure CLI 的交互式用户 | `az login` | 支持 | `azure_cli` |
| 通过 Azure CLI 的服务主体 | `az login --service-principal ...` | 通过 Azure CLI 支持 | `azure_cli` |
| 通过 Azure CLI 的托管身份 | `az login --identity` | 通过 Azure CLI 支持 | `azure_cli` |
| 通过环境变量使用服务主体客户端密钥 | `AZURE_TENANT_ID` + `AZURE_CLIENT_ID` + `AZURE_CLIENT_SECRET` | 支持 | `environment` |
| 通过环境变量使用服务主体证书 | `AZURE_TENANT_ID` + `AZURE_CLIENT_ID` + `AZURE_CLIENT_CERTIFICATE_PATH` | 支持 | `environment` |
| Azure CLI 失败后的环境回退 | 当 CLI 认证不可用但环境认证成功时自动回退 | 支持 | `environment_fallback` |
HarrierOps Azure 不会启动自己的浏览器或托管身份登录流程。它依赖 Azure Identity:
- `AzureCliCredential` 用于活跃的 Azure CLI 登录状态
- `EnvironmentCredential` 用于支持的服务主体环境变量
### 通过 Azure CLI 的交互式用户
如果你希望使用基于 Web 的认证,请先在外部的 `az login` 运行,然后运行
`ho-azure`。
Azure CLI 示例:
```
az login
az account set --subscription
ho-azure inventory --subscription
```
### 通过 Azure CLI 的服务主体
这适用于希望 Azure CLI 保持活跃登录状态的无人值守自动化。
使用客户端密钥:
```
az login --service-principal \
--username \
--password \
--tenant
az account set --subscription
ho-azure whoami --subscription
```
使用证书:
```
az login --service-principal \
--username \
--certificate /path/to/certificate.pem \
--tenant
az account set --subscription
ho-azure whoami --subscription
```
### 通过环境变量使用服务主体客户端密钥
如果你不想使用 Azure CLI 登录状态,设置服务主体环境变量并
传递用于目标租户或订阅的 CLI 标志。
环境客户端密钥示例:
```
# macOS/Linux
export AZURE_TENANT_ID=
export AZURE_CLIENT_ID=
export AZURE_CLIENT_SECRET=
export AZUREFOX_DEVOPS_ORG= # only needed for the devops command
ho-azure whoami --tenant --subscription
```
```
# Windows PowerShell
$env:AZURE_TENANT_ID=""
$env:AZURE_CLIENT_ID=""
$env:AZURE_CLIENT_SECRET=""
$env:AZUREFOX_DEVOPS_ORG="" # only needed for the devops command
ho-azure whoami --tenant --subscription
```
### 通过环境变量使用服务主体证书
```
# macOS/Linux
export AZURE_TENANT_ID=
export AZURE_CLIENT_ID=
export AZURE_CLIENT_CERTIFICATE_PATH=/path/to/certificate.pem
export AZURE_CLIENT_CERTIFICATE_PASSWORD=
ho-azure whoami --tenant --subscription
```
```
# Windows PowerShell
$env:AZURE_TENANT_ID=""
$env:AZURE_CLIENT_ID=""
$env:AZURE_CLIENT_CERTIFICATE_PATH="C:\\path\\to\\certificate.pem"
$env:AZURE_CLIENT_CERTIFICATE_PASSWORD=""
ho-azure whoami --tenant --subscription
```
### 通过 Azure CLI 的 Azure 托管身份
这适用于已在 Azure 资源上附加了托管身份的运行情况。
```
az login --identity
az account set --subscription
ho-azure whoami --subscription
```
对于用户分配的托管身份:
```
az login --identity --client-id
az account set --subscription
ho-azure whoami --subscription
```
`AZUREFOX_DEVOPS_ORG` 仅在运行 `devops` 命令时需要。`devops` 使用的身份仍需要对 Azure DevOps 组织有访问权限,而不仅仅是对租户或订阅的 ARM 访问。
## 输出模式
- `--output table`(默认)
- `--output json`
- `--output csv`
所有命令都会在 `/` 下写入工件:
- `loot/.json`
- `json/.json`
- `table/.txt`
- `csv/.csv`
工件意图:
- `json/` 是完整的命令结构化记录
- `loot/` 是较小的关键交接,专注于最高优先级的目标以便快速后续操作与链式工作流
- `table/` 和 `csv/` 是从同一底层命令结果渲染的便捷视图
## 分区与链条
HarrierOps Azure 同时支持独立扁平命令与通过 `chains` 进行分组执行。
对于当前专注的工作:
- 直接运行扁平命令,当你已知要使用的路径
- 使用 `chains`,当你希望获得更高价值的分组答案,而非逐个执行所有源命令
当前分区映射:
- `identity`: `whoami`, `rbac`, `principals`, `permissions`, `privesc`, `role-trusts`, `lighthouse`, `cross-tenant`, `auth-policies`, `managed-identities`
- `config`: `arm-deployments`, `env-vars`
- `secrets`: `keyvault`, `tokens-credentials`
- `resource`: `automation`, `devops`, `acr`, `api-mgmt`, `databases`, `resource-trusts`
- `storage`: `storage`
- `network`: `application-gateway`, `nics`, `dns`, `endpoints`, `network-effective`, `network-ports`
- `compute`: `workloads`, `app-services`, `functions`, `container-apps`, `container-instances`, `aks`, `vms`, `vmss`, `snapshots-disks`
- `core`: `inventory`
- `orchestration`: `chains`
当前 `chains` 家族:
- `credential-path`
- `deployment-path`
- `escalation-path`
- `compute-control`
## 帮助
HarrierOps Azure 支持通用与命令专属帮助:
```
ho-azure help
ho-azure help identity
ho-azure help permissions
ho-azure dns --help
ho-azure -h identity
ho-azure -h permissions
```
命令帮助包含 ATT&CK 云指引作为调查提示,而非证明某技术已发生。
帮助也指向相关的 `chains` 作为分组后续路径。
对于临时演示或本地测试,使用专用路径如 `--outdir ./ho-azure-demo`,以便工件不会堆积在仓库根目录。
## 静态提供者模式
设置 `AZUREFOX_PROVIDER=static` 以使用确定性静态提供者而非实时 Azure API。
```
# macOS/Linux
AZUREFOX_PROVIDER=static ho-azure rbac --output json
```
```
# Windows PowerShell
$env:AZUREFOX_PROVIDER="static"
ho-azure rbac --output json
```
如果未设置 `AZUREFOX_PROVIDER`,HarrierOps Azure 默认使用实时 Azure 收集。
## 开发
```
gofmt -w ./cmd ./internal
go test ./...
bash scripts/setup_local_guardrails.sh
```
CI 应覆盖确定性命令表面,再推进发布门控变更。
## 致谢
HarrierOps Azure 基于 AzureFox 移植工作构建,并受 [CloudFox](https://github.com/BishopFox/cloudfox) 启发(由 Bishop Fox 创建)。
## 许可证
HarrierOps Azure 在 MIT 许可证下授权。请参见 [LICENSE](LICENSE)。
分组路径视图,将最强的 Azure 横向移动故事置顶。 | `credential-path`
将暴露的密钥与令牌线索转化为最可能扩大访问的下游目标。
`deployment-path`
暴露最可能让攻击者变更 Azure 的构建、流水线与自动化路径。
`escalation-path`
突出显示从当前 foothold 到更强 Azure 控制的最清晰可见路径。
`compute-control`
查找已经可以生成身份支持访问并横向扩展到更广控制的工作负载。 | ### 平铺命令 | 分类 | 命令 | | --- | --- | | `core` | `inventory` | | `identity` | `whoami`, `rbac`, `principals`, `permissions`, `privesc`, `role-trusts`, `lighthouse`, `cross-tenant`, `auth-policies`, `managed-identities` | | `config` | `arm-deployments`, `env-vars` | | `secrets` | `keyvault`, `tokens-credentials` | | `resource` | `automation`, `devops`, `acr`, `api-mgmt`, `databases`, `resource-trusts` | | `storage` | `storage` | | `network` | `application-gateway`, `nics`, `dns`, `endpoints`, `network-effective`, `network-ports` | | `compute` | `workloads`, `app-services`, `functions`, `container-apps`, `container-instances`, `aks`, `vms`, `vmss`, `snapshots-disks` | ## 需要测试环境? 使用配套的 HarrierOps Azure 实验仓库进行实时验证,当你希望获得后端真实行为时。 本仓库中的静态提供者用于确定性本地检查与测试,**不能替代**真实的 Azure 支持实验环境。 ## CLI 调用 共享标志如 `--tenant`、`--subscription`、`--output`、`--outdir`、`--debug` 和 `--devops-organization` 在命令前后均可使用。 以下形式等价: ``` ho-azure dns --output json --outdir ./ho-azure-demo ho-azure --output json --outdir ./ho-azure-demo dns ``` 使用 `ho-azure
标签:Azure, EVTX分析, FTP漏洞扫描, Go语言, PB级数据处理, RBAC, 云侦察, 云资产发现, 协议分析, 威胁建模, 安全编排, 安全运维, 托管身份, 攻击路径, 文档结构分析, 日志审计, 服务主体, 权限关系, 权限提升, 横向移动, 程序破解, 编程规范, 跨租户, 路径分析, 身份信任, 身份管理