ローカルだから安全とは限らない:AI アシスタントとデスクトップアプリをつなぐチャネルを守る
ローカル MCP 接続にも防御が要る理由と、ユーザー専用の名前付きパイプ、先行インスタンスの確保、128 ビットのトークン、一定時間比較、失敗時は公開しない設計。
要点
- AI アシスタントとデスクトップアプリをつなぐローカルの接続でも、同じパソコンのほかのユーザー、リモートのクライアント、チャネル名を先に奪ったプログラムから接続されてしまう場合があります。
- Windows での KwaFlux のチャネルは、あなたのアカウントしか開けず、KwaFlux が最初に確保し、リモートのクライアントを拒否する名前付きパイプです。Mac では、あなたのアカウントだけに権限があるソケットです。
- 接続はどれも 128 ビットのランダムなトークンから始まり、トークンは一定時間で比較され、ログには残りません。設定からリセットすることもできます。
- MCP サーバーにトークンを渡すファイルは、所有者だけに権限を絞ったうえでアトミックに書き込まれます。その権限を設定できなければ、KwaFlux はファイルを公開しません。
AI アシスタントは、あなた自身のパソコン上のチャネルを通じて KwaFlux とやり取りします。そのため、ほかの誰もこのチャネルに届かないと思い込みがちですが、自動的にそうなるわけではありません。Windows では、既定の設定で作った名前付きパイプは、どのユーザーからも読み取れ、ネットワーク越しに到達でき、最初に作成したプロセスがその名前を確保できてしまいます。
KwaFlux はこうした扉を 1 つずつ閉じています。以下、その方法を順に見ていきます。
この記事では、ローカルのチャネルに外から接続される 3 つの経路、KwaFlux がそれぞれに使っている防御、トークンを安全に MCP サーバーへ渡す方法、そしてローカルのチャネルでは防げないことを解説します。
目次
- ローカルの IPC チャネルとは?
- 「ローカル」が破られる 3 つの経路
- レイヤー 1:パイプを開けるのは誰か
- レイヤー 2:接続ごとのトークン
- レイヤー 3:トークンを漏らさずに公開する
- レイヤー 4:クライアントを抑える上限
- チャネルが防げないこと
- テストの方法
- よくある質問
ローカルの IPC チャネルとは?
ローカルの IPC(プロセス間通信)チャネルとは、同じパソコン上の 2 つのプログラムが、ネットワークスタックを通さずにメッセージをやり取りするための接続です。Windows の名前付きパイプや macOS の Unix ドメインソケットがよく知られた例です。
KwaFlux の MCP 構成では、ファイル修復や変換といったジョブのために、AI アシスタントが KwaFlux の MCP サーバーを起動し、そのサーバーがこうしたチャネルを通じて起動中の KwaFlux アプリに接続します。ほかのレイヤーの中でこれがどこに位置するかは、コントロールプレーンの記事で図にしています。
「ローカル」が破られる 3 つの経路
| リスク | 具体的な状況 | 問題になる理由 |
|---|---|---|
| パソコン上のほかのアカウント | 家族共用のパソコン、共有のワークステーション、複数のユーザーがいるリモートデスクトップサーバー | Microsoft のドキュメントによると、名前付きパイプの既定のセキュリティ記述子は「Everyone グループのメンバーと匿名アカウントに読み取りアクセス」を与えます |
| リモートのクライアント | 名前付きパイプは、名前を指定すればネットワーク越しに開けます | Microsoft によると、リモートのクライアントを受け付けるパイプは、セキュリティ記述子との照合しか行いません |
| 名前の先取り(スクワッティング) | KwaFlux が起動する前に、別のプログラムが想定どおりの名前でパイプを作る | MCP サーバーが依頼とトークンを、なりすましの相手に渡してしまいます |
どれも特殊な攻撃は必要ありません。既定の設定から生じる問題です。
レイヤー 1:パイプを開けるのは誰か
KwaFlux は Windows のパイプを、3 つのリスクに対応する 3 つの設定で作成しています。
- あなたのアカウント専用のセキュリティ記述子。 システムと管理者にフルコントロール、Everyone に読み取りアクセスを与える既定の記述子の代わりに、パイプのアクセスリストには現在のユーザーを指定しています。
- 最初のインスタンスに限定。 KwaFlux は
FILE_FLAG_FIRST_PIPE_INSTANCEを付けてパイプを作成します。Microsoft のドキュメントによると、このフラグを付けると「最初のインスタンスの作成は成功するが、次のインスタンスの作成は ERROR_ACCESS_DENIED で失敗する」とされています。すでに誰かがその名前を持っていれば KwaFlux はそれに気づき、自分のものでないパイプでサービスを提供することはありません。 - リモートのクライアントは拒否。 パイプには
PIPE_REJECT_REMOTE_CLIENTSを使っています。Microsoft はこれを「リモートのクライアントからの接続は自動的に拒否される」と簡潔に説明しています。
macOS では、アプリはファイルのパーミッションが 0600 の Unix ドメインソケットで待ち受けるので、開けるのはあなたのアカウントだけです。
補足: MCP の仕様のセキュリティガイダンスも、ローカルのサーバーについて同じことを勧めています。stdio トランスポートを使って MCP クライアントからのアクセスに限定し、ほかのトランスポートを使うサーバーでは認可トークンを必須にするか、「アクセスを制限した」IPC を使う、というものです。KwaFlux はその両方を行っています。ホストは stdio で MCP サーバーとつながり、MCP サーバーはトークン付きの制限されたチャネルでアプリとつながります。
レイヤー 2:接続ごとのトークン
権限は、誰がチャネルを開けるかを決めます。トークンは、相手側のプログラムが KwaFlux の用意したものであることを証明します。
- 生成。 KwaFlux は起動時に、OS の暗号論的乱数生成器から 128 ビットのトークンを作ります。
- ハンドシェイク。 どの接続も、トークンを載せた hello メッセージで始めなければなりません。これが成功するまで、アプリはその接続でほかに何も受け付けません。
- 一定時間での比較。 KwaFlux はトークンを 1 バイトずつ比較しますが、最初のバイトが違っても最後のバイトが違っても同じ時間がかかる方法を使います。そのため、応答時間から推測がどこまで当たっていたかが漏れません。
- ログに残さない。 トークンは KwaFlux のログにも、設定のアクティビティ一覧にも出ません。
- リセット。 設定の エージェントのアクセストークンをリセット で、トークンを新しいランダムなものに置き換えられます。現在のエージェント接続は切断され、設定済みのホストは次回の呼び出しで新しいトークンを使って再接続します。古いトークンが何かに読まれたかもしれないと思ったら使ってください。
レイヤー 3:トークンを漏らさずに公開する
MCP サーバーにはトークンが必要で、KwaFlux が起動時に書き出す小さな制御ファイルからそれを受け取ります。扱いが雑だとこのファイルがいちばんの弱点になるので、最も慎重に扱っています。

