这是什么
SCA Audit 的核心思路是把「审计一个代码仓库」拆解成可并行执行的意图,再交给多个 LLM Agent 分工静态读完源码,最终把结果沉淀成两张可回溯的图:资产图(系统对外暴露了什么)与探索图(我们是如何一步步查到结论的)。
它和传统扫描器的区别在于产出物:
| 对比维度 |
扫描器 / SAST 规则 |
SCA Audit |
| 输入 |
代码 |
代码(只读) |
| 产出 |
规则命中列表 |
接口清单 + 每条接口所需权限、缺陷结论(带 文件:行号 + 代码片段)、依赖可达性判定 |
| 判断依据 |
模式匹配 |
读完整条数据流:参数从哪来 → 过没过校验 → 到没到 Sink |
| 误报处理 |
人工逐条看 |
独立会话复核,结论三态回写漏洞状态 |
| 过程 |
黑盒 |
探索图 + 每次工具调用留痕,可复算 |
只做静态分析。 平台不发起任何网络请求、不执行任何系统命令、不做任何运行时验证——结论必须由源码证据支撑。这不是靠提示词约束,而是在工具装配层物理删除(见下节)。
安全边界(红线)
agent/codeaudit_tools.go 是「Agent 能调用什么」的唯一真源。工具来源侧是三层防线,缺一不可;写入侧另有拦截规则兜底。
① Agent 的通用工具集只从 7 个本地文件工具构造
Read · Write · Edit · MultiEdit · LS · Glob · Grep
没有 Bash,也没有 WebFetch / WebSearch。其余全是平台自己的领域工具(登记资产、写回图、登记漏洞、依赖查询、复核结论)。
② 装配层不再注入危险来源
server/hostTools() 不返回流量工具、自定义工具与 MCP;server/assembly.go 不再展开 MCP 服务器——所以*连 `mcp__` 工具都不会出现在 Agent 的工具列表里**。系统设置里的「MCP」「自定义工具」入口只保留历史数据查看。
③ 兜底黑名单:配置也绕不过去
即使有人往 DB 的 tools 表、可见性配置或宿主工具里塞进危险工具,也会在 AugmentTools 的最后一步按名字剔除:
var codeAuditDeniedTools = []string{
"bash", "shell", "shell_session", "sleep", "monitor",
"webfetch", "websearch", "web_search", "fetch", "curl", "wget", "http", "http_request",
"command", "script", // 自定义工具的 command / script kind(http kind 的 key 就是 "http",已在上行)
"task", "taskoutput", "taskstop", "tasklist", // 子代理会把上述能力递归带进去
"mcp__*", "traffic_*",
"intercept_execute", "intercept_approve",
"browser*", "playwright*", "selenium*",
"nmap*", "nuclei*", "sqlmap*", "ffuf*", "dirsearch*", "hydra*", "metasploit*",
"create_custom_tool", "update_custom_tool", "create_mcp", "update_mcp", "test_custom_tool",
}
④ 写入侧还有拦截规则
被测源码是审计证据,任何改动都会让结论无法复现。拦截规则按优先级匹配工具输入,首条命中即生效:
| 优先级 |
规则 |
匹配 |
动作 |
| 30 |
被测源码只读 |
../source/ |
拒绝 |
| 20 |
工作区外写入需审批 |
../ |
转人工 |
| 10 |
平台不出网 |
https?:// |
拒绝 |
拦截范围只覆盖写入类工具(Write / Edit / MultiEdit)——读工具的常规路径本来就是 ../source、../deps。被拦下的调用会挂在任务详情的「拦截审批」里等待人工裁决。
截图预览
以下截图取自 NEXT_PUBLIC_MOCK=1 的离线 Demo(无后端、内置 acme-mall 演示数据)。完整交互见在线 Demo。
仪表盘(总览 / Token 消耗 / 活动流)

任务列表

任务 · 执行过程(会话 / 工具调用)

探索链路(意图 · 事实 · 漏洞血缘)

发现(跨任务漏洞汇总 · 按严重度 / 任务分组)

漏洞复核(三态结论 + 逐条核对依据)

测试资产 · 接口与所需权限

资产覆盖图(力导向 · 已测高亮 · 节点折叠)

第三方依赖(清单 / 类名索引 / 按需反编译)

人在环路对话

Agent 管理(提示词 / 工具 / 技能可见性)

LLM 配置(多档位 · 轮询与退避)
全 Agent 共享的模型与限速配置,支持多档位切换。实际部署时若需要更灵活的模型 API 中转或备用模型接入,可以结合外部中转服务来提升稳定性。

后端日志(工具调用 / 拦截 / 依赖索引)

一键安装脚本
cd ARTEX
./install.sh
脚本自动检测并安装 Docker,提供两种运行模式:
- Docker 全容器部署:设置 Postgres 密码,自动生成环境配置,
docker compose up -d 启动。
- 本地编译运行:选择数据库,生成配置文件,编译单二进制程序。部署完成后访问
http://localhost:7878,首次进入 /setup 设置管理员密码。
Docker Compose 手动部署
cd ARTEX
cp .env.example .env
# 修改.env,填写数据库密码、大模型API密钥
docker compose up -d
访问 http://localhost:7878,挂载目录持久化技能与审计数据。
预编译二进制包
下载对应系统压缩包,解压得到程序、启动脚本与配置模板。
源码编译单二进制
# 前端打包
cd web && npm ci && npm run build:static && cd ..
cp -r web/out server/webui/dist
# 编译内嵌前端的二进制
CGO_ENABLED=0 go build -tags embedui -o artex ./cmd/artex
./start.sh
跨平台打包 Release
./build.sh --release
自动编译 Linux、macOS、Windows 多架构压缩包,增加 --upx 可压缩二进制(部分环境存在兼容性问题,按需开启)。
项目地址: https://github.com/Ernket/CodeScan-Artex/