PathScope 操作マニュアル
この端末の弱いところを PathScope で探し、どこから直せばよいかを確かめるまでを、画面の順に説明します。画面の操作には専門用語をなるべく使わず、コマンドは「コマンドラインで使う」の章にまとめています。
1. PathScope とは
PathScope は、この端末で一般のユーザーから root(管理者権限)や機密データに届いてしまう「経路」を洗い出し、どこから直せば効果が大きいかを優先度つきで示すツールです。自分で管理している端末や、検証用の環境を点検する使い方を想定しています。
分析は読み取り専用です。設定やファイルを書き換えることはなく、修正も自動では行いません。修正のコマンド例は表示しますが、実行するかどうかは利用者が決めます。
2. 入れ方と起動のしかた
PathScope は独自のアイコンを持つ別のアプリとして入ります。起動のしかたは次のとおりです。
| 環境 | 起動のしかた |
|---|---|
| Mac | 配布ファイル(DMG)の中の PathScope.app を開き、「分析する」を押します。 |
| Linux | アプリの一覧から「PathScope」を開き、「分析する」を押します。ターミナルからは pathscope-gui です。画面の表示には WebKitGTK 4.1 が必要で、deb と rpm では自動で入ります。Arch(AUR)では webkit2gtk-4.1 を任意の依存として入れてください。 |
| コマンドライン | ターミナルで pathscope を実行します。Mac では PathScope.app/Contents/MacOS/pathscope です。 |
起動すると、上部に「分析する」「履歴」「LLM補助」「LLMで解説」「設定」のボタンが並んだ画面が開きます。「LLMで解説」は、分析結果を表示するまで押せません。PathScope は待受ポートを開かず、画面は外部のサイトを読み込みません。
3. 分析して結果を読む
「分析する」を押すと、いまのユーザーを出発点に、この端末の状態を集めて分析します。数秒から数十秒かかることがあります。終わると、結果が自動で履歴に1件保存されます。
操作手順
- 「分析する」を押します。
- 「経路の図」と「経路一覧」で、どのユーザーがどの手順で root や機密データに届くかを見ます。丸や四角がユーザーや行き着く先、線が権限が上がる手順1つ分です。線の上の番号は、図の下の表にある「その手順が成り立つ理由」に対応します。
- 「対策箇所(先に直す順)」で、先に直すと効果が大きい箇所を確かめます。各項目に、優先度(緊急・高・中・低と点数)、影響する経路の本数、修正案、MITRE ATT&CK の近い技術が出ます。
- 「これを直したら?」を押すと、その対策箇所を修正案どおりに直した場合の経路を、仮に分析し直します。「すべて直したら?」なら、表示中の対策箇所を全部直した場合です。どちらもこの端末は変更しません。
- 対策箇所の下に出る、確認できなかった範囲の一覧を読みます。
どんな経路を見つけるか
- dockerグループに入っている(root と同じ操作ができる)
- root の権限で動く実行ファイル(SUID)を悪用して、root になる、ファイルを書き換える、ファイルを読む
- root で動くサービス、root が待ち受けるプログラム、root が定期的に実行するファイルの、実行ファイルを書き換えられる
- パスワード無しで sudo できる設定(sudo と cron の設定ファイルは、「LLM補助」で読み取ったときに対象になります)
- Mac で、全ファイルへのアクセスを許可されたアプリを書き換えられる
- 入っているソフトウェアやカーネル、macOS の版に、実際の攻撃で悪用された、または悪用される可能性が高い既知の脆弱性が残っている(CISA の KEV か、KEV には無くても FIRST の EPSS が高いもののうち、一般のユーザーが root になれるもの)
既知の脆弱性の確認は、アプリに同梱したデータで行います。対象は macOS と、データのある版の Debian・Ubuntu・RHEL 系・SUSE・Arch・Alpine で、それ以外(Debian 11 以前や Fedora など)は「未確認」と表示します。脆弱性を網羅的に調べる機能ではありません。
4. 履歴・書き出し・継続検査
分析結果は、この端末の中に履歴として自動で残ります。「履歴」を押すと一覧が開き、選んで開く、ラベル(例 修正前)を付ける、削除する、といった操作ができます。2件を選んで「選んだ2件を比較」を押すと、消えた経路と増えた経路、対策箇所の変化が分かります。修正の前後を比べるときに使ってください。
他の端末で保存した JSON 形式の分析結果は、「分析結果を取り込む」で履歴に取り込めます。履歴で2件以上を選んで「選んだ履歴を集計」を押すと、危ない端末の順や、複数台に共通する弱点が分かります。
表示中の分析結果を、「分析結果(JSON形式)」「見張る対象(JSON)」「auditd規則(Linuxの監査機能用)」として保存できます。保存先は、保存先を選ぶ画面で決めます。書き出すだけで、設定の適用やこの端末の変更はしません。
定期的に分析して、前回から経路が増えたら通知するための設定ファイルを書き出します。
- 分析結果を表示して、「比べる元として保存」を押します。
- 「間隔(分)」を決めます(5から10080まで)。
- Mac は「launchd設定を保存…」、Linux は「systemd設定を保存…」を押して、保存先を選びます。
- 書き出した内容を確認してから、利用者自身が登録します(launchctl load など)。PathScope は登録しません。
5. LLM を使う機能(任意)
使えるようにする
- 「LLM連携を有効にする」にチェックを入れます。
- 「使うLLM」を選びます。選べるのは claude、opencode、codex、agy のコマンドで、一覧の「状態」が「インストール済み」のものが使えます。「見つからない」と出るときは、先にそのコマンドを入れてください。
- 「設定の読み取りでLLMに送る範囲」を選びます(下の表を見てください)。
- 「保存」を押します。
一覧の「モデル」と「タイムアウト(秒)」は、LLM ごとに変えられます。claude は、起動するときにコマンドの実行とファイルの読み取りを止めます。opencode・codex・agy は止められないものとして扱い、「このLLMは、コマンド実行やファイル読み取りの機能を止められないことを理解した」にチェックを入れないと使えません。止められない LLM は、途中で自分の判断でファイルを読むことがあり、その内容が LLM のサービスに送られることがあります。
LLMで解説
分析結果を表示して「LLMで解説」を押すと、全体の評価、直す優先順位と理由、確認できなかった範囲の意味などを LLM に書かせます。渡すのは、経路・対策箇所・確認できなかった範囲の要約だけで、収集した生の情報(ファイルの所有者や権限の一覧など)は渡しません。ただし要約には、経路に出てくるユーザー名やファイルのパスが含まれます。LLM の返答は参考です。内容の確認と対応の判断は人が行い、返答をもとに何かが自動で変わることはありません。
LLM補助(設定ファイルの読み取り)
sudoers・cron・スクリプトなどの設定ファイルは書き方がまちまちで、プログラムだけでは読み取れないことがあります。LLM補助は、こうしたファイルを LLM に読ませて、root 権限に関わる記述を探します。
- 「LLM補助」を押します。読ませる候補のファイルが、理由つきで一覧に並びます(最初はすべて選ばれています)。sudoers、cron、systemd や launchd の設定、root で動くサービスが読み込む実行ファイルなどが候補になります。送りたくないものは、チェックを外します。
- 「選んだ○件をLLMに送る」を押します。送る内容の確認が出るので、読んでから「送る(確認済み)」を押します。
- 結果の「見つかった内容」「読んだファイル」「読まなかったファイル(これらは未確認のまま)」を確かめます。
- 「反映して分析し直す」を押すと、見つかった内容が分析に加わります。使いたくなくなったときは、「保存済み」から削除します。
LLM が挙げた内容のうち、元のファイルにその行が実際にあると確かめられたものだけを使います。確かめられなかった内容は「参考」に出るだけで、分析には使いません。確かめは分析のたびに行うので、元の行が消えた内容は使われなくなります。
| 送る範囲 | 内容 |
|---|---|
| 標準 | パスワードや鍵らしい値は「[REDACTED]」に置き換えて送ります。秘密鍵などのファイルは送りません。大きなファイルは、パスやコマンドが書かれた行だけを送ります。 |
| 制限なし | ローカルで動く LLM のように、内容が外に出ない場合のための設定です(自己責任)。パスワードのハッシュなども送ります。 |
6. コマンドラインで使う
画面と同じ分析を pathscope コマンドでも行えます。何も付けずに実行すると、いまのユーザーから root への経路を分析します。収集は読み取り専用で、端末の状態は変更しません。
pathscope
pathscope --json-out=report.json
pathscope --what-if-fix=all
pathscope --baseline=base.json --fail-on=new --notify
pathscope --print-schedule=systemd --interval-min=60
pathscope --export-watch=watch.json --export-auditd=pathscope.rules
pathscope --plain
pathscope --version
pathscope --lang=en
| オプション | 内容 |
|---|---|
--json-out=<file> | 結果を JSON で保存します。 |
--what-if-fix=all | すべての修正案どおりに直した場合の経路を、仮に分析し直します。番号を指定すると、その対策箇所だけです。 |
--baseline=<file> --fail-on=new | 前回の JSON と比べて、経路が増えたら終了コード 1 にします。--notify を付けると、デスクトップ通知(件数のみ)も出します。 |
--fail-on=any|new|critical|high|medium | any は経路が1本でもあるとき、critical・high・medium はその優先度以上の対策箇所があるときに、終了コード 1 にします。 |
--print-schedule=launchd|systemd | 定期実行の設定例を表示します。登録はしません。--interval-min で間隔(分)を指定できます。 |
--plain | Markdown ではなく、従来の文章の形で出します。分析の前提は、結果の中ではなく標準エラーに出ます。 |
--help / --version | --help(-h)は、全オプションの説明、終了コード、使用例を表示します。--version(-V)は版を表示します。 |
出力は Markdown です。「PathScope の診断結果」の見出しの下に、概要の表、経路、対策箇所(優先度・手順・理由・影響する経路の表と、番号ごとの詳細として ATT&CK の対応・修正案のコマンド・注意)、収集の範囲、分析の前提の順に並びます。対策箇所は経路が見つかったときだけ、分析の前提は書くことがあるときだけ出ます。--what-if-* を付けると「もし次の変更をしたら」、--baseline を付けると前回からの変化が、箇条書きで続きます。そのままメモやチケットに貼れます。従来の文章の形で出すときは --plain を付けます。
終了コードは、0 が正常、1 が --fail-on の条件に当たったとき、2 が使い方や入出力のエラーです。root で実行すると、root が待ち受けているリスナーも直接収集します。LLM補助で保存した読み取り結果も、コマンドの分析に取り込まれます。
7. 保存場所と更新
| 内容 | 保存場所 |
|---|---|
| 分析結果の履歴 | Mac は ~/Library/Application Support/net.lafine.pathscope/history.sqlite3、Linux は ~/.local/share/net.lafine.pathscope/history.sqlite3 |
| LLM 連携の設定 | ~/.config/pathscope/settings.json(自分だけが読み書きできる権限で保存) |
| LLM補助で保存した内容 | ~/.local/share/pathscope/facts.json |
| 継続検査の「比べる元」 | ~/.local/share/pathscope/baseline.json |
履歴は、履歴の画面の「すべて削除」で消せます。分析結果には、この端末の構成に関わる機微な情報(ユーザー名、ファイルのパス、権限)が含まれるので、保管と共有の範囲を限定してください。LLM の一覧にないコマンドを使いたいときは、設定ファイルの profiles を手で書き足します。画面からは変えられません。
アプリの更新
Mac の PathScope は、RoamSwitch とは別に、自分で更新します。「更新を確認」を押したときだけ、最新版の情報を取得するために lafine.net に接続します(この端末や分析結果の情報は送りません)。新しい版があれば「v○○をインストール」を押し、終わったら「再起動して反映」を押します。ダウンロードした更新は、改ざんされていないか署名を検証して、問題がなかったものだけに入れ替えます。
Linux では、RoamSwitch のパッケージに含まれているため、更新はそのパッケージの更新で行います。「アップデート」タブにもその旨が表示されます。
既知の脆弱性などの分析に使うデータは、アプリに同梱されています。それ以降に見つかったものは、PathScope を更新するまで確認されません。同梱データが古くなっていると、分析結果にその旨が出ます。
8. できないこと
- 設定やファイルの変更、修正の自動実行はしません。修正案を示すところまでです。
- 「経路が見つからなかった」は、収集できた範囲内での結果です。安全の証明ではありません。
- 脆弱性の網羅的な検査はしません。見るのは、実際の攻撃で悪用された既知の脆弱性のうち、一般のユーザーが root になれるものだけです。
- 「これを直したら?」は、分析した直後の結果でだけ使えます。履歴から開いた結果では使えません。
9. 困ったとき
| 症状 | 対処 |
|---|---|
| Mac で、確認できなかった範囲に「プライバシー設定のデータ(TCC.db)」が出る | 「設定」の「権限」タブで「フルディスクアクセスの設定を開く」を押し、システム設定で PathScope をオンにして、PathScope を再起動してから分析し直します。許可しなくても、他の分析は使えます。 |
| 「LLMを使えません」と出る、または保存できない | 「設定」の「LLM 連携」で有効にして、使う LLM を選びます。一覧で「見つからない」ならコマンドを入れます。opencode・codex・agy を選んだときは、確認のチェックも必要です。 |
| LLM が「タイムアウト」で止まる | 「設定」の「LLM 連携」の一覧で、その LLM の「タイムアウト(秒)」を長くして(1から900まで)、保存します。 |
| 「これを直したら?」が使えない | 履歴から開いた結果では使えません。もう一度「分析する」を押してから使います。 |
| アプリ内の更新が使えない | Linux で RoamSwitch のパッケージから入れた場合は、パッケージの更新で更新します。パッケージ(.deb・.rpm・AppImage)から入れていない場合は、アプリ内更新は使えないので、配布のパッケージを入れ直してください。 |