mcpField
U
uta-shield

uta-shield

本地服务
wall.utalabs.tech安全02 天前更新

关于 uta-shield

uta-shield 是面向 MCP 服务运营方的零依赖 Node.js 防火墙,也为 Agent 提供 PhishGuard 威胁情报 MCP 服务。它结合身份验证、逐工具授权、威胁筛查、速率限制、DLP、计量和审计日志;README 区分了已交付功能与规划项目。

主要功能

  1. 01HMAC 身份验证和逐工具 ACL
  2. 02入站与出站威胁筛查
  3. 03按 IP 和已验证 Agent 限流
  4. 04DLP 遮罩及编辑策略
  5. 05逐次调用计量和 JSONL 审计
  6. 06PhishGuard IOC 查询与文本筛查

适用场景

  1. 01将 MCP 访问限制为已验证 Agent
  2. 02阻止或编辑调用中的威胁指标
  3. 03按 IP 或 Agent 限制请求速率
  4. 04使用内置情报源筛查 URL 和文本

MCP 相关

作为提供方侧代理,它可包装 MCP 服务并执行身份验证、访问控制、筛查和日志记录。其 PhishGuard MCP 服务以工具形式提供 IOC 查询、URL 与文本筛查、活动列表和情报源信息。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"eddyflores100-lang-uta-shield": {
"command": "npx",
"args": [
"-y",
"uta-shield"
]
}
}
}
启动命令npx -y uta-shield

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmuta-shield0.3.0

工具

5

收录的工具列表 · 更新于 1 天前

参数类型必填说明
valuestring是要检查的指标(domain、url、ip、email、sha256、filename、filepath)

详细介绍

uta-shield

面向 MCP 服务的提供方防火墙 + PhishGuard 威胁情报 MCP 服务——集于一个零依赖软件包中。

主页 / 文档:https://wall.utalabs.tech

MCP 安全类别中的所有网关(Lasso、Mintive、Obot、agentgateway、Cequence)保护的都是使用方——即员工将 Agent 连接到第三方服务的公司。没有任何产品保护运营方——也就是发布 MCP 服务、并将数据库暴露给互联网上所有匿名 Agent 的 SaaS 服务商。

uta-shield 则从另一侧提供保护:将它套在你自己的 MCP 服务外,就能获得已验证身份、按工具授权、威胁情报拦截(入站和出站)、双层速率限制、DLP 脱敏、代理加固、逐次调用计量和 JSONL 审计记录——无需修改服务端代码。

其依据是一场真实且有记录的攻击行动:taikotalent 网络钓鱼事件(针对开源开发者的假招聘人员恶意软件,相关域名在约 12 小时内被下线,C2 基础设施已追踪)。随附的情报源包含其中 23 个已验证的 IOC。

快速开始

# 1. Screen any indicator offline (exit code 1 on match → scriptable)
npx uta-shield check gaganata.ink          # → MATCH (C2, campaign taikotalent-2026-10)
npx uta-shield check example.com           # → NO_MATCH

# 2. Screen text (email body, web content, tool output)
echo "verify at https://taikotalent.xyz/verify_m" | npx uta-shield screen

# 3. Run the PhishGuard MCP server (agents get lookup_ioc / check_url / screen_text)
npx uta-shield mcp

# 4. THE FIREWALL: wrap your MCP server (fail-closed: keys or explicit opt-out)
cat > keys.json <<'EOF'
{ "recruiter-agent": "generate-a-long-random-secret", "auditor-agent": "another-secret" }
EOF
npx uta-shield wrap --upstream http://localhost:3001 --port 8787 --keys-file keys.json --admin-token "$(openssl rand -hex 24)"
#    → agents now talk to :8787; your server stays at :3001
#    GET /health · GET /pricing (x402-ready) · GET /audit (admin-only: x-uta-admin header)

# 5. See it all live
node demo/run-demo.mjs

已验证身份(v0.2.0,ACL 严格模式 v0.2.2)

身份验证不再仅依赖声明。Agent 需提供三个标头:

x-agent-name:      recruiter-agent
x-agent-timestamp: 1761196800000            (ms; ±5 min window)
x-agent-signature: <hex>                    HMAC_SHA256(secret, `${agent}|${ts}|${sha256(rawBody)}`)
  • 签名有效 → ALLOW_VERIFIED(按 Agent 分桶限速、执行 ACL、计量)。
  • 提供了凭证但凭证无效 → REJECT_AUTH(401)。始终采用失败即关闭。
  • 未提供凭证 → REJECT_ANON(401),除非运营方传入 --allow-anonymous。
  • 未签名的声明名称仅作为标签,标记为 verified:false——不会获得按 Agent 分桶的速率限制。
  • 按工具设置 ACL(--acl-file):默认情况下,不在映射表中的 Agent 不受限制。要采用允许列表语义,请添加 --acl-deny-unlisted——未列出的 Agent 即使签名有效,也会收到 403 REJECT_FORBIDDEN。没有 ACL 文件时,CLI 会拒绝 --acl-deny-unlisted(没有映射表时,拒绝未列出的 Agent 会导致所有 Agent 都被拒绝)。/health 会披露 identity.acl_deny_unlisted。

