uta-shield Remote (Barter-enabled) について
uta-shield Remote は、MCP サービスを公開する運営者向けのファイアウォール兼 PhishGuard MCP サーバーです。対象サーバーのコードを変更せずに、署名付きの本人確認、アクセス制御、脅威情報の検査、データマスキング、レート制限、計測、監査を追加します。
主な機能
- 01HMAC によるエージェント認証とツール別 ACL
- 02入出力の脅威情報チェック
- 03二段階のレート制限と呼び出し計測
- 04DLP マスキングとプロキシ強化
- 05JSONL による判定監査ログ
- 06PhishGuard の IOC 検索とテキスト検査
活用シーン
- 01公開 MCP サービスへのアクセス制限
- 02通信中の脅威指標の遮断またはマスキング
- 03認証済みエージェントの制限と計測
- 04URL やテキストのフィッシング指標検査
MCP 対応
プロキシとして運営者の MCP サービスをラップし、本人確認、認可、通信検査、監査を適用します。PhishGuard MCP サーバーは IOC 検索、URL・テキスト検査、キャンペーン一覧、フィード情報のツールを公開します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://wall.utalabs.tech/mcpclaude mcp add --transport http eddyflores100-lang-uta-shield-remote https://wall.utalabs.tech/mcp{"mcpServers":{"eddyflores100-lang-uta-shield-remote":{"type":"http","url":"https://wall.utalabs.tech/mcp"}}}Cursor で開く{"servers":{"eddyflores100-lang-uta-shield-remote":{"type":"http","url":"https://wall.utalabs.tech/mcp"}}}VS Code で開く{"mcpServers":{"eddyflores100-lang-uta-shield-remote":{"type":"http","url":"https://wall.utalabs.tech/mcp"}}}{"mcpServers":{"eddyflores100-lang-uta-shield-remote":{"serverUrl":"https://wall.utalabs.tech/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
uta-shield
MCP サーバー向けプロバイダー側ファイアウォール + PhishGuard 脅威インテリジェンス MCP サーバー — 依存関係ゼロのパッケージにまとめました。
ランディングページ/ドキュメント:https://wall.utalabs.tech
MCP セキュリティカテゴリのすべてのゲートウェイ(Lasso、Mintive、Obot、agentgateway、Cequence)が保護するのはコンシューマー、つまり従業員がエージェントをサードパーティーのサーバーに接続する企業です。運営者、つまり MCP サーバーを公開し、インターネット上のあらゆる匿名エージェントにデータベースを公開する SaaS を保護するものはありません。
uta-shield はその反対側を担います。お使いの MCP サーバーをラップするだけで、サーバーのコードに手を加えることなく、検証済みの ID、ツールごとの認可、脅威インテリジェンスによるブロック(受信・送信の両方)、2段階のレート制限、DLP マスキング、プロキシの強化、呼び出しごとの計測、JSONL 監査ログを利用できます。
実際に記録され、詳細が公開されているキャンペーンに基づいています。taikotalent フィッシング事例(オープンソース開発者を狙った偽採用担当者のマルウェア。ドメインは約12時間で停止され、C2 インフラが追跡されました)。同梱フィードには、検証済み IOC が23件含まれています。
クイックスタート
# 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
検証済み ID(v0.2.0、ACL 厳格モード v0.2.2)
ID は宣言するだけでは不十分になりました。エージェントは3つのヘッダーを送信します。
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(エージェントごとのレート制限バケット、ACL 適用、計測)。 - 提示された認証情報が無効 →
REJECT_AUTH(401)。常にフェイルクローズです。 - 認証情報なし →
--allow-anonymousを指定しない限りREJECT_ANON(401)。 - 署名のない宣言名はラベルにすぎず、
verified:falseとなり、エージェントごとのレート制限バケットは割り当てられません。 - ツールごとの ACL(
--acl-file):デフォルトでは、マップに含まれないエージェントに制限はありません。許可リスト方式にするには、--acl-deny-unlistedを追加します。リストにないエージェントは、有効な署名があっても403 REJECT_FORBIDDENとなります。ACL ファイルなしでの--acl-deny-unlistedの指定は CLI によって拒否されます(マップなしでは、リストにないエージェントを拒否するとすべてのエージェントが拒否されるためです)。/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 の状況 |
|---|---|---|
| 1 | エージェント ID:HMAC-SHA256 検証済み(--keys-file、リプレイ防止ウィンドウ、フェイルクローズ)+ ツールごとの ACL(--acl-file)+宣言/匿名のフォールバック | 提供済み |
| 2 | エージェントごとのレピュテーションスコア | フック(ID 判定を記録。スコアリングはロードマップ) |
| 3 | 受信/送信の脅威インテリジェンス:受信引数はブロック、送信レスポンスは明示的なポリシーに従います(--outbound-policy block|redact|log、デフォルトは redact) | 提供済み |
| 4 | レート制限:2段階 — IP ごとのバケット(常時)+エージェントごとのバケット(検証済みの場合のみ)。無料/有料プラン | 提供済み |
| 5 | 課金:呼び出しごとの計測+x402 対応の価格マニフェスト(決済処理は運営者の決済レイヤーに委任) | 提供済み(計測) |
| 6 | DLP:メールアドレス(通常形式と難読化形式)、JWT、AWS/GCP キー、GitHub PAT、Stripe キー、ベアラートークン、PEM ブロック、16進数のシークレット、クレジットカード番号(Luhn 検証済み)、オプションの Base64 ブロブ | 提供済み |
| 7 | 逆方向のドリフトアラート(スキーマ変更時にクライアントへ通知) | ロードマップ |
| 8 | 監査:判定ごとの JSONL(トリアージ用のインジケーターとキャンペーンを記録。引数やシークレットの生データは記録しません) | 提供済み |
誠実性の方針:この README では、実際に提供されている機能を正確に示しています。レイヤー2と7は設計上のフックであり、誇張した主張はありません。
プロキシの強化(v0.2.1)
| 制御項目 | デフォルト | フラグ |
|---|---|---|
| 起動時のフェイルクローズ | --keys-file または --allow-anonymous がない場合、実行を拒否します | — |
/audit の認証 | トークンがない場合は無効(404)です。トークンがある場合は x-uta-admin が必要です(タイミングセーフ比較)。監査証跡には IOC とエージェント名が含まれるため、運用者向けテレメトリであり、公開されることはありません | --admin-token SECRET / UTA_SHIELD_ADMIN(16文字以上) |
| リクエスト本文の上限 | 1 MiB(宣言値とストリーミングの両方を制限するため、ヘッダーの偽装では回避できません) | --max-body-bytes N |
| 上流タイムアウト | 30 秒 → 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 リクエスト/分、バースト 60 | API 経由で -- を設定 |
| ヘッダーのタイムアウト | ヘッダーは 10 秒、リクエストのタイムアウトは上流タイムアウト + 5 秒 | 自動 |
既知の制限事項(適用範囲を正直に説明)
- ID の検証には、HMAC 共有シークレット(運用者が発行するキー)を使用します。エージェントから運用者への認証には使えますが、フェデレーション PKI ではありません。
/.well-known/agent.jsonのオリジン検証は、引き続き補助的なフックとして機能します。 policy=logは送信 IOC を記録しますが、そのまま通過させます。明示的に選択する運用者向けの設定です。安全な選択肢はredact(デフォルト)またはblockです。- 難読化されたメールアドレスと 16 進数のシークレットを検出する DLP パターンはヒューリスティックであり、誤検出が発生する可能性があります(
dlpオプションで調整してください)。 - TLS 終端には対応していません。既存のリバースプロキシ(Caddy/nginx/certbot)の背後で実行してください。
- 同梱フィードには、ドキュメント化されたキャンペーンが 1 件含まれます(IOC は 23 件)。フィードデータは CC-BY-4.0 です。独自のキャンペーンを追加して拡張してください。
依存関係ゼロの理由
推移的依存関係が 47 個あるセキュリティ製品は、防御ではなく攻撃対象領域です。uta-shield は、手書きの MCP stdio 実装(改行区切りの JSON-RPC 2.0)を含む、監査可能な約 1,600 行の Node.js ≥18(ESM)で構成されています。npm pack のサイズは、展開後で約 108 kB、tarball で 54 kB です。
同梱フィード
feed/iocs.json(スキーマ pg/1)には、キャンペーン taikotalent-2026-10 が含まれています。9 種類の IOC が 23 件あり、フィッシングドメイン(レジストラの clientHold により停止済み)、Cloudflare の背後にある稼働中の C2 ドメイン、送信者 IP、偽の採用担当者メールアドレス、ステージャー URL、ペイロードの sha256、第 2 段階で使われるワイルドカードパス(/var/tmp/.kdm.*)、ミューテックス名が含まれます。MITRE ATT&CK マッピング(T1566.002、T1656、T1204.002、T1059.004、T1027、T1071.001、T1070.004、T1583.001)と IOC ごとのコンテキストも含まれます。すべての判定にはこの証拠が付随するため、下流のエージェントはブロックされた理由を推論できます。
フィードデータは、公開されている事例リポジトリの CC-BY-4.0 に基づいています。キャンペーンオブジェクトを追加して更新・拡張できます。スキーマは uta-shield verify-feed によって検証されます。
MCP サーバーとして(運用者だけでなく、エージェント向けにも)
エージェントは、ツールとしてインテリジェンスを利用できます。lookup_ioc(value)、check_url(url)(フィード + アドバイザリーヒューリスティック)、screen_text(text)、list_campaigns()、feed_info() が用意されています。すべてのレスポンスはデータです。サーバーが何かを取得したり実行したりすることはありません。
商用プラン
| プラン | 内容 | 価格 |
|---|---|---|
| セルフホスト(このパッケージ、使用ライセンス付き) | 同梱されているすべてのレイヤーとフィードを自社インフラで実行できます。商用利用も可能です | 無料 |
| S7 — フィードのマネージドサブスクリプション | 更新されたキャンペーンフィード + webhook アラート + YARA ルール | $50/mes(ATC 保有エージェントは最初の 100 件まで無料) |
| S6 — Shield 評価 + パイロット導入 | MCP サーバーの監査 + パイロット導入(identity+intel+audit)+ レポート | $1,000 の初期費用 + $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 をキーとします。宣言されたエージェント名ごとのバケットは作成されなくなりました。
gateOutのデフォルト動作がパススルーからredactに変更されました。v0.1.0 の動作にするには、outboundPolicy:"log"を設定してください。- 監査ストリームに新しい判定が追加されました:
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]
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。