AgentScan:挖掘AI Agent暴露面,补全红队资产扫描盲区
速览
随着MCP、A2A及本地LLM服务在公网和内网的广泛部署,传统扫描器难以识别其深层语义风险。开源工具AgentScan通过只读探测和协议解析,精准识别MCP工具调用、A2A Agent Card及各类LLM推理框架。该工具帮助红队和安全团队发现未授权的高权限入口,补全了AI资产管理的扫描盲区。
AI 深度解读
背景
随着大语言模型(LLM)和 AI Agent 在企业内部的快速普及,传统的网络安全边界正在发生深刻变化。研发、数据团队、运维甚至安全团队都在广泛部署本地或内网的 AI 服务,如 Ollama、vLLM、MCP Server 等。然而,这些服务往往被视为“实验性”或“内部工具”,导致其权限配置宽松、认证机制缺失,且极少被纳入传统的 CMDB(配置管理数据库)和安全扫描体系中。
作者在使用 MCP(Model Context Protocol)、A2A(Agent-to-Agent)以及本地 LLM 服务的过程中发现,许多 AI Agent 相关服务已经暴露在公网或内网中。传统的安全扫描工具通常只能识别出“这是一个 HTTP 端口”,却无法深入理解其背后的语义——即该服务是否连接了高权限工具、是否暴露了推理算力、是否具备横向移动的能力。这种“语义盲区”使得红队可能遗漏一层关键的攻击面,而蓝队则面临资产治理的真空。
核心内容
作者开发了一款名为 AgentScan 的开源 Go 语言命令行工具,旨在专门识别和评估 AI Agent 的暴露面。该工具不依赖传统的端口扫描逻辑,而是通过语义探测来揭示服务背后的真实风险。
1. 为什么传统扫描器失效?
传统资产发现仅能回答“哪个端口开着,跑的是什么服务”。但在 AI 时代,一个看似普通的 Web API 背后可能隐藏着巨大的风险:
- MCP Server:可能暴露文件读写、Shell 执行、数据库查询、代码仓库访问甚至 CI/CD 控制等高权限工具调用能力。
- LLM 推理 API:如 Ollama 或 vLLM,可能暴露未受保护的推理算力,甚至泄露内部使用的模型和敏感数据。
- A2A Agent Card:作为 Agent 之间的“名片”,可能包含私网地址、测试环境入口和未授权的接口信息。
2. 三类典型的暴露面分析
MCP Server (Model Context Protocol)
MCP 旨在让 LLM 能够调用外部工具。开发者在本地调试或内网部署时,常忽略认证配置。一旦服务通过端口映射或反向代理暴露,便成为高危入口。
- 风险等级:取决于挂载的工具。
- 挂载
filesystem:可能导致敏感文件读取。 - 挂载
shell:直接导致命令执行(RCE)。 - 挂载数据库工具:可直接查询业务数据。
- 挂载
- 现状:通过 Quake 等测绘平台粗略检索
app:"Model Context Protocol",可发现数万个公网样本,证明其已非纯内网玩具。
A2A Agent Card
A2A 协议允许 Agent 之间互相识别和协作。其标准路径通常位于 /.well-known/agent-card.json 或 /.well-known/agent.json。
- 价值:不适合用于海量公网测绘,但在已知资产授权评估中极具价值。
- 利用方式:通过探测这些路径,获取 Agent 的 skills、provider、endpoint 等信息,进而发现私网地址、JSON-RPC 端点或内部测试环境,为后续横向移动提供线索。
LLM 推理 API
Ollama、vLLM、SGLang、llama.cpp 等框架因启动简单、默认配置宽松而广泛存在。
- 风险:公网暴露导致算力被滥用;内网暴露则涉及数据流向失控和模型资产泄露。
- 识别逻辑:由于框架众多且端口不固定,AgentScan 采用“先端口拉取,后只读接口确认”的策略。
GET /api/tags(Ollama):返回已加载模型列表。GET /v1/models(vLLM/OpenAI 兼容层):返回模型 ID 和类型。GET /health/GET /info:验证服务存活及版本信息。
- 安全性:AgentScan 内置 25 个推理框架的识别模板,仅使用 GET 请求进行只读探测,避免对目标造成干扰。
3. AgentScan 的工作流程与能力
AgentScan 的设计思路是“先存活发现,后语义识别”,以符合实际安全评估流程:
- 资产发现:使用
fscan等工具拉取网段内的存活端口。fscan -h 192.168.1.0/24 -o fscan.txt - 格式转换:将结果整理为
targets.txt,格式为IP:Port。 - 语义识别:调用 AgentScan 进行深度探测。
agentscan scan -f targets.txt --skip-port-scan -o results.json
主要功能模块:
- MCP 探测:支持 Streamable HTTP 和 HTTP+SSE Legacy 协议,解析协议字段和工具信息。
- A2A 探测:抓取 Agent Card,解析 skills、provider、endpoint,检查未授权调用面。
- LLM API 识别:通过 YAML 模板识别 25 个推理框架。
- 报告生成:输出 JSON 数据并自动生成 HTML 报告,便于红队复盘和蓝队整改。
验证结果: 作者在随机抽取的 50 个样本中验证了 AgentScan 的有效性:
- 识别出 15 个无鉴权的 MCP 服务,暴露 116 个可用工具。
- 发现 1 个 A2A 服务。
- 发现 9 个无鉴权的 LLM 平台,泄露 154 个模型信息。
关键要点
- 语义盲区风险:传统扫描器无法识别 AI 服务背后的“工具调用能力”和“数据流向”,导致高权限入口被忽视。
- MCP 的高危性:MCP Server 若挂载 Shell、数据库或文件系统工具且无认证,等同于直接暴露系统控制权或核心数据。
- A2A 的横向价值:A2A Agent Card 是内网探测的“地图”,通过解析其中的 Endpoint 和 Skills,可发现隐藏的内部服务和测试环境。
- LLM 资产治理缺失:Ollama、vLLM 等推理服务常处于 CMDB 盲区,认证薄弱,既是算力黑洞,也是数据泄露源。
- AgentScan 的核心逻辑:采用“只读探测”原则,通过特定的 API 接口(如
/api/tags,/v1/models)而非执行推理请求来识别框架,确保评估过程的安全性和非侵入性。 - 实战工作流:推荐结合
fscan进行端口发现,再使用AgentScan进行语义识别,形成从“端口”到“服务语义”的完整评估闭环。
意义与影响
对红队(攻击方): AI Agent 暴露面提供了一层全新的、往往防御薄弱的入口。通过识别无鉴权的 MCP 或 LLM API,红队可以绕过传统的 WAF 和主机防护,直接利用 AI 工具链进行数据窃取、命令执行或横向移动。A2A 协议的存在甚至可能成为内网横向移动的跳板。
对蓝队(防守方):
- 资产治理紧迫性:AI 服务正在成为企业新的基础设施,必须纳入统一的资产管理和安全扫描体系。
- 最小权限原则:需严格审查 MCP 挂载的工具权限,避免将高权限工具(如 Shell、DB)直接暴露给未认证的 LLM 接口。
- 认证与网络隔离:所有 AI 服务接口必须强制实施认证,并严格限制网络访问范围,避免将调试环境或内网服务意外暴露至公网。
对开源社区: AgentScan 的开源填补了 AI 安全评估工具在“语义层”的空白。它不仅是一个扫描器,更是一个行业标准的参考实现,推动了 MCP、A2A 等新兴协议的安全规范制定。
