exeliontechsystems/argus

GitHub: exeliontechsystems/argus

ARGUS 是一款基于 Go 和 OPA/Rego 构建的 Azure 攻击链分析器,能够关联孤立的安全配置缺失,揭示传统 CSPM 工具忽略的攻击路径。

Stars: 0 | Forks: 0

# ARGUS — Azure 攻击链分析器 [![License: PolyForm Strict 1.0.0](https://img.shields.io/badge/license-PolyForm%20Strict%201.0.0-blue.svg)](LICENSE) [![Source Available](https://img.shields.io/badge/source-available-green.svg)](#license) [![Built with Go](https://img.shields.io/badge/built%20with-Go%201.22-00ADD8.svg)](https://golang.org) [![Powered by OPA / Rego](https://img.shields.io/badge/policies-OPA%20%2F%20Rego-7B2D8E.svg)](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, 上游代理, 反取证, 安全评估, 攻击路径分析, 攻击链分析, 日志审计, 权限漂移, 横向移动, 程序破解, 编程规范, 防御盲区, 靶场