nemesis-shield について
nemesis-shield は、アプリ開発者向けのランタイムセキュリティ SDK 群です。リクエストの挙動ベースラインを学習して逸脱を検知・遮断し、バックエンド、エッジ、ブラウザーに対応します。LLM のやり取りも保護します。
主な機能
- 01ベースラインに基づく検知と遮断
- 02複数言語・Web フレームワーク対応
- 03決済ページ向けブラウザー保護
- 04LLM のやり取りにおけるリスク検知
- 05プライバシーに配慮したメタデータ収集
- 06利用不能時のフェイルオープン
活用シーン
- 01Web アプリへのランタイムアクセス制御の追加
- 02決済ページでのスクリプト窃取対策
- 03プロンプトインジェクションや不正なツール呼び出しの検知
MCP 対応
付属の MCP サーバーは Cursor、Claude Code/Desktop、Windsurf 向けに 17 個のツールを提供します。保護の追加、サイトのスキャン、カバレッジの説明、不正スコアリング、本人確認・AML 審査に利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
17掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| framework | string | はい | フレームワーク/スタック。例:fastapi、express、nextjs、django、rails、laravel、spring、aspnet、go、supabase-edge、cloudflare-workers、browser、llm |
詳細
Nemesis Shield - SDK
Nemesis Shield の公式オープンソース SDK です。Nemesis Shield は、統合ランタイムセキュリティプラットフォーム(アプリケーション/API/LLM シールド、テレメトリー相関、ネットワーク/DNS、レスポンス、コンプライアンス)です。アプリに組み込むと、Nemesis がアプリの通常の動作を学習し、それから逸脱するものを検出します。強制モードではブロックも行います。これはポジティブセキュリティ(許可リスト)モデルです。汎用的な攻撃シグネチャを推測するのではなく、*「このアプリは、これらの方法でのみ動作する」*ことを強制します。
AI アシスタントを使って開発していますか? エージェントが開発中に Nemesis Shield を追加できる方法は 2 つあります。
- MCP サーバー - Cursor、Claude Code/Desktop、Windsurf に 17 個の呼び出し可能なツール(
nemesis_protect、nemesis_scan、nemesis_explainに加え、Omniguard の不正スコアリングと、nemesis_omniguard_verifyによる単独の本人確認/AML スクリーニング)を提供します。これにより、エージェントはエディターを離れることなく、セキュリティの追加、サイトのスキャン、本人確認、保護範囲の説明を行えます。- AI エディター用ルールパック(AGENTS.md、Cursor、Windsurf、Claude Code)- エージェントがデフォルトで 1 行の SDK を追加するよう指示する、すぐに使えるルールです。
どちらもスタックごとに 1 行で導入でき、デフォルトでは安全な監視モードです。検証済みの完全なリファレンス:
ai-rules/AGENTS.md。
プライバシーを設計の中心に: SDK が送信するのは、動作に関するメタデータのみです。HTTP メソッド、パスの形式(/orders/123 → /orders/{int})、ステータスコード、呼び出し元が認証済みかどうかが含まれます。リクエスト本文、レスポンス、シークレット、ソースコードを送信することはありません。すべての SDK はフェイルオープンです。Nemesis に接続できない場合も、アプリにはまったく影響しません。
新しいアプリをお使いですか? Nemesis Learn で数分で学習を完了できます。 SDK を組み込み(監視モード)、コマンドを 1 つ実行すると、エージェントが開発環境/ステージング環境でアプリのすべてのルート(エンドポイント、フォーム、アップロード、CRUD フロー)をテストします。実際のトラフィックを待たずにベースラインを完成できます。言語やフレームワークを問わず(HTTP 経由でアプリを操作)、オフラインで実行でき、リポジトリを読み取ってルートを検出できます。また、カバレッジをレポートするため、コンソールで強制モードに移行できるタイミングを正確に確認できます。
npx @nemesis-shield-autogon/learn --target http://localhost:3000 --app-token nsk_… --repo .
| 言語 | パッケージ | 統合 |
|---|---|---|
| Node.js | @nemesis-shield-autogon/sentinel | Express/Connect 用の 1 行ミドルウェア → node/ |
| Python | nemesis-shield | ASGI/WSGI ミドルウェア(FastAPI/Starlette/Flask)→ python/ |
| Go | github.com/eobi/nemesis_shield_sdks/go | net/http ミドルウェア → go/ |
| Ruby | nemesis_shield.rb | Rack ミドルウェア(Rails/Sinatra)→ ruby/ |
| PHP | composer require nemesislabs/sentinel | Laravel の自動検出 / register_shutdown_function → php/ |
| WordPress | ドロップインプラグイン | 動作ファイアウォール(フロントエンド、REST、admin-ajax)+ブルートフォース攻撃のロックアウト、マルウェア/ファイル整合性スキャン、脆弱性アラート → wordpress/ |
| Java | io.github.eobi:sentinel | Servlet フィルター / Spring Boot(JDK 11 以降)→ java/ |
| .NET / C# | dotnet add package NemesisShield | ASP.NET Core ミドルウェア(net8.0 + netstandard2.0)→ dotnet/ |
| Rust | cargo add nemesis-shield | axum(tower)/ actix-web ミドルウェア → rust/ |
| Edge / Supabase(Deno TS) | @nemesis-shield-autogon/edge(npm)· @nemesis-shield/edge(JSR) | Supabase Edge / Deno / CF Workers / Vercel Edge / Next.js 用の withShield() → edge/ |
| Supabase 直接 DB API | Cloudflare Worker | supabase.from()(PostgREST)を保護するリバースプロキシ。ベースライン外のテーブル/動詞/認証を、データベースに到達する前にブロックします → cloudflare-supabase-proxy/ |
フロントエンド(ブラウザー)
上記のバックエンド SDK はサーバーを保護します。ブラウザー SDK は、もう半分、つまり WAF とバックエンドでは検知できないクライアント側の攻撃から保護します。決済/E コマースページ向けに決済サービス品質で構築されており、あらゆるチャネル(fetch、XHR、beacon、画像ビーコン、WebSocket、EventSource)を介したカード情報のデータ流出、Magecart/挿入されたスクリプト、フォームジャッキングをブロックします。また、インライン改ざん、フィールドへのコード挿入、クリックジャッキングを検知し、PCI DSS 4.0.1 §6.4.3 & §11.6.1(スクリプトインベントリー、承認、改ざんアラート)に直接対応します。学習された CSP をコンソールで承認できます。
| フロントエンド | パッケージ | 組み込み |
|---|---|---|
| React · Angular · Vue · jQuery · plain JS | @nemesis-shield-autogon/browser | <script data-token> タグを 1 つ追加するか、NemesisShield.init({token}) を実行 → browser/ |
すべてのフレームワークを 1 つの SDK でカバーできます。いずれも同じブラウザーのプリミティブを共有しています。
TypeScript をお使いですか? 個別の TS SDK はありません。TypeScript も同じランタイムを使用します。Node バックエンドでは
@nemesis-shield-autogon/sentinel(.d.tsを同梱)、Supabase Edge/Deno/Workers ではedge/、TS フロントエンドでは@nemesis-shield-autogon/browser(.d.tsを同梱)を使用してください。
トークンの取得
- shield.nemesislabs.xyz で登録します(無料、カード不要)。
- アプリを保護を選択します。1 回限りのインストールトークン(
nsk_…)が発行されます。 - 以下の SDK を追加してトークンを設定し、デプロイします。トラフィックの収集が直ちに始まり、アプリごとのベースラインが構築されます。学習された挙動を確認し、コンソールで承認またはブロックします。
クイックスタート
Node.js
npm install @nemesis-shield-autogon/sentinel
import { sentinel } from "@nemesis-shield-autogon/sentinel/express";
app.use(sentinel({ token: process.env.NEMESIS_TOKEN })); // one line, zero route changes
Python
pip install nemesis-shield
from nemesis_shield.asgi import SentinelMiddleware
app.add_middleware(SentinelMiddleware, token=os.environ["NEMESIS_TOKEN"])
Go
handler := nemesis.Middleware(os.Getenv("NEMESIS_TOKEN"))(mux)
http.ListenAndServe(":8080", handler)
Ruby(Rack)
use NemesisShield::Middleware, token: ENV["NEMESIS_TOKEN"]
PHP - composer require nemesislabs/sentinel(Laravel ではミドルウェアが自動検出されます。プレーン PHP の場合:)
NemesisShield::guard(getenv('NEMESIS_TOKEN')); // block off-baseline
register_shutdown_function(fn() => NemesisShield::observe(getenv('NEMESIS_TOKEN'))); // learn
WordPress - 完全なセキュリティプラグインです。AI 行動ファイアウォールに加え、ブルートフォースログインロックアウト、マルウェア/ファイル整合性スキャン、脆弱性アラートを備えています。wordpress/nemesis-shield/ プラグインを wp-content/plugins/ に配置して有効化し、トークンを設定します:
// wp-config.php
define('NEMESIS_SHIELD_TOKEN', 'nsk_your_site_token');
Java - Maven Central の io.github.eobi:sentinel(Spring Boot フィルター、またはプレーン Java の場合:)
import io.github.eobi.sentinel.NemesisShield;
var nemesis = new NemesisShield(System.getenv("NEMESIS_TOKEN"));
if (nemesis.guard(method, path, authed, exchange)) return; // block off-baseline (403)
nemesis.observe(method, path, authed, status); // learn
.NET / C# - dotnet add package NemesisShield(net8.0 および netstandard2.0 / .NET Framework 4.6.1 以降)
// Program.cs - register FIRST (before UseRouting) so it inspects every request, incl. unmatched paths
app.UseMiddleware<NemesisShield.SentinelMiddleware>(); // set NEMESIS_TOKEN in env
Rust(axum / actix - ミドルウェアについては rust/ を参照)
let shield = nemesis_shield::Client::new(std::env::var("NEMESIS_TOKEN").unwrap_or_default());
// .layer(middleware::from_fn_with_state(shield.clone(), shield_mw))
Edge(Deno / Cloudflare Workers / Vercel Edge / Supabase / Next.js middleware)- npm i @nemesis-shield-autogon/edge または deno add jsr:@nemesis-shield/edge
import { withShield } from "@nemesis-shield-autogon/edge";
// wraps any Web-standard (Request) => Response; same line on every edge runtime:
Deno.serve(withShield(handler, { token: Deno.env.get("NEMESIS_TOKEN") })); // Supabase/Deno
// Cloudflare: export default { fetch: (req, env) => withShield(handler, { token: env.NEMESIS_TOKEN })(req) };
適用の仕組み(全 SDK 共通)
すべての SDK はネイティブです。プライバシーを保護するリクエストの形状をローカルで計算し、コンパイル済みのポリシーをキャッシュして、ハンドラーの実行前にプロセス内でブロックを判断します。プロキシもサイドカーも、リクエストごとの往復通信も不要です。
- 監視(デフォルト)- SDK が各リクエストの形状を記録し、アプリごとのベースラインを構築します。
- 承認 - コンソールで学習された挙動を確認し、正当なものを承認します(学習期間中は自動承認されます)。
- 適用 - コンソールでアプリを適用モードに切り替えます。承認済みベースラインに含まれない形状のリクエストは、
403 blocked_by_nemesis_shieldでブロックされ、検出結果として報告されます。再デプロイは不要です。バックグラウンドポーラーがモードの変更を取得します(PHP では代わりに TTL の短いポリシーキャッシュを更新します)。
8 言語/約 20 のフレームワークにわたって、学習 → 適用 → 攻撃(実際のブロック)をエンドツーエンドで検証済みです:Python(FastAPI/Flask/Django)、Node(Express/Fastify/Koa)、Go(net/http/Chi/Gin/Echo)、Ruby(Rails/Sinatra/Rack)、PHP(raw/Laravel/Symfony)、Java(Servlet/Spring Boot)、.NET(ASP.NET Core)、Rust(axum/actix)。正規のトラフィックは通過し、認証バイパス、BOLA、パストラバーサル、スキャナープローブはブロックされます。
LLM の保護
Node SDK と Python SDK は、OWASP-LLM-Top-10 の動作保護(プロンプトインジェクション、ジェイルブレイク、システムプロンプトの漏えい、不正なツール呼び出し、機密情報の出力)のために、LLM のやり取りも報告します。保存されるのは検出ラベルと形式のみで、生のプロンプトや応答は保存されません。
import { reportLLM } from "@nemesis-shield-autogon/sentinel";
await reportLLM(token, { prompt, system, response, tools, allowedTools: ["search"] });
リポジトリガイド(メンテナー向け)
ここまでの内容は、SDK を利用する開発者向けです。このセクションは、リポジトリの移管後に作業する開発者向けです。各言語の SDK は自己完結しており、動作がバイト単位で一致するよう手書きされています(同じリクエスト形式、同じポリシーモデル、同じ組み込み LLM-Guard の重み)。そのため、言語間で共通のビルド手順はありません。それぞれのエコシステムに標準のツールを使い、各自のディレクトリで開発、テスト、公開します。
リポジトリの構成
node/ Node/JS SDK -> npm @nemesis-shield-autogon/sentinel (Express/Fastify/Koa + /llm)
python/ Python SDK -> PyPI nemesis-shield (ASGI/WSGI + provider wrappers)
go/ Go SDK -> go github.com/eobi/nemesis_shield_sdks/go
ruby/ Ruby SDK -> gem nemesis-shield
php/ PHP SDK -> Packagist nemesislabs/sentinel (Laravel auto-discovery)
java/ Java SDK -> Maven Central io.github.eobi:sentinel
dotnet/ .NET SDK -> NuGet NemesisShield
rust/ Rust SDK -> crates.io nemesis-shield
edge/ Edge/Deno TS -> npm @nemesis-shield-autogon/edge · JSR @nemesis-shield/edge
browser/ Browser SDK -> npm @nemesis-shield-autogon/browser (Page Shield / anti-Magecart)
wordpress/ WordPress plugin (drop-in)
cloudflare-supabase-proxy/ Worker that guards supabase.from() / PostgREST
mcp/ MCP server (17 tools: nemesis_protect, nemesis_scan, nemesis_omniguard_verify, ...)
learn/ @nemesis-shield-autogon/learn - the baseline traffic driver
ai-rules/ Editor rule packs (AGENTS.md, Cursor, Windsurf, Claude Code)
create-nemesis-app/ scaffolder
demo/ examples/ runnable samples
e2e/ live over-the-wire tests (learn -> enforce -> attack) across every language
各言語のディレクトリには、フレームワーク固有のセットアップ手順を記載した独自の READMEがあります。いずれかの SDK を使う場合は、まずそちらを確認してください。
前提条件
作業対象の SDK に必要なツールチェーンだけをインストールしてください:Node 18+(node/edge/browser/mcp/learn)、Python 3.9+(python)、Go 1.21+(go)、Ruby 2.7+(ruby)、PHP 7.2+ と Composer(php)、JDK 11+ と Maven(java)、.NET 8 SDK(dotnet)、Rust stable(rust)。
開発、テスト、公開
SDK のディレクトリで、その言語の標準コマンドを使って作業してください。一般的な手順は次のとおりです。
| SDK | インストール/ビルド | テスト | 公開 |
|---|---|---|---|
| Node · Edge · Browser | npm install | npm test | npm publish --access public |
| Python | python -m build | pytest | twine upload dist/* |
| Go | go build ./... | go test ./... | git tag(モジュールはタグで利用されます) |
| Ruby | gem build *.gemspec | rake test | gem push *.gem |
| PHP | composer install | composer test | タグ付け -> Packagist が自動同期 |
| Java | mvn package | mvn test | mvn deploy(Central) |
| .NET | dotnet build | dotnet test | dotnet pack + dotnet nuget push |
| Rust | cargo build | cargo test | cargo publish |
公開には認証情報が必要です。レジストリのトークン(npm、PyPI、Maven Central、NuGet、crates.io、RubyGems)はチームのシークレットストアから取得し、このリポジトリから取得しないでください。mcp/ サーバーには独自の公開手順(npm + MCP レジストリ + Smithery)があります。mcp/README.md を参照してください。
言語間の契約(逸脱禁止)
動作に変更を加える場合は、すべての SDK に同じ内容を反映する必要があります。不変条件は次のとおりです。
- デフォルトの取り込み先:
POST https://shield.nemesislabs.xyz/api/v1/sketches(LLM:/api/v1/llm)。NEMESIS_ENDPOINTまたはendpointオプションで上書きできます。 - 認証:
Authorization: Bearer nsk_…。 - モード:
observe(デフォルト)からenforceへ。コンソールで切り替えます。SDK は再デプロイなしでコンパイル済みポリシーをバックグラウンドで更新します。 - ブロックされたリクエスト:HTTP
403と{"error":"blocked_by_nemesis_shield", ...}。 - 緊急時の許可リスト(ブロック対象外):
/login /signin /sign-in /auth /oauth /session /wp-login.php /wp-admin。NEMESIS_SHIELD_BOOTSTRAPで上書きできます。 - リクエスト形式のみ:メソッド、正規化されたパス(
/orders/123->/orders/{int})、クエリパラメーターの構造(名前と種類のみ。値は含みません)、認証フラグ、ステータス。リクエスト本文やシークレットは含みません。 - LLM-Guard の重み(
ml_weights.json)はバイト単位で同一のものが組み込まれ、Ed25519 署名されています。固定された公開鍵を使ってrefreshModel()でホットスワップできます。
すべての SDK はフェイルオープンです。サービスに接続できない場合でも、アプリに影響はありません。この動作を維持してください。
SDK を変更した後
対象言語のテストを実行し、続けて該当する e2e/ シナリオ(実際にネットワーク経由で学習 -> 強制 -> 攻撃)を実行してください。e2e テストに合格していない SDK はリリースしないでください。
ライセンス
MIT © Autogon Inc. - 自由に、どのようなプロジェクトでもご利用ください。
カバレッジと安全なロック解除(すべての SDK)
各バックエンド SDK は最も外側にマウントされるため、あらゆるルート(攻撃は API だけでなく、どのパスからも発生します)を監視できます。また、リクエストの構造にはクエリパラメーターの構造も含まれるようになりました。パラメーター名と種類のみを含み、値は含みません。そのため、未知のパスだけでなく、既知のルートに対するパラメーターの改ざん、パラメーターの注入、型の異常も検出できます。パストラバーサルのセグメントは {traversal} に正規化されます。
適用範囲はブレークグラス機能を備えたすべてのルートです。ログイン/認証パスはブロックされないため、学習中のベースラインによってアクセスできなくなることはありません。デフォルトは /login /signin /sign-in /auth /oauth /session /wp-login.php /wp-admin です。アプリごとに上書きできます。
export NEMESIS_SHIELD_BOOTSTRAP="/login,/admin,/healthz"
各 SDK で、実際の通信を使ったテストにより検証済みです。正当なトラフィック(同一ルートでの値の変化やパラメーター順序の入れ替えを含む)は許可されます。未知のパス、注入・改変されたパラメーター、メソッドや認証の異常、および 100 件以上の CVE パターンの検証(パストラバーサル、LFI/RFI、Log4Shell、Spring4Shell、Actuator、PHPUnit/Ignition RCE、ViewState、PostgREST のテーブル列挙、プロトタイプ汚染、NoSQL、SSTI など)はブロックされます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。