请求签名(客户端侧,任意语言):

import { createHmac, createHash } from "node:crypto";
const ts = Date.now();
const bodyHash = createHash("sha256").update(rawBody).digest("hex");
const sig = createHmac("sha256", secret).update(`${agent}|${ts}|${bodyHash}`).digest("hex");

8 个层级

#层级v0.2.2 中的状态
1Agent 身份:已验证 HMAC-SHA256(--keys-file、防重放时间窗口、失败即关闭)+ 按工具设置 ACL(--acl-file)+ 声明式 / 匿名回退已发布
2每个 Agent 的信誉评分hook(记录身份判定结果;评分功能列入路线图)
3入站 / 出站威胁情报:拦截入站参数;出站响应遵循明确的策略(--outbound-policy block|redact|log,默认 redact)已发布
4速率限制:双层——按 IP 分桶(始终启用)+ 按 Agent 分桶(仅限已验证身份);免费 / 付费层级已发布
5计费:逐次调用计量 + 兼容 x402 的定价清单(结算委托给运营方的支付层)已发布(计量)
6DLP:电子邮件地址(明文 + 混淆形式)、JWT、AWS / GCP 密钥、GitHub PAT、Stripe 密钥、Bearer 令牌、PEM 区块、十六进制密钥、信用卡号(通过 Luhn 算法校验)、可选的 Base64 内容块已发布
7反向漂移警报(架构变化时通知客户端)路线图
8审计:按决策记录 JSONL(指标 + 活动信息供排查使用,绝不记录原始参数或密钥)已发布

如实说明:本 README 标注的功能均与实际发布内容一致。第 2 和第 7 层只是设计接口,不作夸大宣传。

代理加固(v0.2.1)

控制项默认值标志
启动时默认拒绝未指定 --keys-file 或 --allow-anonymous 时拒绝运行—
/audit 需要身份验证未提供令牌时禁用(404);提供令牌时,需通过 x-uta-admin 验证(采用时序安全比较)——审计记录包含 IOC 和 Agent 名称,属于运营遥测信息,绝不公开--admin-token SECRET / UTA_SHIELD_ADMIN(≥16 个字符)
请求正文大小上限1 MiB(包括声明值和流式传输值——伪造标头无济于事)--max-body-bytes N
上游超时30 s → 504,固定消息--upstream-timeout-ms N
MCP 方法允许列表initialize、notifications/initialized、ping、tools/list、tools/call → 其他所有方法均返回 403 METHOD_DENIED--allow-methods "a,b" | "*"
安全错误上游故障返回固定消息;详情写入审计日志,绝不发送给客户端—
精确的出站判定x-uta-shield 响应标志是核心判定(OUT_OK/OUT_MASKED/OUT_REDACTED/OUTBOUND_INTEL)——不重新计算;policy=log 报告 OUTBOUND_INTEL,绝不会返回看似正常的 OUT_OK—
原始正文转发按原始字节转发至上游(保证签名完整性)—
每 IP 速率上限120 req/min,突发上限 60-- 通过 API 配置
标头超时标头 10 s,请求超时 = 上游超时 + 5 s自动

已知限制(如实说明适用范围)

  • 身份验证采用 HMAC 共享密钥(由运营方颁发)。它可验证 Agent 对运营方的身份,但不是联邦 PKI。/.well-known/agent.json 来源验证仍是补充机制。
  • policy=log 会记录出站 IOC,但仍会将其放行——该模式供明确选择启用的运营方使用;安全选项是 redact(默认)或 block。
  • 混淆邮箱和十六进制密钥的 DLP 模式采用启发式检测,可能误报(可通过 dlp 选项调整)。
  • 不终止 TLS——请在现有反向代理(Caddy/nginx/certbot)后运行。
  • 附带的情报源仅包含 1 个有文档说明的攻击活动(23 个 IOC)。情报源数据采用 CC-BY-4.0 许可;可通过添加自己的攻击活动进行扩展。

为什么零依赖?

