exeliontechsystems/argus
GitHub: exeliontechsystems/argus
ARGUS 是一款基于 Go 和 OPA/Rego 构建的 Azure 攻击链分析器,能够关联孤立的安全配置缺失,揭示传统 CSPM 工具忽略的攻击路径。
Stars: 0 | Forks: 0
# ARGUS — Azure 攻击链分析器
[](LICENSE)
[](#license)
[](https://golang.org)
[](https://www.openpolicyagent.org)
ARGUS 回答了其他免费 Azure 安全工具无法回答的一个问题:
Defender for Cloud、Wiz 和 Prisma 会告诉你哪些控制项失效。ARGUS 会告诉你哪些失效的控制项**组合成了一条真正的攻击路径**,攻击者实际上可以利用它。它发现的每条链都是基于隔离的扫描器在设计上无法看到的。
这就是你的**盲区视图**。
## 目录
- [为什么选择 ARGUS](#why-argus)
- [它发现了什么](#what-it-finds)
- [快速开始](#quick-start)
- [安装](#installation)
- [身份验证](#authentication)
- [命令参考](#commands-reference)
- [`argus scan`](#argus-scan) — 全攻击链扫描
- [`argus rules`](#argus-rules) — 列出所有 115 条规则
- [`argus score`](#argus-score) — 快速仅评分运行
- [`argus drift`](#argus-drift) — 权限漂移分析
- [`argus suppress`](#argus-suppress) — 添加发现抑制
- [`argus trend`](#argus-trend) — 评分历史记录和差值
- [输出格式](#output-formats)
- [21 条攻击链](#the-21-attack-chains)
- [115 条规则](#the-115-rules)
- [Microsoft Graph 权限](#microsoft-graph-permissions)
- [抑制 (`.argusignore`)](#suppressions-argusignore)
- [趋势模式](#trend-mode)
- [架构](#architecture)
- [从源码构建](#build-from-source)
- [许可证](#license)
- [商业支持](#commercial-support)
- [关于 ExelionTech](#about-exeliontech-systems)
## 为什么选择 ARGUS
| 其他工具 | ARGUS |
|---|---|
| 列出单独的配置错误 | 建模发现项如何*组合*成攻击链 |
| 仅按严重程度对发现项排名 | 按链参与情况对发现项排名 |
| *"存储帐户公开"* | *"CHAIN-002:存储公开 + App Reg Graph 权限 + 传统身份验证 = 4 步完全数据泄露"* |
| 针对每个服务的硬编码检查 | **一个通用的 Resource Graph 收集器** — 自动覆盖每个 Azure 服务 |
| 规则埋在代码中 | **所有 115 条规则位于 OPA/Rego 策略文件中** — 可审计、透明 |
| 评分永久惩罚你 | **收益递减评分** 奖励增量修复 |
| 通用修复列表 | **Pareto 快速胜利** — 打破最多链的前 5 项修复 |
| "运行扫描并联系我们" | **趋势模式** — 评分差值、新发现、已解决发现项与上次扫描对比 |
### 许可证概览
| ✅ 你可以 | ❌ 你不可以 |
|---|---|
| 针对你自己的 Azure 环境运行 ARGUS | 修改源代码 |
| 阅读每一行源代码以进行审计 | Fork 并发布你自己的版本 |
| 在合规文档中使用生成的报告 | 提交 Pull Requests(它们将被关闭) |
| 提交错误报告和功能请求 | 将源代码嵌入到另一个产品中 |
| 在学术论文中引用 ARGUS | 出售 ARGUS 或对托管访问收费 |
这是一个刻意的许可选择([PolyForm Strict 1.0.0](LICENSE)),旨在保持规则库、攻击链定义和输出架构在每个安装中保持一致。如需修改权限、自定义规则或商业支持,请参阅[商业支持](#commercial-support)。
## 它发现了什么
针对真实的 Azure 订阅运行典型的 `argus scan` 会发现:
- **CIS Azure Foundations Benchmark v2.0** — 跨 Identity、Defender、Storage、Database、Logging、Networking、Virtual Machines、Key Vault 和 App Service 的全部 63 条规则。
- **52 条 ARGUS Zero Trust 规则** 映射到 5 个 NIST SP 800-207 支柱(身份、网络、工作负载、数据、可见性)。
- **21 种攻击链模式**,附带个性化叙述,其中包含你实际的资源、用户计数、Defender 计划和配置缺口。
- **权限漂移** — RBAC 角色分配,其中主体被授予了数百个操作,但在实践中仅使用少数操作。每个漂移发现项都包含分析窗口(例如"过去 30 天")和建议。
- **App Registration 接管 (CHAIN-002)** — 持有租户接管级别的 Microsoft Graph 应用程序权限(`RoleManagement.ReadWrite.Directory`、`Application.ReadWrite.All` 等)的 App Registrations,其他扫描器通常在隔离状态下将其评级为"中"。
每个发现项都附带:
- 失败的确切资源 ID 和资源组
- 业务影响的通俗英语描述
- 该发现项参与的攻击链
- 用于修复的 Terraform 代码片段(其中替换了真实资源名称)
- 用于修复的 `az` CLI 命令
- 其映射到的 CIS 规则、NIST 800-53 控制、NIST 800-207 原则和 MITRE ATT&CK 技术
## 快速开始
```
# 1. Authenticate 到 Azure
az login
# 2. 设置您想要扫描的 subscription
az account set --subscription ""
# 3. 使用 HTML、JSON、SARIF 和 evidence bundle 运行完整扫描
./argus scan \
--subscription "" \
--tenant "" \
--output all \
--output-dir ./argus-output \
--drift \
--evidence
# 4. 打开 HTML 报告
open ./argus-output/argus_*.html
```
就是这样。无代理。无 SaaS。没有数据离开你的机器。
## 安装
### 选项 1:下载预构建二进制文件(推荐)
针对 Linux、macOS (Intel + Apple Silicon) 和 Windows 的预构建二进制文件发布在 [Releases 页面](https://github.com/exeliontechsystems/argus/releases) 上。
```
# macOS Apple Silicon (M1/M2/M3)
curl -L -o argus https://github.com/exeliontechsystems/argus/releases/latest/download/argus-darwin-arm64
chmod +x argus
./argus --version
# macOS Intel
curl -L -o argus https://github.com/exeliontechsystems/argus/releases/latest/download/argus-darwin-amd64
chmod +x argus
# Linux amd64
curl -L -o argus https://github.com/exeliontechsystems/argus/releases/latest/download/argus-linux-amd64
chmod +x argus
# Windows
# 从 Releases 页面下载 argus-windows-amd64.exe
```
始终根据每个版本发布的 `SHA256SUMS` 验证 SHA256 校验和:
```
sha256sum argus
# 与同一 release 中的 SHA256SUMS 文件进行比较
```
### 选项 2:从源码构建
参见下面的 [从源码构建](#build-from-source)。需要 Go 1.22+。
## 身份验证
ARGUS 使用 Azure SDK 中的 `DefaultAzureCredential`。它按以下顺序遍历身份验证链:
1. **环境变量** — `AZURE_TENANT_ID`、`AZURE_CLIENT_ID`、`AZURE_CLIENT_SECRET`(或 `AZURE_USERNAME`/`AZURE_PASSWORD`)
2. **工作负载标识联邦**(如果在具有联合标识的 Kubernetes pod 中运行)
3. **托管标识**(如果在 Azure VM、Function 或 Container 上运行)
4. **Azure CLI** — `az login`(笔记本电脑和开发机器最简单的路径)
5. **Azure PowerShell** — `Connect-AzAccount`
6. **Visual Studio Code** 身份验证
7. **交互式浏览器** 提示(最后手段)
### 目标订阅上所需的 RBAC 角色
| 角色 | ARGUS 需要它的原因 |
|---|---|
| **Reader** | 通过 Resource Graph 列出资源 |
| **Security Reader** | 读取 Defender for Cloud 发现项、计划、安全评分 |
### 所需的 Microsoft Graph 权限(用于完整的 Identity 覆盖)
要检测 **CHAIN-002 — App Registration 接管**(ARGUS 发现的最高价值链)和其他几个 Identity 规则,扫描身份需要这些 Microsoft Graph **应用程序**权限:
| 权限 | 它开启的功能 |
|---|---|
| `Application.Read.All` | **检测具有危险 Graph 权限的 App Registrations (CHAIN-002)** |
| `Directory.Read.All` | 枚举用户、组、服务主体 |
| `Policy.Read.All` | 条件访问策略、租户设置 |
| `RoleManagement.Read.Directory` | PIM 符合条件/活动的分配 |
| `AccessReview.Read.All` | 对来宾和特权帐户的访问评审 |
| `AuditLog.Read.All` | 漂移分析活动日志查询 |
| `IdentityRiskyUser.Read.All` | 风险用户信号 |
| `SecurityEvents.Read.All` | Defender 警报 |
普通的 `az login` 用户帐户默认情况下没有这些权限。**你需要要么作为授予了这些范围的 Service Principal 运行,要么接受 Identity 支柱的发现项将不完整。** 如果任何 Graph 端点返回 403,ARGUS 将在扫描输出的顶部打印一个显眼的警告,列出确切缺少的范围。
要一次性设置具有所有正确权限的 SPN,请运行:
```
./scripts/setup-graph-permissions.sh
```
这将创建一个 Service Principal,分配 Reader + Security Reader,授予所有 Graph 应用程序权限,请求管理员同意,并打印你可以 `export` 到 shell 的凭据块。有关先决条件和 PowerShell 等效项,请参阅 [scripts/README.md](scripts/README.md)。
## 命令参考
运行 `./argus --help` 查看顶级命令列表。每个子命令也支持 `--help`。
### `argus scan`
主命令。运行完整管道:收集 → 评估 115 条策略 → 关联链 → 评分 → 生成报告。
```
./argus scan [flags]
```
| 标志 | 默认值 | 作用 |
|---|---|---|
| `--subscription ` | *(除非指定 --org-wide 否则为必需)* | 要扫描的 Azure 订阅 ID |
| `--tenant ` | *(必需)* | Azure 租户 ID |
| `--compliance ` | `all` | 要加载的框架:`cis-azure-2.0`、`nist-800-207`、`nist-800-53`、`all` |
| `--output ` | `all` | 输出格式:`html`、`json`、`sarif`、`all` |
| `--output-dir ` | `./argus-output` | 写入报告的位置 |
| `--drift` | `false` | 同时运行权限漂移分析(查询 Activity Log) |
| `--evidence` | `false` | 同时生成合规证据包 |
| `--org-wide` | `false` | 发现并并行扫描租户中每个已启用的订阅 |
| `--management-group ` | *(空)* | 设置 `--org-wide` 时,限制在此管理组下的订阅 |
| `--suppress-file ` | `.argusignore` | 抑制 YAML 文件的路径 |
| `--show-suppressed` | `false` | 在主要结果中包含被抑制的发现项(仍会注释) |
#### 单订阅示例
```
./argus scan \
--subscription 00000000-0000-0000-0000-000000000000 \
--tenant 11111111-1111-1111-1111-111111111111 \
--output all \
--output-dir ./argus-output \
--drift \
--evidence
```
#### 租户范围示例(每个已启用的订阅)
```
./argus scan \
--org-wide \
--tenant 11111111-1111-1111-1111-111111111111 \
--output html
```
这会发现你有 Reader 访问权限的每个订阅,并并行运行每个订阅的管道(5 个并发工作线程)。输出是一个租户汇总 JSON,按最差到最好对所有订阅进行排名。
#### 管理组示例
```
./argus scan \
--org-wide \
--management-group "production-mg" \
--tenant 11111111-1111-1111-1111-111111111111
```
### `argus rules`
列出引擎中当前加载的所有 115 条规则,按来源(CIS / ZT)和支柱分组。
```
./argus rules list
```
示例输出:
```
══════════════════════════════════════════════════════════════════
ARGUS Rule Library
══════════════════════════════════════════════════════════════════
CIS Microsoft Azure Foundations Benchmark v2.0 (63 rules)
RULE LEVEL NIST 800-53 TITLE
cis_1_1 L1 IA-2(1);IA-2(2) Ensure MFA is enabled for all users
cis_1_2 L1 IA-2(1);AC-6 Ensure MFA is enabled for all privileged users
...
ARGUS Zero Trust Custom Rules (52 rules)
RULE PILLAR SEVERITY CHAIN ROLE TITLE
zt_id_001 Identity HIGH ENABLER Service Principal credential never expires
zt_id_002 Identity MEDIUM AMPLIFIER Service not using managed identity
zt_id_011 Identity CRITICAL ANCHOR App Registration high-privilege Graph perms
zt_net_001 Network CRITICAL ANCHOR NSG allows SSH (22) from the Internet
...
══════════════════════════════════════════════════════════════════
Total checks evaluated: 115
══════════════════════════════════════════════════════════════════
```
### `argus score`
静默运行完整扫描并仅打印评分摘要。适用于 CI 管道或快速健康检查。
```
./argus score \
--subscription \
--tenant
```
### `argus drift`
独立的权限漂移分析。将授予的 RBAC 操作与 Azure Activity Log 中实际使用的操作进行比较。
```
./argus drift \
--subscription \
--tenant \
--days 30
```
| 标志 | 默认值 | 作用 |
|---|---|---|
| `--subscription` | *(必需)* | Azure 订阅 ID |
| `--tenant` | *(必需)* | Azure 租户 ID |
| `--days` | `30` | 检查多少天的 Activity Log 历史记录 |
示例输出:
```
Permission Drift Analysis (112 identities, 30 days)
IDENTITY TYPE GRANTED USED UNUSED % BLAST RADIUS
-------- ---- ------- ---- -------- ------------
prod-deploy-sp ServicePrincipal 847 12 98.6% CRITICAL
legacy-monitoring-sp ServicePrincipal 500 0 100.0% CRITICAL
ops-team-readonly User 250 45 82.0% CRITICAL
...
High blast radius (60%+ unused): 87
```
每个发现项的建议都会明确说明分析窗口,这样你就不会根据部分数据采取行动:
### `argus suppress`
将发现项抑制条目追加到你的 `.argusignore` 文件中。完整的审计跟踪(规则、资源、原因、批准者、过期时间)将被保留。
```
./argus suppress \
--rule "zt_vis_010" \
--resource "*" \
--reason "Just-in-time VM access not GA in our region" \
--approved-by "security-team@example.com" \
--expires "2026-12-31"
```
| 标志 | 默认值 | 作用 |
|---|---|---|
| `--rule` | *(必需)* | 要抑制的规则 ID(根据加载的规则库验证) |
| `--resource` | `*` | 资源 ID 范围。`*` 匹配所有。后缀通配符如 `*-tfstate` 有效。 |
| `--reason` | *(必需)* | 理由 — 出现在报告中 |
| `--approved-by` | *(必需)* | 批准的人员或团队 |
| `--expires` | *(空 = 从不)* | YYYY-MM-DD 过期日期。过去的日期将被拒绝。 |
| `--file` | `.argusignore` | 抑制文件的路径 |
| `--yes` | `false` | 跳过交互式确认 |
###argus trend`
显示订阅的扫描历史和评分趋势。ARGUS 将每次扫描持久化到 `~/.argus/history//scans.jsonl`(仅追加),因此趋势分析可以跨运行进行。
```
./argus trend --subscription --days 90
```
示例输出:
```
ARGUS Score Trend (last 90 days, 5 scans)
DATE SCORE GRADE FINDINGS CHAINS TREND
2026-01-15 09:00:00 18.4 F 95 6 —
2026-01-22 09:00:00 31.2 F 87 5 ↑ +12.8
2026-01-29 09:00:00 47.8 D 71 4 ↑ +16.6
2026-02-05 09:00:00 62.1 C 58 3 ↑ +14.3
2026-02-12 09:00:00 78.4 B 42 1 ↑ +16.3
Summary:
Average score: 47.6
Best score: 78.4
Worst score: 18.4
Most chains in any scan: 6
Trajectory: 78.4 / 100 (improving by +60.0 points over 5 scans)
```
如果同一订阅存在先前的扫描,趋势块也会出现在每个 `argus scan` 摘要框中。
## 输出格式
单个 `--output all` 会生成:
| 文件 | 格式 | 受众 | 大小(典型) |
|---|---|---|---|
| `argus_.html` | 自包含 HTML | CISO、安全团队、高管审查 | 300–700 KB |
| `argus_.json` | 综合性 JSON | 管道、仪表板、自定义分析 | 150–300 KB |
| `argus_.sarif` | SARIF 2.1.0 | GitHub Security 选项卡、Azure DevOps、IDE 插件 | 100–200 KB |
| `argus-evidence-.zip` | 合规包 | 审计员、SOC 2 / ISO 27001 证据包 | 30–80 KB |
### HTML 报告中有什么
一个现代的、咨询交付级的单文件,没有 CDN 或外部资源:
1. **封面页** — 渐变页眉、大号评分等级(A–F)、评分、成熟度级别
2. **Microsoft Graph 警告横幅** — 如果缺少 Graph 范围,则显示黄色警报
3. **趋势横幅** — 如果存在历史记录,则显示与上次扫描的评分差值
4. **你的盲区** — 高管摘要,将 ARGUS 重新定位为盲区发现者
5. **前 5 项快速胜利** — Pareto 修复表:哪 5 项修复打破的链最多
6. **攻击链** — 每条检测到的链都带有个性化叙述,其中包含你真实的资源名称
7. **Zero Trust 支柱细分** — 每个支柱的评分和原则状态
8. **NIST 800-207 原则覆盖热图**
9. **发现项表** — 按严重程度、规则、资源、支柱排序(原生 JS,无库)
10. **权限漂移分析** — 如果设置了 `--drift`
11. **修复路线图** — Terraform + Azure CLI 代码片段,其中替换了真实资源名称
12. **合规映射** — 每个发现项都映射到 NIST 800-53、NIST 800-207、MITRE ATT&CK
13. **技术附录** — 可折叠的原始 JSON
### 证据包中有什么
```
argus-evidence-.zip
├── executive_summary.json # CISO 1-pager
├── zt_score_report.json # Full score breakdown
├── attack_chains.json # All chains with full narrative
├── cis_azure_compliance.csv # 63 CIS rules with PASS/FAIL per resource
├── nist_800_53_mapping.csv # Controls × findings
├── nist_800_207_assessment.csv # 7 ZT tenets × violations
├── remediation_plan.md # Markdown remediation guide
├── drift_report.csv # Drift findings (if --drift was set)
└── raw_findings.json # Full finding details for forensics
```
这是你交给审计员用于 SOC 2 / ISO 27001 / NIST 800-207 证据包的文件。
## 21 条攻击链
ARGUS 跨规则关联发现项以检测 21 种不同的攻击链模式。每条链都具有:
- 唯一 ID(`CHAIN-001` 到 `CHAIN-021`)
- 严重程度(CRITICAL / HIGH)
- 个性化叙述,其中包含你的资源名称、用户计数和 Defender 计划列表
- 3-6 个攻击步骤,包括行为者、操作、技术和使每个步骤成为可能的规则
- 爆炸半径详细信息块(初始访问、横向移动、最大权限、面临风险的数据、估计范围 %)
- 监管影响条目(PCI DSS、GDPR、ISO 27001、SOC 2、HIPAA、NIST 800-53)
- `MinimalFixSet`,列出了如果修复则打破链的最小规则集
- `PriorityFix` 建议
- `BreakingNote`,解释每个修复如何降低链的可能性
精选链:
| ID | 标题 | 严重程度 |
|---|---|---|
| **CHAIN-001** | 面向 Internet 的 VM 到订阅接管 | CRITICAL |
| **CHAIN-002** | App Registration Graph 滥用到租户数据 | CRITICAL |
| **CHAIN-003** | 传统身份验证绕过到特权接管 | CRITICAL |
| **CHAIN-004** | 永久特权角色 + 无 PIM = 内部人员升级 | HIGH |
| **CHAIN-005** | 公共存储 + 无诊断 = 静默外泄 | CRITICAL |
| **CHAIN-006** | AKS 公共端点 + 特权容器 = 集群接管 | CRITICAL |
| **CHAIN-007** | 子网上无 NSG + 无流日志 = 不可见的横向移动 | HIGH |
| **CHAIN-008** | Defender 已禁用 + 开放端口 = 盲目执行 | CRITICAL |
| **CHAIN-009** | Key Vault 无保护 + 无警报 = 勒索软件 | CRITICAL |
| **CHAIN-010** | 无专用端点 + SQL 允许所有 IP + 无审计 = DB 入侵 | CRITICAL |
| **CHAIN-019** | 永久特权 + 无 PIM + 无评审 = 内部威胁 | CRITICAL |
| **CHAIN-020** | 无 Sentinel + 无诊断 + 低保留期 = 不可见的持久性 | CRITICAL |
(还有 9 条 — 完整的模式定义和触发逻辑请参阅 `internal/engine/correlator.go`。)
### CHAIN-002 解释
CHAIN-002 是 ARGUS 存在的理由。大多数云安全扫描器查看 App Registrations,看到"Application.ReadWrite.All 已授予 Contoso-Production-API",将其评为中等严重程度的发现项,然后继续前进。
ARGUS 将其视为**链的一部分**:一个具有租户范围内 Microsoft Graph 应用程序权限的 App Registration,结合接受来自任何网络的连接的存储帐户,结合仍然接受传统身份验证的 App Services,等于**从单个受网络钓鱼的开发者到你的生产客户数据的 3 跳路径**。每个控制项都通过了单独评估。它们都没有在 Defender for Cloud 的仪表板上亮红灯。**加在一起,它们是租户接管**,而 ARGUS 是唯一以这种方式发现它们的免费工具。
## 115 条规则
### CIS Microsoft Azure Foundations Benchmark v2.0 — 63 条规则
| 部分 | 域 | 规则 |
|---|---|---|
| 1 | 身份和访问管理 | 15 |
| 2 | Microsoft Defender for Cloud | 8 |
| 3 | 存储帐户 | 8 |
| 4 | 数据库服务 | 6 |
| 5 | 日志记录和监控 | 6 |
| 6 | 网络 | 6 |
| 7 | 虚拟机 | 4 |
| 8 | Key Vault | 5 |
| 9 | 应用服务 | 5 |
每条 CIS 规则都映射到:
- 相应的 NIST 800-53 控制
- 相应的 NIST 800-207 ZT 原则
- Terraform 修复代码片段
- `az` CLI 修复命令
### ARGUS Zero Trust 自定义规则 — 52 条规则
映射到 5 个 NIST SP 800-207 支柱:
| 支柱 | 规则 | 示例 |
|---|---|---|
| **Identity** | 11 | SP 凭据永不过期、无 PIM、危险的 Graph 权限、跨租户不受限制、无 CAP、无访问评审 |
| **Network** | 10 | NSG SSH/RDP 来自 0.0.0.0/0、子网无 NSG、VM 上的公共 IP、无 DDoS、无 WAF、PaaS 无专用端点 |
| **Workload** | 11 | AKS 公共端点、特权容器、Function App 无身份验证、App Service 传统身份验证、无托管标识 |
| **Data** | 10 | 公共 Blob、无 TDE、无审计、KV 无清除保护、无 BYOK、SQL 允许所有 Azure IP |
| **Visibility** | 10 | 无诊断设置、无 Log Analytics、 defender 免费版、无 Sentinel、无 JIT、NSG 流日志已禁用 |
每条规则都有一个 `chain_role`:
| 角色 | 含义 |
|---|---|
| **ANCHOR** | 为攻击者提供初始访问的发现项。没有锚点,链就不会开始。 |
| **AMPLIFIER** | 放大锚点所启用的功能的发现项。扩大爆炸半径。 |
| **ENABLER** | 移除防御(可见性、警报)的发现项。本身不授予访问权限。 |
运行 `./argus rules list` 查看完整表。
## 抑制 (`.argusignore`)
每个安全工具都需要一种方法将发现项标记为"接受风险",而不会丢失审计跟踪。ARGUS 在工作目录的根目录使用一个名为 `.argusignore` 的 YAML 文件(类似于 `.gitignore`)。
示例:
```
suppressions:
# Suppress one rule on one specific resource
- rule_id: "zt_net_010"
resource_id: "/subscriptions/.../storageAccounts/legacy-tfstate"
reason: "Legacy storage account — migration scheduled Q2 2026"
approved_by: "security-team@example.com"
expires: "2026-06-30"
created_at: "2026-04-11"
# Suppress a rule everywhere (accepted risk)
- rule_id: "zt_vis_010"
resource_id: "*"
reason: "JIT VM access not yet GA in our region"
approved_by: "ciso@example.com"
expires: "2026-12-31"
created_at: "2026-04-11"
# Wildcard match by suffix — suppress for every storage account ending in -tfstate
- rule_id: "cis_3_4"
resource_id: "*-tfstate"
reason: "Terraform state buckets need broad network access for CI/CD"
approved_by: "platform-team@example.com"
expires: "2026-12-31"
created_at: "2026-04-11"
```
被抑制的发现项不会被静默删除。它们出现在报告的"Suppressed Findings"部分,并附带原因、批准者和过期时间。审查员可以在审计期间质疑接受风险的决定。
使用 `argus suppress` 追加条目(验证规则 ID 是否存在,拒绝过去的过期日期,并提示确认)。
如果任何抑制**已过期**或**将在 30 天内过期**,ARGUS 会在扫描时打印警告。
启动模板请参阅 `.argusignore.example`。
## 趋势模式
每次扫描都会自动以仅追加的 JSON-Lines 格式将 `ScanRecord` 写入 `~/.argus/history//scans.jsonl`。后续扫描会计算与最近一次先前记录的差值,并在以下位置显示它:
1. **在终端摘要框中** — 评分差值、新发现、已解决的发现、新链、已解决的链、改进/稳定/降级结论
2. **作为 HTML 报告顶部的"与上次扫描的趋势对比"横幅**
3. **在 JSON 输出中**,位于 `trend_report` 键下
4. **作为其自己的 `argus trend` 命令**,用于完整的历史表视图
当文件超过 10 MB 时,历史记录会自动轮换。
## 架构
ARGUS 围绕 6 个设计原则构建:
### 1. 通用收集器 — 零每个服务的 Go 代码
Azure Resource Graph 通过单个 KQL 查询处理所有资源收集。一个查询返回订阅中的每个资源类型,无论服务如何。没有 `azure_vm.go`。没有 `azure_sql.go`。新的 Azure 服务会自动覆盖。
### 2. 完全隔离 — 数据、逻辑、编排
| 层 | 文件 | 内容 |
|---|---|---|
| **数据** | `data/benchmarks/*.csv`、`data/remediation/*.csv` | 纯数据 — CIS 规则、NIST 控制、MITRE 技术、修复代码片段 |
| **逻辑** | `policies/azure/cis/*.rego`、`policies/azure/zt/*.rego` | 纯规则 — 每个检查都是一个 OPA/Rego 策略 |
| **编排** | `internal/**/*.go` | 纯管道 — 收集器、引擎、评分器、报告器 |
添加新规则 = 添加一个 Rego 文件 + 一个 CSV 行。**无需更改 Go 代码。**
### 3. OPA/Rego 是规则引擎 — 而不是 Go if/else
每个检查 — CIS、NIST、自定义 Zero Trust — 都位于 `policies/` 中的 `.rego` 文件中。Go 将 JSON 输送给 OPA。OPA 评估所有策略并返回违规。Go 使用 CSV 元数据将违规映射到发现项。**Go 永不包含规则评估逻辑。**
### 4. 企业级输出质量
每个发现项都包含确切的资源 ID、业务影响的通俗英语描述、它启用的特定攻击场景、它参与的链、爆炸半径、违反的确切合规框架、Terraform 修复和 Azure CLI 修复。
### 5. 适用于任何状态的任何订阅
无先决条件。无必需服务。该工具始终完成:
- 如果 Defender 是免费版 → `zt_vis_003` 发现项触发
- 如果诊断已关闭 → `zt_vis_001` 触发
- 如果缺少 Sentinel → `zt_vis_007` 触发
- 如果条件访问策略不存在 → `zt_id_006` 触发
禁用的服务是发现项,而不是阻止程序。
### 6. 攻击链是产品 — 而不是发现项列表
单独的发现项是链引擎的输入。攻击链是主要输出。每份报告都在发现项之前以链开始。参与链的发现项在优先级上始终被提升。
## 从源码构建
需要 **Go 1.22 或更高版本**。Makefile 处理嵌入准备步骤(将 `policies/` 和 `data/` 镜像到拥有 `//go:embed` 指令的包目录中)。
```
git clone https://github.com/exeliontechsystems/argus.git
cd argus
# 为当前 platform 构建
make build
# 为所有 5 个 platform 构建 (linux/mac-intel/mac-arm/windows)
make build-all
# 运行测试
make test
# 使用 race detector 运行测试
go test ./... -race -timeout 180s
# 运行测试并生成 coverage report
make test-coverage
```
**提醒:** [LICENSE](LICENSE) 禁止修改Fork 和重新分发修改后的版本。你可以从源码构建以进行个人/内部验证、审计或使用。你不得发布修改后的 Fork。
## 许可证
ARGUS 是根据 **PolyForm Strict License 1.0.0** 发布的 — 一种源码可用许可证,允许运行和阅读源码,但禁止修改、Fork 和重新分发。
全文:[LICENSE](LICENSE) · 规范:[polyformproject.org/licenses/strict/1.0.0](https://polyformproject.org/licenses/strict/1.0.0)
这是一个刻意的许可选择。ExelionTech Systems LLP 希望 ARGUS 成为一个稳定、一致的平台,客户可以信任它在任何地方产生相同的发现项 — 而不是不兼容变体的 Fork 盛宴。
## ExelionTech 提供的服务
ARGUS 是我们的开源赠送品。我们赚钱的方式 — 也是我们让 ARGUS 变得更好的方式 — 是通过帮助安全团队在真实环境中使用它。如果 ARGUS 发现了让你感到害怕的东西,那么本部分的其余内容就是你真正想与我们谈论的内容。
### 1. 托管 Azure 安全评估
一次深度参与的深入分析,将原始的 `argus scan` 输出转化为董事会就绪的安全审查。
**你将获得:**
- 在 `--org-wide` 模式下针对你的租户中的每个订阅运行 ARGUS,由我们配置完整的 Microsoft Graph SPN,以便 CHAIN-002 (App Registration 接管) 实际触发
- 在自动生成的叙述之上由人工编写的个性化链叙述 — 你的真实资源名称、你的真实用户、你的真实攻击场景
- 与你的安全团队和领导层进行 90 分钟的解读电话
- 带有高管摘要、盲区分析和优先修复路线图的品牌 PDF 报告(你的徽标、你的颜色)
- Pareto 快速胜利计划:打破最多链的 5 项修复,附带工作量估算和 4 周冲刺计划
- 30 天的后续电子邮件/Slack 支持,在你进行修复时回答问题
**典型买家:** 中端市场公司(50–500 名员工)、Azure 为首的商店、准备进行 SOC 2 / ISO 27001 / NIST 800-207 审计的组织。
### 2. 连续托管扫描服务
我们按计划为你运行 ARGUS,并在发生变化时告诉你。无代理、无 SaaS 仪表板、没有数据离开你的租户 — 我们使用你控制的 Service Principal 从你的环境中运行它。
**你将获得:**
- 一个或多个 Azure 订阅的每日、每周或每月扫描(由你选择)
- 一旦出现新的攻击链,立即通过 Slack / Teams / 电子邮件发送警报
- 显示评分差值、新发现、已解决的发现项、新链的每月趋势报告
- 季度调整电话,用于添加抑制、完善自定义规则和审查你的修复积压
- 直接访问 ARGUS 工程团队,用于"这个发现项是真的吗?"问题
- 对错误修复和功能请求的优先权
**典型买家:** 已经拥有安全团队但希望在其现有 CSPM (Defender、Wiz、Prisma) 之上获得链关联洞察的组织。
### 3. 自定义 Rego 规则
ARGUS 开箱即用没有涵盖特定的合规框架、内部控制或威胁模型吗?我们为你编写 Rego 策略。
**你将获得:**
- 发现电话,以了解你的环境和你的特定控制语言
- 自定义 Rego 规则添加到只有你的租户使用的私有规则包中
- 映射到你的内部合规框架(或利基标准,如 FedRAMP Moderate、PCI DSS 4.0、RBI 准则、DPDP 法案)
- 可选:将你的自定义规则集成到同一个链关联器中,以便它们参与攻击链检测
- 文档和季度审查,以保持规则最新
**典型买家:** 受监管行业(银行、医疗保健、金融科技)、政府供应商、具有内部"安全着陆区"要求的组织。
### 4. Microsoft Graph 权限设置和 Identity 强化
大多数尝试 ARGUS 的团队在第一次扫描时都会遇到"Microsoft Graph 访问受限"警告。我们将 SPN 配置、管理员同意和 Identity 支柱强化作为固定范围的服务来执行。
**你将获得:**
- 使用所有 8 个所需的 Microsoft Graph 应用程序权限创建的 Service Principal,已正确界定范围并获得管理员同意
- 条件访问策略审查和建议
- 如果你还没有 PIM,则提供 PIM 推出计划
- 为来宾用户和特权角色设置访问评审
- 更改后的第二次扫描,以验证 CHAIN-002 / CHAIN-019 / CHAIN-017 正确触发或确认干净
**典型买家:** 任何第一次 ARGUS 扫描引发 Graph 警告的组织(所以,几乎是每个人)。
### 5. SIEM / SOAR / 工单集成
我们将 ARGUS 发现项传输到 Microsoft Sentinel、Splunk、Elastic、ServiceNow、Jira、Linear、GitHub Issues 或你的自定义系统。发现项作为警报流动;链作为事件流动。
**你将获得:**
- 集成范围(哪些发现项、哪些严重程度、哪些所有者)
- 自定义丰富(你的 CMDB 标签、所有者映射、运行手册链接)
- 一个可以移交给你 SOC 的工作管道
**典型买家:** 运行 24/7 监控的 SOC 团队,他们希望链级别警报直接落入其现有工具中。
### 6. 内部修改许可证
默认的 ARGUS 许可证 ([PolyForm Strict](LICENSE)) 禁止修改。如果你的安全团队需要在内部 Fork ARGUS — 添加私有规则、更改输出格式、集成私有 Defender 源 — 我们出售**商业源代码许可证**,该许可证授予仅限内部使用的修改权限。
**你将获得:**
- 签署的商业许可协议,允许内部源代码修改
- 访问 ARGUS 工程团队,以获取关于你的 Fork 的设计问题
- 对你的内部更改进行可选代码审查
- 将你要贡献的任何非机密改进向上游合并
**典型买家:** 财富 500 强安全团队、政府机构或任何法律/采购要求修改权限作为合同条款的组织。
### 7. 多云路线图(早期访问)
ARGUS 目前仅限 Azure。AWS 支持在我们的路线图上。如果你的环境是多云的,并且你希望在 AWS 攻击链分析器发布时成为设计合作伙伴列表中的一员,[请联系我们](mailto:contact@exeliontech.in)。
**设计合作伙伴将获得:**
- 在公开发布前 6 个多月提前访问 AWS 分析器
- 直接影响我们要首先对哪些 AWS 攻击链进行建模
- 免费使用跨 Azure + AWS 的多云汇总视图
## 联系方式
| 渠道 | 位置 |
|---|---|
| 🌐 **网站** | **[https://www.exeliontech.in](https://www.exeliontech.in)** |
| 📧 **电子邮件** | **[contact@exeliontech.in](mailto:contact@exeliontech.in?subject=%5BARGUS%5D%20Inquiry)** |
| 💼 **GitHub 组织** | [github.com/exeliontechsystems](https://github.com/exeliontechsystems) |
| 🐛 **错误报告** | [github.com/exeliontechsystems/argus/issues](https://github.com/exeliontechsystems/argus/issues) |
| 🔒 **安全公告** | [github.com/exeliontechsystems/argus/security/advisories](https://github.com/exeliontechsystems/argus/security/advisories) |
**付费咨询的响应时间:1 个工作日内。**
开始对话的最快方式:
## 关于 ExelionTech Systems
**ExelionTech Systems LLP** 是一家注册的印度有限责任合伙企业,构建云安全工具并为想要链关联深度而不想要企业 CSPM 工具按座席许可成本的组织提供托管安全服务。
我们创立 ExelionTech 是因为我们一直看到安全团队使用 Defender for Cloud、Wiz 或 Prisma 发现数十个"中等"发现项 — 却忽略了三个中等发现项的组合变成了一条 CRITICAL 链。我们构建 ARGUS 是为了揭示这些链,我们建立 ExelionTech 是为了帮助团队对 ARGUS 发现的内容采取行动。
### 我们的信念
- **链分析是云安全的下一层。** 列出发现项已解决。关联发现项尚未解决。
- **开源工具建立信任。** 能够在运行二进制文件之前阅读每一行源代码的客户会成为倡导者。
- **印度工程商店可以构建和发布企业安全工具。** 我们很自豪成为一家小型的印度 LLP,发布一款在能力上竞争的工具,而不是在营销预算上竞争。
### 路线图(未来 12 个月)
- ✅ **ARGUS for Azure**(此仓库) — 已发布
- 🚧 **Microsoft Sentinel 原生集成** — 进行中
- 🚧 **AWS 攻击链分析器**(基于相同的 Rego 架构) — 设计中
- 🔜 **连续监控 SaaS** — 守护进程模式 + Webhook 警报
- 🔜 **自定义规则库**,用于 FedRAMP、RBI、DPDP、HIPAA
- 🔜 **多云汇总** — 跨 Azure + AWS + GCP 的单一租户视图
如果其中任何一项让你感兴趣,[告诉我们](mailto:contact@exeliontech.in?subject=%5BARGUS%5D%20Roadmap%20interest) — 设计合作伙伴名额先到先得。
标签:AWS安全, Azure安全, Defender for Cloud, DevSecOps, EVTX分析, Go语言, Groq API, OPA, Rego, Wiz, 上游代理, 反取证, 安全评估, 攻击路径分析, 攻击链分析, 日志审计, 权限漂移, 横向移动, 程序破解, 编程规范, 防御盲区, 靶场