Litmus — 話題のニュースを、深く読み解く。 RSS
ソフトウェア

PCのAIエージェントとMCPサーバー、1コマンドで棚卸しする「Geiger」

無料ツール「Geiger」はnpx一発で、PC上のAIエージェント・MCPサーバー・拡張機能を洗い出し、実行権限や認証情報の有無をラベルで示す。フックが指示なしに自動実行される点も分かる。

ノートパソコンの画面に表示されたプログラムのコード(イメージ写真)

イメージ写真 記事の内容を撮影したものではありません。Photo by Daniil Komov on Pexels

この記事には Amazon アソシエイトのリンクを含みます。

Claude CodeやCursorのようなAIを使った開発支援ツールを試すたびに、気になった拡張や追加のプログラムを入れてきた——という人は多いはずだ。ただ、今のPCに何が入っていて、それぞれが何に触れられるかを全部覚えている人は少ない。この状態を1つのコマンドで洗い出せる無料ツールが「Geiger」だ。インストールもアカウント登録もいらず、ターミナルでnpx geiger-scanと打つだけで一覧が出る。

何をどこまで見てくれるのか、一覧に並ぶ項目は何を意味するのか、パスワードのような中身まで覗かれないのか。順に確かめていく。

何を一覧にしてくれるのか

Claude CodeやCursorは、それ単体だけでなく、外から追加のプログラムを呼び出して機能を広げられる。この追加のプログラムを「MCPサーバー」と呼ぶ。MCPサーバーにはファイルを読み書きする権限やネットワークへの接続権限を持たせることができ、便利な分だけ、どれだけ入っているか把握しづらくなる。Geigerは、このMCPサーバーを含めて「AIが何かを実行できる場所」を横断的に読み取る。公式READMEによれば、対象は次のように幅広い。

対象の種類具体例
AIエージェント本体Claude Code、Codex CLI、Gemini CLIなど
MCPサーバーを使うホストCursor、Windsurf、VS Code、Cline、Continue、Zedなど
フックClaude Code・Cursor・Codex・Gemini CLIの設定にあるフック
Gitフック.git/hooks内の実行スクリプト、core.hooksPathの向き先
スキル・サブエージェントの文面指示を乗っ取ろうとする記述や、不審な形のコマンドがないか
エディタ拡張・ブラウザ拡張VS Code・Cursorの拡張、Chrome・Edge・Firefoxなどの拡張
AIブラウザComet、Dia、ChatGPT Atlas

Geigerは、このMCPサーバーやエージェント本体、フック、拡張機能を1回のスキャンでまとめて一覧にする。

この一覧を見ると、次は「並んだ項目が、結局何をできるのか」が気になる。

見つかった項目は何を意味するのか

Geigerは見つけた項目ごとに、実行権限や通信の有無を表すラベルを付ける。

  • EXECUTES: コードを実行できる
  • HOLDS-SECRETS: 認証情報を持っている
  • BROAD-FILESYSTEM: ファイルへの広いアクセス権を持つ
  • BROAD-WEB / NETWORK: ウェブや外部ネットワークに広く接続できる
  • UNKNOWN-ORIGIN: どこから来たものか分からない

公式READMEの出力例では、magicというMCPサーバーに3つのラベル(EXECUTES HOLDS-SECRETS BROAD-FILESYSTEM)が並ぶ。設定ファイルの中に「APIキーらしき値」が見つかったことまで表示されている。あわせて、UserPromptSubmitとPreToolUseという2つのフックが、同じ一覧に並んでいる。

自分はこの並びを見て、最初は「拡張機能やMCPサーバーの話だろう」としか思っていなかった。読み進めると、READMEは「フックはイベントが起きるたびに、プロンプトなしで実行される」とわざわざ注記している。つまり一覧に並ぶのは、こちらが一度も指示していなくても、特定の操作のたびに自動で動く権限を持つプログラムの数だ。AIエージェントは自分が呼びかけたときだけ動く、と思っていたなら、ここで前提が崩れる。

ここまでで、何がどんな権限を持っているかは分かった。次に気になるのは、認証情報そのものまで見えてしまうのかという点だ。