拥有 47 个传递依赖的安全产品不是防御,而是攻击面。uta-shield 是约 1,600 行可审计的 Node.js ≥18(ESM)代码,其中包括手写的 MCP stdio 实现(以换行符分隔的 JSON-RPC 2.0)。npm pack 后约为 108 kB 解包大小 / 54 kB 压缩包。

内置情报源

feed/iocs.json(架构 pg/1)附带攻击活动 taikotalent-2026-10:涵盖 9 种类型的 23 个 IOC——钓鱼域名(已由注册商客户端将其状态设为 clientHold),位于 Cloudflare 后方的在线 C2 域名、发件人 IP、假冒招聘人员邮箱、暂存器 URL、载荷的 sha256、通配符二阶段路径(/var/tmp/.kdm.*)、互斥体名称——并包含 MITRE ATT&CK 映射(T1566.002、T1656、T1204.002、T1059.004、T1027、T1071.001、T1070.004、T1583.001)和每个 IOC 的上下文。每项判定都会附带这些证据,供下游 Agent 推断自己为何被拦截。

情报源数据来自公开案例仓库,采用 CC-BY-4.0 许可。添加攻击活动对象即可更新或扩展;架构由 uta-shield verify-feed 验证。

作为 MCP 服务(面向 Agent,而不只是运营方)

Agent 可通过工具获取情报:lookup_ioc(value)、check_url(url)(情报源 + 启发式建议)、screen_text(text)、list_campaigns()、feed_info()。每个响应都是数据——服务绝不会获取或执行任何内容。

商业方案

方案内容价格
自托管(本软件包,许可使用)所有随附层和内置情报源——在自己的基础设施上运行,允许商用免费
S7 — 托管情报源订阅更新后的攻击活动情报源 + Webhook 告警 + YARA 规则$50/mes(前 100 个持有 ATC 的 Agent 免费)
S6 — Shield 评估 + pilotoMCP 服务审计 + 部署的 piloto(身份验证 + 情报 + 审计)+ 报告$1,000 setup + $100/mes/server

联系:AliceLabs LLC — [email protected]

测试(可复现)

node --test test/*.test.mjs   # 85 tests: identity/HMAC, strict-ACL, outbound policies, DLP formats,
                             # authenticated /audit, exact verdict propagation, streamed overflow,
                             # MCP client lifecycle e2e, proxy limits,
                              # two-tier rate limits, hardened proxy e2e (413/502/504/403/429),
                              # feed matching, MCP protocol
npm run verify-feed           # feed schema validation
npm run demo                  # end-to-end with signed traffic

独立执行: .github/workflows/tests.yml 会在每次推送时,使用 GitHub 自有运行器(Node 20/22/24)运行完整测试套件——结果公开,且不依赖本文件中的说法。

v0.2.2 的测试结果:请参阅 EVIDENCE.md(命令、Node 版本、完整运行器摘要)。

从 v0.1.0 迁移到 v0.2.0(有破坏性变更)

  • 未指定 --keys-file/UTA_SHIELD_KEYS/--allow-anonymous 时,wrap 拒绝启动(默认失败关闭)。
  • 未验证调用方的速率限制按 IP 设置;声明的 Agent 名称不再创建独立的 Agent 桶。
  • gateOut 的默认行为从透传改为 redact。设置 outboundPolicy:"log" 可恢复 v0.1.0 的行为。
  • 审计流新增判定结果:ALLOW_VERIFIED、REJECT_AUTH、REJECT_FORBIDDEN、OUT_REDACTED、OUT_BLOCKED、UPSTREAM_ERROR。

从 v0.2.0 迁移到 v0.2.1(有破坏性变更)

  • GET /audit 不再支持无凭据访问。 未设置 --admin-token(或 UTA_SHIELD_ADMIN)时,会返回 404;设置令牌后,必须提供 x-uta-admin 标头。匿名抓取 /audit 的仪表板必须提供操作员令牌。响应标记 x-uta-shield 现在表示精确的核心判定结果——使用 policy=log 的用户将看到 OUTBOUND_INTEL,而非此前标记错误的结果。

从 v0.2.1 迁移到 v0.2.2

  • 增量更新。--acl-deny-unlisted 可启用可选的严格 ACL(允许列表语义);使用此标记但未指定 --acl-file 时,CLI 会拒绝启动(失败关闭)。新增审计判定结果:BODY_TOO_LARGE(适用于两种 413 路径——v0.2.1 新增了 AUDIT_DISABLED/AUDIT_DENIED)。新增公共 CI——现有运营者的其他内容均不变。

授权使用——请参阅 LICENSE(使用许可 / 使用许可)。© 2026 AliceLabs LLC。商业例外(白标、OEM、再分发、托管服务):[email protected]

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。