深入源码:AgentShield 扫描器架构与 TypeScript 实现原理(TypeScript 开发者完全指南)
【免费下载链接】agentshieldAI agent security scanner. Detect vulnerabilities in agent configurations, MCP servers, and tool permissions. Available as CLI, GitHub Action, ECC plugin, and GitHub App integration. ️项目地址https://gitcode.com/gh_mirrors/ag/agentshield点击查看免费下载AgentShield 是一个开源的AI agent 安全扫描器AI agent security scanner用 TypeScript 编写专门扫描 Claude Code 等 AI agent 配置中的硬编码密钥、权限过度开放、hook 注入和 MCP 服务器风险。本文带你深入源码逐层拆解它的扫描器架构与核心实现原理帮助 TypeScript 开发者快速理解一个生产级安全扫描工具的完整设计。一、AgentShield 是什么102 条规则的安全引擎AgentShield 的用法极简——一条命令扫描整个.claude/目录npx ecc-agentshield scan它会输出一份 0–100 分的评分报告A–F 等级覆盖102 条规则、5 大类别类别规则数典型检测项Secrets密钥泄露10API key、token、私钥、连接字符串Permissions权限审计10Bash(*)通配符权限、缺失 deny 列表Hooks钩子分析34命令注入、数据外泄、静默失败MCP ServersMCP 安全23远程传输、npx -y自动安装、敏感参数AgentsAgent 配置25提示注入、隐藏指令、定时炸弹仓库自带了可直接扫描的靶场examples/vulnerable/运行npm run scan:demo就能立即看到完整报告效果。二、整体架构一次 Scan 的完整路径AgentShield 的源码组织非常清晰整个扫描流程是一条单向管线数据只向前流动CLI 入口 (commander) ↓ 文件发现 (scanner/discovery.ts) ↓ 规则执行 (rules/*.ts102 条规则) ↓ Finding 标注 (source-context.ts 置信度分类) ↓ 评分引擎 (reporter/score.ts) ↓ 多格式渲染 (reporter/终端 / JSON / HTML / SARIF)各模块职责一目了然核心目录结构如下模块路径职责CLI 入口src/index.ts基于 commander 的命令解析与流程编排扫描编排src/scanner/index.ts发现文件、执行规则、收集 Finding规则实现src/rules/按类别拆分的 10 个规则文件类型系统src/types.tsFinding、Rule、SecurityReport 等核心类型评分引擎src/reporter/score.ts扣分制评分与 A–F 评级自动修复src/fixer/index.ts安全修复的验证与回滚深度分析src/opus/pipeline.ts三智能体对抗式分析管线三、源码逐层拆解扫描管线的 4 个阶段3.1 文件发现如何找到所有该扫的文件入口函数 discoverConfigFiles 是整个管线的起点它做了几件精巧的事跳过噪声目录内置IGNORED_DIRS黑名单node_modules、dist、.git等 13 个目录避免扫描生成物导致结果重复多根目录探测通过CLAUDE_ROOT_MARKERSclaude.md、settings.json、mcp.json等文件名自动识别仓库中所有.claude/根而不是只扫顶层目录悬空符号链接检测一个指向不存在的 skill 符号链接意味着 agent 认为自己有某个能力但实际解析不到——这种幽灵技能会被直接产出为一条 Finding。每个文件被发现时都被赋予了ConfigFileTypeclaude-md、settings-json、mcp-json、hook-script等后续规则会依据这个类型决定是否参与检查。3.2 规则注册一个函数装下 100 条规则所有内置规则由 getBuiltinRules 统一导出——它只是把 10 个规则文件的数组展开拼接return [ ...secretRules, // 10 条 ...permissionRules, // 10 条 ...hookRules, // 34 条 ...mcpRules, // 23 条 ...agentRules, // 25 条 ... ];每条规则本质是一个声明式对象 检查函数的配对。以密钥检测 src/rules/secrets.ts 为例核心就是一张正则模式表{ name: anthropic-api-key, pattern: /sk-ant-[a-zA-Z0-9_-]{20,}/g, description: Anthropic API key, },这种数据驱动的设计让新增规则零成本。更妙的是外部规则包机制src/rules/external.ts 支持--rule-pack参数加载社区 JSON 规则包与内置规则同样参与评分——但加载时采用fail-closed策略JSON 非法、schema 不合规、正则无法编译扫描直接中止而非静默跳过。3.3 评分引擎从 Finding 到 A–F 等级calculateScore 采用扣分制从 100 分起步每个 Finding 按严重程度扣分严重程度扣分critical25high15medium5low2总分是 5 个类别分数的平均值再映射为等级≥90 为 A40 为 F。评分引擎最有价值的部分是置信度折扣confidenceWeight并非所有 Finding 都同等可信。扫描器先通过 source-context.ts 判断文件来源——在docs/、examples/等示例路径下发现的模板文件扣分权重降至0.25且单文件单类别上限 10 分防止一个 MCP 目录文件刷分settings.local.json这类项目本地配置降权至0.75插件缓存和插件清单降权至0.5但真实密钥永不降权——即使是文档里的密钥泄露也保持满额扣分。这套来源感知机制runtimeConfidence字段是 AgentShield 控制误报的核心设计值得做静态分析工具的同学重点阅读。3.4 多格式输出一份数据五种渲染扫描结果统一汇入SecurityReport类型由 src/reporter/ 下的独立渲染器分别消费terminal.ts彩色终端、json.tsCI 管道、html.ts自包含高管报告、sarif.tsGitHub 代码扫描标准格式。渲染器之间零依赖新增输出格式只需实现一个渲染函数。四、TypeScript 实现亮点4 个值得学习的工程细节4.1 不可变优先的类型建模Rule 接口 定义了整个规则引擎的契约——每条规则是一个纯函数式对象export interface Rule { readonly id: string; readonly severity: Severity; readonly check: ( file: ConfigFile, allFiles?: ReadonlyArrayConfigFile ) ReadonlyArrayFinding; }readonlyReadonlyArray贯穿全库src/types.ts 中Finding、SecurityReport均为不可变结构类型系统在编译期就阻止了对扫描结果的意外篡改。4.2 Zod Schema 校验不可信输入外部规则包通过 RulePackSchema 做运行时校验z.enum严格限定严重程度和类别枚举值并限制单规则单文件最多 200 条 Finding 以防御病态规则包。对外部输入 fail-closed是安全工具的第一原则。4.3 动态模块懒加载CLI 入口 对注入测试、沙箱、污点分析等重模块采用await import() try/catch 懒加载const { runInjectionSuite } await import(./injection/index.js);好处有二基础扫描不受扩展模块拖累且某个可选模块损坏时扫描主流程依然可用。这是 CLI 工具隔离可选功能的典型模式。4.4 tsup 双入口构建策略tsup.config.ts 定义了两种截然不同的构建目标CLI / 库入口依赖保持 external由 npm 消费者自行安装GitHub Action 入口通过noExternal把所有运行时依赖内联进单文件——因为 Action runner 执行的检出目录没有node_modules还特别用 banner 注入createRequire解决 CJS 依赖在 ESM bundle 中的require(process)崩溃问题。这份构建配置是同一份代码多种分发形态的绝佳范例。五、快速上手阅读推荐三步阅读路径先读类型通读 src/types.tsFinding、Rule、SecurityReport三个接口就是全局地图跟主线跑一遍从 src/index.ts 的scan命令 → scan() →getBuiltinRules()→calculateScore()20 分钟走完主链路跑真实用例npm run scan:demo扫描内置脆弱示例配合 tests/ 下 60 个测试文件每个规则家族都有回归测试理解边界行为。想验证规则准确性仓库还内置了攻击语料库--corpus-gateCI 中强制要求所有已知攻击向量保持可检出。六、总结AgentShield 的源码是一次 TypeScript 工程实践的完整展示数据驱动的规则引擎让 102 条检测规则保持可维护来源感知评分优雅地平衡了检出率与误报不可变类型建模保证了数据流的确定性而fail-closed 校验与懒加载则体现了安全工具的审慎姿态。无论你是想做静态分析工具、CLI 框架还是学习 TypeScript 类型设计这个代码库都值得花时间精读。赞分享【免费下载链接】agentshieldAI agent security scanner. Detect vulnerabilities in agent configurations, MCP servers, and tool permissions. Available as CLI, GitHub Action, ECC plugin, and GitHub App integration. ️项目地址https://gitcode.com/gh_mirrors/ag/agentshield点击查看免费下载相关推荐CANN/driver DCMI P2P查询接口dcmi\_get\_p2p\_enablea nameZH CN_TOPIC_0000002517558685 /a 函数原型a namezh驱动开发人工智能CANN深入理解 TypeScript 编译器一扫描器 Scanner —— 源码到 Token 流的转换器TypeScript Deep Dive 中文版深入理解 TypeScript 编译器一扫描器 Scanner —— 源码到 Token 流的转换器TypeScript Deep Dive 中文版文档教程OWASP Nettacker代码审计指南深入理解扫描器实现原理OWASP Nettacker是一款开源的自动化网络安全扫描框架能够帮助安全研究人员进行渗透测试和漏洞扫描。本文将深入分析Nettacker的代码架构、扫描流渗透测试漏洞扫描网络安全应用安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考