認証情報はどう扱われるのか

Geigerが認証情報らしき値を見つけても、表示するのは「キー名」「置かれているファイル」「どんな種類の秘密に見えるか」の3つだけで、値そのものは一切出さない。公式READMEはこれを「shape only(形だけ)」と呼び、すべての出力にこの伏せ字処理がかかることをテストで強制していると説明している。

書き込みも最小限にしてある。Geiger自身が書き込むのは、利用者が--json out.jsonのように明示的に指定したファイルだけだ。それ以外は設定とディレクトリを読むだけの、読み取り専用の動作になる。配布もnpmのprovenance機能を使っており、公開されたパッケージがどのGitHubのコミットから作られたかを、npmのページ上で署名付きでたどれる。MITライセンスで、依存パッケージもゼロ。コード量も数百行程度だとREADMEは述べており、読んで確かめられる分量だという立場を取っている。

ここまでは1回スキャンしたときの話だ。次に、この状態を今後も保ち続けるにはどうすればいいかが疑問になる。

続けて点検するには

基本の使い方は次のとおりだ。

npx geiger-scan                        結果をターミナルに表示する
npx geiger-scan --html report.html     対処方法つきのHTMLレポートを作る
npx geiger-scan --json out.json        機械可読なJSONで保存する
npx geiger-scan --diff baseline.json   前回保存したJSONと比較し、増減を表示する
npx geiger-scan --strict               実行権限・認証情報を持つ項目があれば終了コード2を返す

一度--jsonでその時点の状態を保存しておけば、次回以降は--diffで「前回から何が増えたか・消えたか・権限が強くなったか」だけを確認できる。--strictと組み合わせてcronやCIに仕込めば、新しく実行権限や認証情報を持つものが増えたときだけ異常終了させる、という使い方もできる。一度確認した構成をそのまま許可し、変化があったときだけ知らせる発想で、ロックファイルの差分確認に近い。

ここまでで、確認と継続点検の両方ができることが分かった。最後に、この一覧をどこまで信用していいのかを見ておく。

棚卸しの限界をどう見るか

公式のFAQは「これはセキュリティ監査か」という問いに、はっきり「いいえ」と答えている。Geigerが示すのは、監査の前提になる持ち物の一覧であって、個々のプログラムが安全かどうかの判定ではない。

READMEが挙げている限界は主に次の3点だ。

  • 既知の設定の置き場所しか読まない。普段と違う場所に置かれたもの、別ユーザーのアカウント、コンテナ、Windowsから見たWSLの中身は対象外になる
  • 設定を読むだけで、実際にそのプログラムが何をしたかという実行時の挙動までは見ない
  • パッケージの出所と到達範囲は示せても、それが悪意あるものかどうかまでは判定できない。フックやスキルの文面の判定もパターン照合によるもので、見つからなかったからといって安全とは限らない

Geigerを作ったAtomburstという会社は、同じ対象領域で組織向けの有償製品「DomainGuard」も提供している。Geiger自体は無料・MIT公開で、有償版を使わないと機能が制限されるような作りにはなっていない。ただ、無料ツールの先に有償の製品があるという構図は、READMEを読む際に知っておいていい前提だ。

まとめ

npx geiger-scanを1回実行すれば、PC上のAIエージェント・MCPサーバー・フック・拡張機能を横断的に一覧にできる。それぞれが実行権限や認証情報を持つかも、ラベルで確認できる。見つかった認証情報は値そのものではなく、キー名と置き場所だけが示される。これは監査ではなく一覧であり、見慣れない項目は自分の目で設定ファイルを開いて確かめる判断が残る。それでも、フックやMCPサーバーが呼びかけなしに自動実行されるという前提を知ったうえで、継続的な点検は組める。--jsonに現状を保存し--diffで差分を追えば、増えた分だけを点検できる状態を、今日のうちに作れる。

この記事の先を読む本を探す

特定の本を勧めるものではありません。検索結果から、いまの版と目次を確かめて選んでください。

コメント

気づきや感想をどうぞ

記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。

コメントを読み込んでいます…

    ほかの記事

    最新の記事 →