Skip to content

Security: monoqlo78/WindowsComputerUseMCP

Security

SECURITY.md

SECURITY

このドキュメントは、AI エージェントが実マシンのマウス・キーボード・画面を操作できるという 本プロジェクトの性質上のリスクと、それに対する安全設計をまとめる。

脅威モデルの前提

  • MCP クライアント(AIエージェント)は、意図しない/誤った操作要求を送る可能性がある。
  • 本ツールはローカルユーザーの権限で動作し、ユーザーが普段操作できる範囲をそのまま操作できてしまう。
  • したがって「AIが間違えても取り返しがつく/気づける/止められる」ことを最優先の設計目標とする。

権限方針

  • 管理者権限を自ら要求しない。 マニフェストは asInvoker を基本とし、昇格が必要な操作は 「非対応」として扱う(昇格ダイアログの自動操作は行わない)。
  • UAC ダイアログ・Windows ログイン画面・セキュアデスクトップは操作対象外。 これらのウィンドウ/ デスクトップを検出した場合、ui_* / mouse_* / keyboard_* 系ツールは安全のため拒否する。
  • セキュアデスクトップの回避策(例: 別セッションからの注入等)は実装しない。

Safety ポリシー(初期設定)

操作カテゴリ 既定の扱い
マウス移動、画面取得、ウィンドウ一覧取得 許可
左クリック、キー入力、スクロール 設定で許可/拒否を切り替え可能(既定は許可、ただし承認対象操作は別途判定)
ファイル削除、送信、購入、支払い、公開、上書き保存に該当すると判定される操作 承認対象(requireConfirmation 相当の応答を返し、実行前に人間の承認を要求)
パスワード入力欄への自動入力 既定で拒否
UAC・セキュアデスクトップに対する操作 拒否
WindowsComputerUseMCP 自身(Server/ControlPanel)の停止操作 禁止しない(緊急停止性を優先)

「承認対象」の判定は、ウィンドウタイトル・ボタン名・UI Automation の Name/AutomationId に含まれる キーワード(例: "削除", "Delete", "送信", "Send", "購入", "Buy", "支払い", "Pay", "公開", "Publish", "上書き保存", "Save" 等、日本語/英語の代表的な語彙)と、設定ファイルで拡張可能なパターンリストによって行う。 キーワード方式は完全ではないため、Safety 層のテストを重点的に作成し、誤検知・見逃しの傾向を継続的に把握する。

緊急停止

  • ホットキー: Ctrl + Shift + F12(初期案。設定ファイルで変更可能にする)。
  • 緊急停止が有効な間、入力操作系 MCP ツール(mouse_*, keyboard_*, ui_invoke, window_focus の実行操作部分等) はすべて拒否し、読み取り系ツール(window_list, screen_capture など)は継続して利用できるようにする (状況確認と解除操作を妨げないため)。
  • 緊急停止状態は Safety 層でプロセス内状態として保持する。ControlPanel(WPF)は名前付きパイプ (WindowsComputerUseMCP.ControlPanel.v1) 経由で状態の問い合わせ・有効化・解除を行える (フェーズ7で実装済み。ControlPanelIpcServer / ServerIpcClient 参照)。

パスワード・機密情報の扱い

  • keyboard_type_text は maskInLogs を既定で有効とし、監査ログには入力文字列そのものではなく、 文字数とハッシュ値(例: SHA-256)のみを記録できるようにする。
  • パスワード入力欄と判定された場合(UI Automation の IsPassword プロパティ、または PasswordEdit 等の コントロールタイプ判定)、keyboard_type_text は既定で拒否する。
  • system_get_capabilities は OS バージョンや機能可否のみを返し、ユーザー名の詳細、環境変数、 トークン等の機密情報は返さない。

監査ログ

  • 保存先: %LOCALAPPDATA%\WindowsComputerUseMCP\Logs
  • 形式: JSON Lines(1操作1行)。フィールドは operationId, timestamp, toolName, targetWindow, targetProcess, sanitizedArguments, result, durationMs, safetyDecision。
  • 入力文字列の全文は既定で保存しない。スクリーンショットは既定で永続保存しない (saveToFile 指定時のみ、専用の一時ディレクトリに保存し、保存期間設定に従って削除可能な構造にする)。
  • 保存期間(リテンション日数)を設定可能にし、ログローテーション(日次ファイル分割等)を実装可能な構造で設計する。

例外・エラー処理

  • MCP ツールの応答にスタックトレースをそのまま含めない。詳細は診断ログ(標準エラー出力/ファイル)にのみ記録する。
  • 例外を握りつぶさず、errorCode として分類し、message には人間が読める要約のみを含める。

設定ファイルで制御可能な項目

appsettings.json / ユーザー設定(%LOCALAPPDATA%\WindowsComputerUseMCP)で以下を設定可能にする。

  • 許可するアプリケーション/拒否するアプリケーション(プロセス名・ウィンドウタイトルパターン)
  • マウスクリックの許可、キーボード入力の許可
  • 危険操作時の確認要否
  • スクリーンショット保存の可否・保存期間
  • 監査ログ保存の可否・保存期間
  • 最大連続操作回数、操作間隔(連打・暴走防止)
  • 緊急停止ホットキー
  • UI Automation ツリーの最大要素数・最大深度

既知の限界(フェーズ1時点)

  • キーワードベースの危険操作検出は自然言語の多様性を完全にはカバーできない。将来的には UI要素の役割(Role)やコンテキストも加味した判定への拡張を検討する。
  • スクリーンキャプチャや UI Automation ツリーには、意図せず機密情報(他アプリの表示内容等)が 含まれる可能性があるため、利用者側にも取り扱い注意を促すドキュメントを用意する。

There aren't any published security advisories