- ユーザープロファイル内に制御フォルダーを作成します。
- あなたのアカウントに限定します。 フォルダーのアクセスリストには現在のユーザーだけを指定し、親フォルダーからより広い権限を継承しません。
- 所有者を確認します。 KwaFlux はフォルダーが現在のユーザーのものであることを確かめるので、ほかの誰かが前もって仕込んだフォルダーは信頼されません。
- 同じ制限をかけた一時ファイルに書き込みます。
- 制御ファイルをアトミックに置き換えます。 読み取る側には古いファイルか新しいファイルのどちらかが見え、書きかけのファイルが見えることはありません。
重要なのは、失敗したときのルールです。以前のバージョンは、まずファイルを書いてから権限を絞り、それが失敗しても警告をログに残すだけでした。現在は、KwaFlux が権限を設定できなければファイルを一切公開しません。問題が直るまで MCP は動きませんが、これは正しいトレードオフです。接続が切れていれば目に見えますが、トークンが読み取れる状態は目に見えないからです。
レイヤー 4:クライアントを抑える上限
きちんと認証されたクライアントにも上限があります。その背後にいる AI は、読んだ内容によって誘導されることがあるからです。
| 上限 | 値 |
|---|---|
| 同時接続数 | 8 |
| メッセージ 1 件のサイズ | 64 KiB |
| アイドル状態の接続 | 5 分で切断 |
| 新しいジョブ | 全体で 1 分あたり 10 件、接続ごとに 6 件 |
| タスクの操作 | その接続のエージェントが送ったタスクだけ |
| マスタースイッチ | KwaFlux の設定 1 つで、エージェントからのアクセスをすべてオフにします |
これらは、混乱したり操られたりしたアシスタントを封じ込めるためのもので、パスとプライバシーの記事と SSRF の記事でも別の角度から取り上げています。
チャネルが防げないこと
境界は正確に伝えたいと考えています。セキュリティを大げさに語るのは、何も語らないより害が大きいからです。
チャネルの防御が止めるのは、ほかのユーザーアカウント、ほかのコンピューター、そしてパイプ名を奪って KwaFlux になりすまそうとするプログラムです。あなた自身のアカウントですでに動いているマルウェアは止められません。あなたとして動いているプログラムは、あなたのファイルやブラウザーのデータなど、あなたが読めるものはすでに何でも読めます。どんなローカルアプリも、そこから自分を切り離すことはできません。そうしたソフトウェアをパソコンに入れないようにするのは、OS とセキュリティソフトの役割です。
補足: レイヤー 3 の強化とトークンのリセットは、まず Windows で提供しています。Mac 版はすでに所有者専用のソケットとトークンのハンドシェイクを使っています。残りの項目が Mac 版に入った時点で、この記事を更新します。
今後の予定に入れている変更が 1 つあります。秘密そのものをチャネルに流さずに、双方が自分を証明するハンドシェイクです。いまは見送っています。両側のプロトコルを同時に変えることになり、ハンドシェイクに不具合があれば全員の MCP が止まってしまううえ、追加される効果の大半は、最初のインスタンスの所有と、サーバーがアプリの稼働を確認するしくみですでにカバーされているからです。
テストの方法
コントロールプレーンの依頼処理は 341 のアサーションでテストしています。これとは別のエンドツーエンドのテストスイートが、本物のコントロールプレーンと本物の MCP プロセスを起動し、ここで説明したチャネルとパスのチェックを含む 12 グループのセキュリティケースを実行します。どちらも KwaFlux の自動テストに組み込まれているので、これらのルールを弱める変更があれば、テストの失敗として表に出ます。
まとめ
「ローカルでしか待ち受けていない」は、ローカルのチャネルのセキュリティの出発点であって、終着点ではありません。開ける人を制限し、名前を確実に自分のものにし、接続をすべて認証し、秘密は慎重に公開するか、まったく公開しないか。そして対象外のことははっきり伝える。KwaFlux は、AI アシスタントとアプリの間のつながりをそのように扱っています。
丁寧に作ったローカル MCP サーバー
KwaFlux は、あなたのアカウントしか開けないチャネルで、Codex、Claude、Cursor などの MCP アプリと接続します。AI 処理はご自身の GPU 上で実行され、メディアファイルが処理のためにアップロードされることはありません。Windows 10(64 ビット、バージョン 1809 以降)、Windows 11、Apple Silicon 搭載の macOS 12 以降で動きます。ファイルの読み込みやアプリの操作にアカウントは不要です。ログインと有料プランが必要なのは、書き出し、変換、ファイル修復、リンクからのファイルダウンロードだけです。
お手元の素材で効果を試す
KwaFlux を入手し、支払う前にお手元の素材で効果を無料プレビュー。アカウント不要で、処理はお使いの GPU で行い、処理のためにメディアをアップロードすることはありません。 動画のプレビューは 1、3、または5 秒、手ぶれ補正のプレビューは 5、15、または30 秒から選べます。
よくある質問
Windows の名前付きパイプは安全?
作り方によります。既定のセキュリティ記述子で作ったパイプは Everyone に読み取りアクセスを与え、リモートのクライアントも受け付けます。明示的なアクセスリスト、PIPE_REJECT_REMOTE_CLIENTS、FILE_FLAG_FIRST_PIPE_INSTANCE を使えば、そのパソコン上のあなたのアカウントだけに限定されます。
名前付きパイプにはネットワーク越しにアクセスできる?
既定ではできます。Windows では、クライアントが別のマシンのパイプを名前で開けます。リモートのクライアントを受け付けるパイプは、セキュリティ記述子との照合しか行いません。パイプの作成時に PIPE_REJECT_REMOTE_CLIENTS を渡せば、リモートのクライアントは拒否されます。
名前付きパイプのスクワッティングとは?
あるアプリケーションが想定している名前のパイプを、そのアプリケーションが起動する前に別のプログラムが作り、クライアントをなりすましの相手に接続させる手口です。FILE_FLAG_FIRST_PIPE_INSTANCE を付けてパイプを作成すれば、本物のサーバーは名前が使われていることに気づけます。
トークンを一定時間で比較するのはなぜ?
普通の比較は最初に違うバイトで止まるので、正しいバイトが多い推測ほどわずかに時間がかかります。その差を測ると、秘密が 1 バイトずつ漏れる可能性があります。一定時間での比較なら、どちらでも同じ時間がかかります。
ローカルの MCP サーバーならデータはほかのプログラムから守られる?
一部は守られます。きちんと作られたローカルのサーバーは、ほかのアカウント、ほかのコンピューター、なりすましのプログラムを締め出します。ただし、あなたとしてすでに動いているマルウェアは、あなたが読めるものを何でも読めるため、止められません。ローカルアプリが守れるもの、守れないものをご覧ください。
参考資料
- Microsoft Learn, "CreateNamedPipeA function" (FILE_FLAG_FIRST_PIPE_INSTANCE, PIPE_REJECT_REMOTE_CLIENTS, default security descriptor) (2026-10-25 閲覧)
- Microsoft Learn, "Named Pipe Security and Access Rights" (2026-10-25 閲覧)
- Model Context Protocol, security guidance for implementers (2026-07-28; Local MCP Server Compromise) (2026-07-28 閲覧)


