zer0d4y5/argus

GitHub: zer0d4y5/argus

本地优先的一体化代码与云安全扫描平台,将多种开源扫描器结果统一为风险评分、合规映射的发现模型,支持 AI 自动分诊与 CI 拦截。

Stars: 1 | Forks: 0

Argus

洞察您的代码及其运行所在的云环境的“全知之眼”。

从扫描课堂作业的学生,到拥有 SSO 和审计追踪的企业,
使用同一个二进制文件,核心采用本地优先且完全免费。

License Go Schema Local-first

**覆盖整个攻击面(代码及其运行所在的云)的单一安全工具。** Argus 针对您的代码仓库和云账户运行开源扫描器,将所有结果合并为一个去重、风险评分、合规映射的统一发现模型,在您的本地机器上通过 AI 对每个发现进行分诊,根据严重程度拦截 CI 流程,并通过单个 Go 二进制文件提供涵盖您运行历史的 Web 控制台。多个扫描器,一个全知视角:将它们的输出合并为单一的发现模型。

Argus pipeline: scanners and cloud feed one findings model, enriched deterministically, then gating CI, exporting reports, and feeding the console

**万物归一模型。** 跨越 **十三种语言** (Python、JavaScript、TypeScript、Go、Java、C#、Ruby、PHP、Kotlin、Rust、Scala、C、Swift) 的 SAST、密钥、依赖项 (SCA)、**IaC 配置不当**(Terraform、CloudFormation、Kubernetes、Dockerfile、Helm,外加用于架构检测的 Bicep/ARM 和 Pulumi),以及**云安全态势**(prowler:AWS、Azure、GCP)全部流经相同的分级严重性、风险信号和合规映射。DAST 已列入 [路线图](docs/roadmap.md)。 **发现转化为审计证据。** 每个发现都会被(确定性地,不使用 LLM)映射到其违反的框架控制项(**OWASP ASVS 4.0**、**PCI DSS 4.0** 以及 **CIS** AWS/Docker/Kubernetes 基准),并且 `argus comply` 将任何扫描转换为 GRC 负责人可以提交给审计员的按框架划分的差距报告:包含违规的控制项及证据、未检测到违规的控制项,以及一个明确的“静态扫描无法评估”的类别,从而使报告绝不夸大其词([docs/compliance.md](docs/compliance.md))。 ``` argus scan ./repo --profile standard --triage --save → runs in parallel: semgrep (SAST) · gitleaks (secrets) · trivy (SCA) · checkov + trivy-config (IaC) → normalizes everything into one findings model → dedups/correlates overlapping findings → AI triage (local Ollama): LLM verdicts true/false-positive per finding → risk-scores every finding 0–10 (heuristic baseline ± bounded LLM adjustment) → maps every finding to ASVS / PCI DSS / CIS controls (deterministic, no LLM) → writes SARIF 2.1.0 / Markdown / JSON, saves the run for the console → exits non-zero when findings hit your severity gate argus comply → per-framework compliance gap report: violated / clean / not assessable argus serve → local web console: Overview, Findings, Runs, and more + with users configured: login, scan launching, admin, audit argus user → console users: add | list | passwd | remove (bootstrap the first admin) argus target → registered scan targets the console may launch against argus ticket → work items over findings: create | list | show | link | comment argus threats → threat models: list | show | STRIDE library | enumerate ``` ## 为什么要有 Argus 一个优秀的应用安全计划一直以来似乎只是那些负担得起的团队的特权。真正有价值的扫描器往往被隐藏在企业销售电话和按人头定价的背后;而那些免费的工具,通常需要在告诉你代码哪里有问题之前,先将你的源代码上传到别人的云端。如果你是一名学生、一个两人小店,或者是一个无法将代码发送到外部的团队,你往往就会因为价格或政策门槛,被挡在这个大家都认为是“基本要求”的事物之外。 这始终让人难以接受。安全应该是基线,而不是一种高级附加服务,而且预算最少的人往往就是那些被攻击的人。因此,Argus 坚持一个前提:核心免费,并且完全在你的机器上运行。你的代码、你的发现结果,以及对其进行分诊的本地模型都保留在原地;没有任何信息会发回主页,没有任何内容会被上传,并且你无需注册账号即可开始使用。大型组织日后需要的功能(SSO、角色、审计追踪)是你可以开启的层级,而绝不会是挡在扫描器前的付费墙。 免费和私密并不是妥协。它们本身就是核心理念。 ## 适用人群 同一个二进制文件会在你所处的阶段为你服务,并随着你的发展而扩展: - **学生与学习者**:在笔记本电脑上扫描项目,免费且本地化,无需账号,并能看到映射到真实弱点类别的真实发现。 - **IT 部门与独立开发者**:在 CI 中运行一条命令,设置严重性拦截,并提供一个任何人都能看懂的控制台。无需额外托管,无需按人头付费。 - **初创公司**:在一个视图中查看代码和云环境,为首次审计对话提供合规证据,并通过分诊过滤掉干扰信息。 - **企业**:SSO、基于角色的访问控制、审计追踪、批准的修复措施,以及 GRC 负责人可提交给审计员的差距报告。 本地优先,核心免费;大型团队所需的控制功能是你可以开启的层级。SSO 和批准的云修复功能的未来发展方向请见:[docs/roadmap-platform.md](docs/roadmap-platform.md)。 ## 控制台 `argus serve` 会读取你保存的运行记录,并将其渲染到七个标签页中:Overview(概览)、Findings(发现)、Runs(运行)、**Tickets**(工单)、**Threats**(威胁)、Operate(操作)和 Admin(管理)。发现数据(标题、路径、LLM 推理依据)被视为不可信的恶意输入,并进行无害化渲染:仅进行转义处理,无 HTML 注入,实施严格的 CSP,并绑定 `127.0.0.1`。 开箱即用时,控制台是一个无需登录的只读查看器。创建用户(`argus user add --role admin`)后,它将成为一个**操作控制台**:登录 + 角色(viewer/operator/admin),通过严格的串行任务队列针对注册的目标发起扫描(`argus target add`),用户管理,**检测规则管理**(启用规则包,引入或使用 AI 编写自定义规则),以及只增不改的审计日志。威胁模型和设计详见:[docs/console-ops.md](docs/console-ops.md)。 | Overview | Findings | Runs | |---|---|---| | ![概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/1c/1c9d41ce9b5bac08044516269c61b739e4c63d1eb93d7dd7ebf656baf5ba4dec.png) | ![发现](https://static.pigsec.cn/wp-content/uploads/repos/cas/8c/8c2abd85955981061a54cb4ff0c128ccb7a04ebb0746d9310ad8a4e02f54a89b.png) | ![运行](https://static.pigsec.cn/wp-content/uploads/repos/cas/b6/b617278ff7f64462e392855cd7cf54bf4b113219b65ee8f425688de1f39d7c8f.png) | 为管理层提供风险态势、严重性/OWASP 汇总、按框架划分的合规态势以及跨运行的趋势;为工程师提供带有每个发现的分诊依据和违规控制项标签的可过滤浏览器;为运维人员提供新增与已解决差异以及拦截结果。 ## 从发现到工作:工单和威胁模型 扫描会告诉你哪里出了问题。而由内置 SQLite 数据库(`argus.db`,在 `serve` 时打开)支撑的两大支柱,则能将这些发现转化为可追踪的工作,且两者都不会干涉 CI 拦截机制。

Argus architecture: a console over a deterministic core and two SQLite-backed work pillars, with invariants that hold across all of it

**工单** 是建立在发现之上的工作层。一个工单会收集证据(通过稳定的指纹关联多个发现),承载评论与事件的时间线,并在读取时计算严重性汇总,因此它永远不会过时。可按状态、负责人或优先级进行过滤;查看工单已开启多长时间以及是否已逾期;通过自动补全功能从列表中进行分配。将工单关闭为“已完成”可以为其关联的发现写入 `fixed` 处理状态:这是通向拦截机制的唯一、明确的、受审计的桥梁,并且它拒绝覆盖由人工做出的“接受风险”或“误报”的决定。可选的 [GitHub Issues 同步](docs/console-ops.md)(受配置控制,默认关闭)可以创建或关联一个 issue,仅存储 URL 和编号;token 通过环境变量名称进行引用,绝不存储。 **威胁建模** 是基于你的架构的 STRIDE 分析。添加组件(或从仓库的 IaC 生成基线:Terraform、CloudFormation、Kubernetes、Bicep、ARM、Pulumi、Helm),Argus 会根据组件技术,从固定版本的库中枚举经过筛选的 STRIDE 威胁:完全确定性的,没有模型参与。本地 LLM 还可以*建议*仓库布局中的组件和威胁,每一个都会被标记为 `assisted`(辅助),并且在计入之前必须由人工确认。威胁链接到真实的发现、合规控制项和缓解措施。全宽的 **画布编辑器** 让你可以直接映射架构:添加组件、资产、外部实体和信任边界,每个边界按区域(DMZ、VPC、子网、本地、互联网、云账户、Kubernetes)进行类型划分,重命名或重新定义其类型,调整边界大小以容纳其中的内容,并在节点之间绘制数据流;位置和几何形状会按模型进行持久化保存。可以将模型的威胁导出为 CSV 或 JSON。

The Argus threat-model canvas: a DMZ trust boundary holding a web frontend and API, data flows to a database, with STRIDE threat counts on each node

两大支柱共同遵守的规则:**工单或威胁永远不会改变严重性或拦截结果。** 拦截机制只读取基于文件的处理状态;数据库管理工作状态,而不做 CI 决策。 ## 快速开始(90秒) ``` # 一条命令即可构建 binary 并报告你拥有哪些 scanners: ./scripts/setup.sh # 或者手动构建,prereqs:Go 1.22+,以及你想要的任何 scanners 位于 PATH 上: # pipx install semgrep (或者:pip install semgrep) # brew install gitleaks trivy # trivy 涵盖 SCA *和* IaC misconfigs # pipx install checkov # 可选:广泛的 IaC engine go build -o argus ./cmd/argus # embeds the console; no Node needed to run # 使用默认的 `standard` 多语言 profile 进行扫描,在本地进行 triage, # 并保存运行结果以供 console 使用: ./argus scan . --triage --save # 在已保存的运行结果上打开 console: ./argus serve # http://127.0.0.1:8080 # 其他常见的调用: ./argus scan . --profile fast # tight, low-noise PR gate (semgrep p/ci) ./argus scan . --profile max # deepest recall; triage handles the FP volume ./argus scan . --format sarif -o results.sarif # GitHub code scanning ./argus scan . --fail-severity high # fail CI on high or critical ./argus scan . --triage --exclude-fp # drop LLM-marked false positives (explicit) ./argus comply . # compliance gap report (fresh scan, Markdown) ./argus comply . --latest -f json # assess the last saved run instead ``` ## 云安全态势 将平台指向某个 AWS 账户,即可通过与代码扫描**相同**的流水线获取态势评估:统一的发现结果(类别为 `CLOUD`)、分级严重性、确定性风险信号和 CIS-AWS 合规映射,并且可在控制台中一目了然地查看。 ``` # Prereq:prowler 位于 PATH 上(`pipx install prowler`)并且需要一个只读的 profile。 ./argus cloud-scan --provider aws --profile security-audit ./argus cloud-scan --provider aws --profile security-audit --regions us-east-1,us-west-2 --save ``` **凭据仅作引用,绝不收集。** `--profile` 会从你的本地云配置 (`~/.aws`) 中指定一个配置项;平台仅将该名称作为 `AWS_PROFILE` 传递给 prowler,绝不查看、存储或记录任何密钥。最小权限设置:创建一个只读的安全审计主体,并让 `--profile` 指向它: ``` # AWS:将两个 AWS 托管的只读 policies 附加到一个专用的 principal 上。 aws iam create-user --user-name argus-audit aws iam attach-user-policy --user-name argus-audit \ --policy-arn arn:aws:iam::aws:policy/SecurityAudit aws iam attach-user-policy --user-name argus-audit \ --policy-arn arn:aws:iam::aws:policy/job-function/ViewOnlyAccess # 将其 keys 放入 ~/.aws/credentials 中的一个命名 profile 中,例如 [security-audit], # 然后引用该 NAME。平台运行时所拥有的权限完全取决于该 profile # 能做什么:least privilege 是你的控制手段,而坦诚相告是我们的原则。 ``` **Azure 和 GCP** 的工作方式相同。通过订阅 ID 注册 Azure 目标(在 serve 环境中通过 `Reader` 服务主体进行身份验证),或通过项目 ID 注册 GCP 目标(通过 `Viewer` 应用默认凭据进行身份验证);账户 ID 只是一个引用,绝不是密钥,并且凭据仅存在于 prowler 继承的环境中。AWS 像以前一样使用指定的 `~/.aws` 配置项。在控制台中,管理员通过提供商和账户引用(绝不是密钥)来注册云目标;云运行记录会显示在聚合的 Runs 标签页中,带有感知资源的发现抽屉,以及可选的按需、永不持久化的 **AI 态势摘要**。 每个云发现还带有 prowler 自身的**针对单个发现的合规映射**(它在 NIST-CSF、ISO-27001、PCI、SOC2、HIPAA、GDPR、MITRE ATT&CK、FedRAMP 等标准中违反的具体控制项),这些内容被原封不动、固定版本地传递出来,置于可生成差距报告的 CIS-AWS 映射之上。 ## AI 辅助修复 对于任何发现,操作员都可以请求 **辅助修复**:一个具体的、具备类别意识的修复方案,供审查和运行。云发现会得到一个针对特定资源的、具有作用域的 `aws`/`az`/`gcloud` 脚本;代码发现会得到一个“修改前→修改后”的补丁;依赖项发现会得到升级命令;密钥发现会得到轮换步骤。 这是**辅助的,绝非自动化的**:Argus 生成一个由*你*使用自己的凭据运行的脚本;它从不执行任何操作,不持有写入凭据,也从不将发现标记为“已修复”(只有重新扫描才能将其清除,因此每次修复都以验证步骤结束)。在结果展示在浏览器之前,会运行一个**确定性安全检查器**:破坏性命令(删除/终止、`drop table`、`rm -rf`、允许所有访问)或内嵌凭据将被截留,保留人工步骤,并发出警告。通过降级来确保安全。这是一个按需提供、永不持久化的本地 LLM 接口,在 UI 中会被标记为 AI 生成。 缺失的扫描器会被跳过并附带说明;CLI 会优雅降级,并运行环境中提供的任何可用内容。这同样适用于分诊:如果无法连接到 LLM,则扫描只会在没有判定结果的情况下运行。 ## 扫描配置与覆盖范围 `--profile fast|standard|max`(配置项:`profile:`)用于选择精选的 semgrep 规则集。默认值为 `standard`:包含安全审计 + OWASP 基础包、适用于全部十三种语言的单独语言包,以及 **`argus/curated` 本地规则集**:这是平台自有规则,用于检测注册表规则包遗漏的弱点(SSRF、XXE、路径遍历、开放重定向、不安全的反序列化、弱加密、LDAP 注入、禁用 TLS 验证等)。覆盖范围是**经过证明的,而非口头声称的**:带有标签的测试夹具(`testdata/polyglot/`)和依赖网络的测试会断言每个金丝雀和每个精选规则都能捕获到注册表规则包遗漏的植入漏洞,而 [docs/coverage.md](docs/coverage.md) 是一个自动生成的“语言 × 弱点”矩阵。 广度会刻意增加误报的数量:本地的 AI 分诊就是解决此问题的方法。 **三种方式扩展检测能力**(由管理员在控制台的 Detection rules 标签页中操作,或通过 `appsec.yml` 中的 `semgrep_rulesets:` 配置): - **引入自定义规则**:指向注册表规则包或本地规则文件/目录;它们会被添加到配置中(或替换原有配置),并在扫描使用前进行验证。 - **规则包目录**:浏览并一键启用经过审查的 semgrep 规则包,这些规则包按语言、框架、云堆栈和弱点类别进行分组。 - **AI 辅助编写**:用自然语言描述一种检测,本地 LLM 会起草一条 semgrep 规则,你可以针对示例对其进行验证和测试然后保存。确定性的拦截机制会拒绝会导致灾难性回溯和匹配一切的规则;在你确认之前,什么都不会运行。 更喜欢使用 [Opengrep](https://github.com/opengrep/opengrep)(社区版 Semgrep 分支)?它是可以直接替换的:安装它,Argus 会自动使用,或者设置 `ARGUS_SEMGREP_BINARY=opengrep`。 同样的标准也适用于 IaC:带有标签的配置不当的 Terraform / Kubernetes / Dockerfile 测试夹具(`testdata/iac/`),配合一项覆盖范围测试,断言每个植入的配置不当问题都能被检测到。只要 IaC 引擎在 PATH 中,就会运行它们(`--profile` 仅调整 semgrep);每个 IaC 发现都会进入同一个模型(经过分诊、风险评分、拦截,并汇总至 OWASP A05),并在控制台中带有类别徽章。 ## 合规映射与差距评估 每次扫描都会将每个发现映射到它违反的安全控制项:这是经过人工精选、固定版本的数据(`internal/compliance/data/`),完全没有 LLM 参与,未映射的项目也会可见,总计数据可核对。`argus comply` 会渲染按框架划分的差距评估(Markdown 或 JSON 格式):包含带有证据指针的**已违反**控制项、**未检测到违规**的控制项(特意不称之为“合规”),以及一个明确的**静态扫描无法评估**的类别。添加新框架(SOC 2、NIST 800-53、ISO 27001 是接下来的计划)只需更改数据:理念、诚实范围的声明以及操作指南详见 [docs/compliance.md](docs/compliance.md)。 ## AI 分诊与风险评分 每个发现始终会获得一个确定性的**风险评分**(0-10;计算公式见 [docs/risk-scoring.md](docs/risk-scoring.md)),并且自 schema 2.0.0 起,其**严重性是根据该评分的确定性部分进行分级的**(标准分级见同一文档),因此,无论是哪个工具产生的发现,“高”都代表相同的含义,包含了上下文信号,排除了 LLM。工具自身的判断会作为 `toolSeverity` 保留。使用 `--triage`(或 `triage.enabled: true`)时,LLM 还会使用有限的源代码片段审查每个发现,并记录判定(`true-positive`、`false-positive` 或 `uncertain`)以及理由,报告程序会将这些与评分一起显示。判定只是附加的元数据:严重性和 CI 拦截绝不会因 LLM 的输出而改变,而 `--exclude-fp` 是判定将发现从报告和拦截中移除的唯一(明确的、可计数的)方式。 支持的提供商:**Ollama**(默认,本地)和 **Anthropic**(设置 `ANTHROPIC_API_KEY`;密钥仅通过环境变量设置,绝不写入配置)。被扫描的代码被视为不可信的输入:代码片段仅在按请求生成的随机边界标记内进入提示词,模型输出会进行 schema 验证,除非设置了 `allow_secret_cloud: true`,否则 SECRET(密钥)发现绝不离开本地机器。 ## 配置:`appsec.yml` 会在工作目录中查找(可使用 `--config` 覆盖);命令行标志的优先级高于文件中的值。 ``` scanners: [] # subset to run, e.g. [semgrep, gitleaks]; empty = all profile: standard # fast | standard | max: the curated semgrep ruleset semgrep_rulesets: [] # optional: registry packs, argus/curated, or local rule # files/dirs. A leading "+" adds to the profile; no "+" # replaces it. Local paths are validated before use. fail_severity: high # critical | high | medium | low | info | none format: markdown # sarif | markdown | json ignore_paths: # glob patterns; `dir/**` ignores a subtree - testdata/** - vendor ignore_rules: # exact rule IDs to suppress - generic-api-key timeout: 600 # per-scanner timeout, seconds triage: # AI triage (Phase 2): off unless enabled here or via --triage enabled: false provider: ollama # ollama | anthropic (API key via ANTHROPIC_API_KEY env) model: qwen3.6:35b-a3b endpoint: http://localhost:11434 timeout: 90 # per-LLM-request seconds concurrency: 4 max_findings: 200 # triage the N most severe findings; 0 = all exclude_fp: false # opt-in: drop LLM-marked false positives from report + gate allow_secret_cloud: false # opt-in: allow SECRET findings to non-local providers auth: # console single sign-on (OIDC): off unless configured; password login always works oidc: issuer: https://accounts.google.com # Google Workspace, Microsoft Entra, Okta, Auth0… client_id: client_secret_env: ARGUS_OIDC_SECRET # referenced, read at flow time, never stored redirect_url: http://127.0.0.1:8080/api/auth/oidc/callback allowed_domains: [example.com] # only these email domains auto-provision (empty = none) default_role: viewer # role for a just-in-time user; admins promote from there group_claim: groups # optional: IdP claim carrying group names role_map: { argus-admins: admin } # optional: group → console role remediation: # approved cloud remediation: off by default enabled: false # allow admins to dry-run/apply the curated catalog against a cloud account ``` 被抑制的发现会计入 stderr 输出中:抑制绝不是悄无声息的。SSO 是附加功能:配置它会增加一个“使用 SSO 登录”按钮;密码登录和 `argus user add` 继续有效。SSO 和修复均可在控制台的 Admin 标签页中进行编辑。设计详见 [docs/roadmap-platform.md](docs/roadmap-platform.md)。 ## 批准的云修复 云发现的详情面板会提供适用于该发现且经过审查的修复措施(例如:阻止 S3 公开访问、启用默认加密、开启默认 EBS 加密等),每一项都会显示为**将要运行的确切命令**,及其所需的 IAM 权限以及是否可逆。这里没有任何内容是由 LLM 编写的:执行仅限于经过审查的目录,其唯一的变量是从发现中提取的资源属性,并针对严格的语法进行验证,以 argv 形式运行(绝不通过 shell)。 在设置 `remediation.enabled` 之前,该功能处于关闭状态,即使设置之后,每次应用也都是一次明确的 **admin**(管理员)操作:选择一个写入配置(与只读审计配置分开,通过名称引用并在子进程中解析;Argus 内部不接收任何密钥材料),通过 dry-run 进行预览,然后应用。破坏性动词无法进入该目录,修复操作永远不会将发现标记为已修复(只有重新扫描才能将其清除),并且每次 dry-run 和应用都会被记录在审计日志中。 ## GitHub Action `.github/workflows/appsec.yml` 会在每次 PR 时运行:它会进行扫描,将 SARIF 上传到 GitHub 代码扫描功能,并在发现高危及以上严重性的问题时使构建失败。你可以将其复制到任何代码仓库中并调整拦截规则。 ## 输出格式 - **SARIF 2.1.0**:针对官方 schema 进行验证;由 GitHub 代码扫描功能接收(严重性映射到 `security-severity`,以便警报能正确归类;具有稳定的指纹,使警报可跨提交追踪)。 - **Markdown**:人类可读的摘要 + 按严重性分组的发现。 - **JSON**:完整的统一发现模型(`docs/findings-model.md`),包括按工具划分的原始 payload 透传。 ## 文档 - [Pitch](docs/pitch.md):单页简介:问题、切入点、差异化优势 - [Coverage](docs/coverage.md):生成的“语言 × 弱点”矩阵 + 配置 - [Architecture](docs/architecture.md):协调器设计、包布局、设计规则 - [Findings model](docs/findings-model.md):统一的 schema(版本化) - [Risk scoring](docs/risk-scoring.md):0-10 的计算公式以及受限的 LLM 调整 - [Compliance](docs/compliance.md):框架、映射理念、添加新框架 - [Console & pillars](docs/console-ops.md):授权模型、工单、威胁建模、审计 - [Roadmap](docs/roadmap.md):后续计划:DAST、更多云提供商、IAST - [Platform evolution](docs/roadmap-platform.md):SSO、批准的云修复以及“面向所有人”的理念 ## 开发 ``` go build ./... && go test ./... # `go build` alone works; the UI bundle is committed make ui # rebuild the React console into ui/dist (Node 22) make coverage # regenerate docs/coverage.md from a live scan ./demo/demo.sh # the full 10-minute investor story, end to end ./argus scan testdata/fixture # deliberately vulnerable sample; expect findings ``` 基于 Apache-2.0 协议授权。
标签:AI风险缓解, CSPM, DevSecOps, EVTX分析, Go语言, TinkerPop, 上游代理, 云安全态势管理, 前端应用, 安全扫描, 安全漏洞利用, 日志审计, 时序注入, 本地优先, 程序破解