ayaanmaliksgithub/virgil

GitHub: ayaanmaliksgithub/virgil

Virgil 将安全扫描结果通过聚类、可达性分析和 LLM 排序转化为可操作的修复优先级队列,解决传统扫描器只罗列发现而不帮分类的问题。

Stars: 0 | Forks: 0

# virgil ``` $ virgil scan . bundle /work/myrepo → zip → submit ┌─ [ virgil ] ────────────────────────────────────────────────────────────────┐ │ audit_id c9b1… │ │ source scan.zip │ │ state succeeded phase=completed │ └────────────────────────────────────────────────────────────────────────────┘ CRIT HIGH MED LOW INFO KEV unreach 2 7 14 6 3 1 19 ╭─ [ fix.this_week() · ranked ] ─────────────────────────────────────────────╮ │ // these are the clusters the auditor ranked for this week │ │ │ │ #01 [ CRIT ] Hard-coded AWS access key in source ×3 │ │ Critical credential exposure with CISA-KEV-adjacent risk profile… │ │ │ │ #02 [ HIGH ] SQL injection via raw query helper ×12 │ │ 12 callsites share src/db/query.py — fix the helper, not callsites. │ │ … │ ╰────────────────────────────────────────────────────────────────────────────╯ ``` ## 为什么需要另一个安全扫描器 有很多工具会直接丢给你 200 条发现结果然后转身就走。这个项目 押注真正的问题不在于*发现*问题 —— Semgrep、Trivy、Gitleaks、CodeQL 已经很擅长这个了 —— 而在于通过输出 **赢得你的关注**。因此,这里的重点是扫描器 吐出 JSON 之后的所有事情: - **聚类,而非罗列。** 分布在 12 个调用点的 47 个 SQL 注入发现结果 会折叠成一个聚类 —— 直接指向共享的 helper,而不是你必须滚动的 47 行记录。 - **可达性优先。** 你并未实际导入的包中的依赖项 CVE 会降低一个严重级别并默认隐藏。支持五种语言家族 (Python、JS/TS、Go、Ruby、Java/Kotlin)。 - **“本周修复”队列。** 排名前 K 的聚类会由审计器进行排序, 并为每个项目提供一行理由。无论是否有 LLM 介入均可工作 —— 我们提供了一个确定性的降级方案。 - **基于代码的聊天。** 每条发现结果都附带了一份经过脱敏处理的 30 行 代码切片。聊天检索器会使用它,这样 审计器就可以说“第 42 行的输入在前面两行已经参数化了”, 而不是泛泛而谈。 - **审计,而非利用。** 每个 LLM 输出都会经过安全 验证器,该验证器会拒绝 payload、diff 和详细的利用步骤。原始 密钥在被存储、渲染或发送到 模型之前就会被清除。 - **取证反汇编器风格的 UI。** 没有花哨的光球。表格数字、十六进制 侧边栏、终端氛围。如果你平时习惯使用 JetBrains Mono 阅读 代码,这会让你感到宾至如归。 ## 开始使用 Virgil 是一个位于 的托管服务。每个账户都有 3 次免费审计机会 —— 登录,粘贴一个 GitHub URL(或上传一个 zip 压缩包), 几分钟后即可阅读排序后的分类结果。 **关于自托管:** 此仓库是托管服务的真正源码 (Apache-2.0 —— 阅读它、审计它,这就是开源的意义),你看到的 compose 文件就是生产环境的实际运行方式。但自托管并非受支持的 官方途径:账户、积分和 CLI 登录都与托管 服务绑定,且没有匿名模式。如果你 fork 它并成功运行, 这正是许可证按预期发挥作用的体现 —— 只是你脱离了官方维护的平坦大道。 在终端中运行: ``` pipx install virgilhq # binary on $PATH is `virgil` virgil login # device-code flow, one time virgil scan . # current dir virgil scan github.com/OWASP/NodeGoat # bare host virgil scan OWASP/NodeGoat # GitHub shorthand virgil clusters # ranked, severity-grouped virgil chat # streamed Q&A, grounded in this audit virgil report --format sarif -o findings.sarif ``` 退出代码符合 CI 的需求: ``` virgil scan . --fail-on critical # exits 1 if any Critical lands ``` ## 在你的编辑器 (VS Code) 中阅读发现结果 位于 [apps/vscode/](apps/vscode/) 的 VS Code 扩展可在编辑器内部驱动 `virgil` CLI。从命令面板运行扫描, 即可将发现结果作为原生的 VS Code 诊断信息呈现 —— 违规行上的波浪线、 “问题”面板中的汇总,以及可点击跳转至浏览器审计的 状态栏计数 (`virgil: 2C 7H 12M · c9b1d8a3`)。 目前尚未上架 Marketplace (v0.2)。现阶段操作方式: ``` cd apps/vscode npm install && npm run compile # 然后使用 `vsce` CLI 运行 `code --install-extension .`, # 或者在 VS Code 中打开文件夹并运行 "Extensions: Install from VSIX…" ``` 安装完成后,运行 **Virgil: Scan workspace** (Cmd-Shift-P) —— 扩展会通过 CLI 提交扫描,固定生成的审计 ID,并 每 5 分钟刷新一次诊断信息。设计上为只读模式 —— 抑制 和基线管理仍保留在 Web UI 中完成。 ## 隐私 - **CLI 中无遥测。** 没有分析追踪器,没有匿名使用情况 ping,没有选择加入/退出选项,因为根本没有什么可加入的。 - **存储前进行密钥清除。** AWS 访问密钥、GitHub PAT、 JWT、Slack token、Google API 密钥、私钥块、RFC1918 IP 和主机路径会在发现结果被持久化到数据库 *之前* 以及在发送任何 prompt 给模型 *之前* 进行脱敏。 - **沙盒执行。** 你的仓库代码永远不会被执行。扫描器 在配置了 `--network=none --read-only --cap-drop=ALL` 的容器中运行,并 限制了 CPU/内存/pids,同时使用非 root 的 UID。 - **设计上仅用于审计。** 平台不会生成 payload、 精确补丁或详细的复现步骤 —— 验证器会在每个模型 输出上强制执行此规则。仅提供防御性指导。 ## 仓库布局 ``` apps/ api/ FastAPI service — routes, DB models, SSE stream worker/ Celery worker — sandbox runner, scanner adapters, normalize, LLM web/ Next.js 14 (App Router) — landing, audit console, findings, reports cli/ `virgil` CLI vscode/ VS Code extension — inline diagnostics, status-bar rollup packages/ audit_core/ Shared Pydantic models + enums shared-schemas/ JSON Schema for the Finding contract docker/ Per-service Dockerfiles (incl. the sandbox scanner image) tests/ Unit tests; pytest ``` 完整的设计文档:[ARCHITECTURE.md](ARCHITECTURE.md)。 ## 许可证 Apache-2.0。详见 [LICENSE](LICENSE)。
标签:DLL 劫持, StruQ, 大语言模型, 漏洞分拣, 自托管, 请求拦截, 逆向工具, 静态应用安全测试