PersonalSOC 操作マニュアル
この端末のログと防御の状況を、ボタン1つで読み取り専用に集めて、ひと目で分かるレポートにするアプリの使い方です。画面の操作を順番に説明し、コマンドラインは後ろの章にまとめています。
1. PersonalSOC とは
PersonalSOC は、この端末のログと防御の状況を集めて、検出事項と報告書にまとめるアプリです。専任の担当者がいない個人が、自分の端末で何が起きているかを根拠つきで知り、次にやることを決められるように作られています。
読み取り専用なので、設定を変えたり、ファイルを消したり、通信を遮断したりはしません。ログの解析は、LLM もネットワークも使わない決まった手順の解析器が行います。LLM 連携は任意で、最初はオフです。
できないこと
- 動かしている端末1台のための道具です。複数の端末をまとめて見る機能はありません。
- 権限は上げません。root でないと読めないログは「読めない」と表示し、sudo は使いません。
- 「検出なし」は安全の証明ではありません。総合リスクも、0 から 100 の目安で、確率ではありません。
- 読むものは決まった収集元だけです。画面から、読むファイルやコマンドを指定することはできません。
2. 入れ方と起動のしかた
PersonalSOC は、RoamSwitch とは別のアプリです。独自のアイコンを持ち、RoamSwitch の配布物に同梱されています。RoamSwitch のメニューに入口はなく、アプリとして単独で開きます。
| 環境 | 入れ方と開き方 |
|---|---|
| Mac | RoamSwitch の DMG に PersonalSOC.app が入っています。「アプリケーション」フォルダへ移して、「PersonalSOC」を開きます。macOS 12 以降です。 |
| Linux (クライアント版) | RoamSwitch の deb・rpm・tarball・AUR パッケージに同梱されています。アプリの一覧から「PersonalSOC」を開きます。ターミナルからは personalsoc-app です。画面には WebKitGTK 4.1 が必要で、deb と rpm では自動で入ります。AUR では webkit2gtk-4.1 を任意の依存として入れてください。 |
| Linux Server Edition | 含まれません。サーバー版の運用は運用マニュアル (Linux Server)を参照してください。 |
3. はじめての状況確認
「状況を確認する」を押したときだけ、固定の収集元を読みます。読ませたくない収集元は、設定で外せます。
操作手順
- アプリを開き、右上の「設定」を押します。
- その下に、この OS で読む収集元が並びます。読ませたくないものがあれば、チェックを外します。
- 「保存」を押し、「← 戻る」でホームに戻ります。
- 「状況を確認する」を押します。進み具合のバーが出て、終わると結果のタブが並びます。
終わると「確認が終わりました。検出 3 件 / IOC 2 件」のように件数が出ます。タブの見かたは次の章です。
| 環境 | 読むもの |
|---|---|
| Mac | macOS 統合ログ(直近24時間の sudo と sshd)と、MCP の設定(Claude Code・Claude Desktop・opencode・Cursor)。Web サーバーのアクセスログ(macOS 標準の Apache、Homebrew の nginx と httpd)も読みます。Gatekeeper が拒否した記録は、読むのに約10秒かかるので、最初はオフです。 |
| Linux | 認証ログ(sshd)、auditd、Web アクセスログ(nginx / apache。仮想ホストごとのログも含む)、DNS クエリログ(dnsmasq / named)、MCP の設定。 |
| 共通 | RoamSwitch が入っていれば、その MCP(読み取り専用)。「RoamSwitch の MCP(読み取り専用)から検知履歴と設定診断を取る」のチェックで切れます。 |
4. 結果の見かた
| タブ | 見えるもの |
|---|---|
| ダッシュボード | 総合リスク(目安)のゲージ、深刻度別の件数、分類ごとの発生件数、発生の推移、MITRE ATT&CK の件数が、図で見られます。 |
| 報告書 | 収集元、分類別の検出事項、IOC をまとめた Markdown の報告書です。「Markdown をコピー」で丸ごとコピーでき、「Markdown のソースを表示」で元の文字列に切り替えることもできます。 |
| 検出事項 | 検出を1件ずつ見られます。深刻度、確度、ATT&CK の番号、件数、根拠になったログの行番号が付きます。 |
| 収集元 | 何を確認したかの一覧です。状態は「読めた」「該当なし」「読めない(権限)」「失敗」「無効」のどれかで、「読めない」と「失敗」の収集元は確認できていません。 |
| IOC | ログから見つかった IP、ドメイン、URL、ハッシュの一覧です。誤って開かないよう、198[.]51[.]100[.]7 のような無害化した書き方で出ます。 |
| LLM用の要約入力 | LLM 連携がオフのときだけ出るタブです。手で LLM に渡すための要約で、ログの生の行は入っていません。「コピー」で使います。 |
5. 設定と定期実行
ホーム右上の「設定」を開くと、機能ごとのタブに分かれています。変えたあとは「保存」を押し、「← 戻る」でホームに戻ります。
表示言語 「自動(OS の設定に従う)」のほか、日本語、English、Deutsch、Español、Français、Italiano、한국어、Português (Portugal)、简体中文、繁體中文から選べます。
定期実行(任意)
「定期的に自動確認する」にチェックを入れて保存すると、Mac は launchd のユーザーエージェント、Linux は systemd のユーザータイマーに登録されます。間隔は 15 分から 24 時間までの 7 段階で選び、最初は 1 時間です。
動くのは personalsoc scan --notify だけで、root は使いません。前回になかった検出があるときだけ通知し、本文は件数だけです(Linux では notify-send が要ります)。「前回になかった検出があるときだけ通知する」で通知を切ることもできます。
チェックを外して保存すると、登録が解除されます。
6. LLM 連携(任意)
LLM 連携は任意で、最初はオフです。有効にすると、状況確認のあとに、選んだ LLM のコマンドが追加の調査をして、監査官として報告書を書きます。使えるのは、opencode、claude、codex、agy のコマンドです。
操作手順
- 「LLM 連携を有効にする」にチェックを入れます。
- 「使う LLM」を選びます。「(未導入)」と出るものは、この端末にコマンドがありません。
- 必要なら、モデルとタイムアウト(秒)を変えます。モデルを空欄にすると、その LLM の既定が使われます。
- 「保存」を押してホームに戻り、「状況を確認する」を押します。確認のあと、続けて LLM の調査が走ります。
LLM に渡るもの
- 渡すのは、検出の内容、根拠のログの行、MCP の返り値の文字列、収集元の備考です。状況を正確に調べるために、これらは渡します。
- 渡す前に、鍵・トークン・パスワードなどの秘密を伏せ字にし、不可視文字を取り除きます。
- PersonalSOC は、LLM にシェルもファイルも渡しません。LLM は「調べたいこと」を要求するだけで、PersonalSOC が許可した読み取り専用のツールを実行して結果を返します。調べる回数は最大 6 回です。
- LLM の出力は信頼せず、報告書では引用として扱います。LLM は検知を過剰に深刻に読むことがあるので、結論は必ず「検出事項」で確認してください。
道具の制限について
- 設定の表の「状態」の欄に、
opencodeとclaudeは「道具を制限して起動」と出ます。claude は内蔵の道具、MCP サーバー、スキルを止め、利用者の設定も読み込ませずに起動します。opencode は、すべての権限を拒否にして起動します。 codexとagyは、この方法では止められないため、「道具を制限できません」と出ます。
7. コマンドラインで使う
コマンドは personalsoc です。Linux では /usr/bin/personalsoc にあり、Mac では PersonalSOC.app/Contents/MacOS/ の中にあります。
| コマンド | できること |
|---|---|
personalsoc scan | この端末のログと RoamSwitch(MCP)を自動で確認し、検出を一覧で表示します。root でないと読めないログ(認証・Web サーバー・auditd)は、sudo を付けて実行します。 |
personalsoc scan --report | Markdown の報告書を表示します(LLM なし)。 |
personalsoc scan --llm <name> | LLM が読み取り専用のツールで調べて、監査官として書いた報告書を表示します。name は opencode、claude、codex、agy などです。 |
personalsoc scan --notify | 前回になかった検出があるときだけ通知します。定期実行が呼ぶ形です。 |
personalsoc <type> <file> | ファイルを指定して解析します。type は sshd、auditd、web、dns、unified、mcp、inject、ioc です。file に - を指定すると標準入力を読み、--report、--brief、--llm も付けられます。 |
--lang <lang> | どのコマンドにも付けられ、表示言語を設定より優先して指定します。コードは ja、en、de、es、fr、it、ko、pt-PT、zh-Hans、zh-Hant です。 |
--llm を付けて実行すること自体が、LLM に渡す明示の操作なので、設定の「LLM 連携を有効にする」がオフでも動きます。道具を制限できない LLM の確認も求められないので、codex や agy を使うときは、調査中にファイルが読まれて送られる可能性を理解したうえで使ってください。8. 保存場所とアップデート
保存されるもの
| もの | 場所 |
|---|---|
| 設定 | ~/.config/personalsoc/settings.json(自分だけが読み書きできる権限で保存されます) |
| 前回の検出の記録(通知の判定用) | ~/.local/state/personalsoc/last.json(検出の指紋にあたるハッシュだけで、ログの文字列は残しません) |
| 定期実行の登録 | Mac は ~/Library/LaunchAgents/dev.personalsoc.scan.plist(出力は ~/Library/Logs/personalsoc-scan.log)。Linux は ~/.config/systemd/user/ の personalsoc-scan.timer と personalsoc-scan.service です。 |
PersonalSOC は、報告書や集めたログをファイルに保存しません。残したいときは、画面の「Markdown をコピー」か、コマンドラインの出力を使ってください。LLM を増やしたいときは、設定ファイルの profiles を手で編集します。画面からは変えられません。
アップデート
Mac は、設定の「アップデート」で更新します。「アップデートを確認」を押したときだけ lafine.net に接続し、最新版の情報(公開の JSON)を受け取ります。この端末やログの情報は送りません。新しい版があれば「ダウンロードしてインストール」を押します。ダウンロードしたファイルは、アプリに埋め込んだ公開鍵で署名を検証し、失敗したら何も入れません。終わるとアプリが再起動します。
Mac では、RoamSwitch 本体のアップデートでは PersonalSOC は更新されません。Linux にはアップデート機能がなく、RoamSwitch のパッケージの更新に含まれます。
9. こんなときは
| 症状 | 原因と対処 |
|---|---|
| 収集元が「読めない(権限)」になる | 認証ログ、Web サーバー、auditd のログは、管理者権限がないと読めません。PersonalSOC は自分で権限を上げないので、sudo を付けて実行してください。「検出なし」とは別の状態で、そのログは確認できていません。 |
| 定期実行を保存できない | Mac で「隔離された一時的な場所から実行されています」と出たときは、PersonalSOC.app を「アプリケーション」フォルダへ移して開き直し、もう一度保存します。「personalsoc コマンドが見つからない」と出たときは、アプリ本体と同じ場所に personalsoc が必要です。 |
| claude の調査が「Not logged in」で失敗する | PersonalSOC は claude を、利用者の設定(~/.claude/settings.json の env や apiKeyHelper など)を読み込ませずに起動します。プロキシ、Bedrock、Vertex など、その設定で認証している構成では失敗します。設定ファイルに "llm_user_settings": ["claude"] を手で足すと、利用者の設定を読み込ませて起動します。道具と MCP は止めたままです。 |