プロセスを採取
ps で PID・親子関係・CPU・メモリを取得し、proc_pidpath で実行パスを補完。lsof で接続先を紐づけます。
デバイスの中で動くプロセスの森を、親子の流れとして描く。 署名・CPU・メモリ・ネットワーク、そして前回との差分を重ねて、 「見慣れない動き」に気づくための静的ビューアです。
Pipeline Viz の「構造 × 状態」を、Mac のプロセスに適用した試作。
ネイティブアプリや常駐エージェントは作りません。macOS 標準の ps / codesign / lsof
でスナップショットを取得し、JSON に正規化して、ブラウザのビューアに渡します。
サーバーもデータベースも不要で、GitHub Pages にそのまま置けます。
ps で PID・親子関係・CPU・メモリを取得し、proc_pidpath で実行パスを補完。lsof で接続先を紐づけます。
codesign で署名・Team ID・アドホック署名を確認し、1 つの process_snapshot.json にまとめます。
ブラウザ側で状態を分類し、親子ツリー・アラート・差分・インスペクタを描画。状態は URL に載ります。
親子関係を左から右の流れで配置。フィルタ時も祖先を薄く残し、文脈を切らしません。
未署名・アドホック・Team ID を表示。未署名バイナリと一時領域からの実行は Error として強調します。
Error / Warning をスコア順に一覧。クリックで該当ノードへ移動し、理由を確認できます。
前回スナップショットとの新規・変更・消滅を判定。実行パスをキーにし、CPU ±10pt などの変化を拾います。
lsof から TCP / UDP の接続先をプロセス単位で表示。未知の外向き接続を署名と並べて確認できます。
--watch で複数回サンプリングすると、CPU とメモリの短い推移をインスペクタに描きます。
分類はブラウザ側の純粋関数で行い、スナップショットには生の事実だけを持たせます。判定順は「未署名・危険パス → 警告条件 → システム領域 → 健全」。
| 状態 | 条件の例 | 表示 |
|---|---|---|
| Error | signed: false、/tmp・/Users/Shared からの実行 |
赤いノード。スコア最大 100。アラート最上位。 |
| Warning | アドホック署名、CPU 40% 以上、メモリ 15% 以上、新規出現、署名不明 | 琥珀色。スコアと理由を表示。 |
| Healthy | 署名済みで、既知の実行パス・通常の負荷 | ミント色。静かに一覧に残る。 |
| External | /System・/usr/libexec などのシステム領域 |
青灰色。スコアは 0 に固定し、ノイズを抑える。 |
状態は「危険度の断定」ではなく、見る順番を決めるためのシグナルです。最終判断はパス・署名・接続先・差分を並べて行います。
デモは合成スナップショットです。実データを見るには、ProcessSentinel ディレクトリでコレクタを実行してからビューアを開きます。
# ProcessSentinel に移動して
cd ProcessSentinel
python3 tools/collect_processes.py
# 前回を baseline に残しつつ、12 回サンプリング
python3 tools/collect_processes.py \
--baseline viewer/data/process_baseline.json \
--watch 12 --interval 2
# 静的サーバーを起動
python3 -m http.server 8000
# ブラウザで開く
http://localhost:8000/ProcessSentinel/viewer/
# 別のスナップショットを指定
...viewer/?data=process_snapshot.json
&baseline=process_baseline.json
署名確認には codesign、接続確認には lsof を使います。権限のないプロセスは署名が「未確認」になり、Warning として残ります。--no-codesign / --no-network で省略も可能です。
ツリー・署名・負荷・接続・差分を 1 画面に寄せ、怪しい候補を上から確認できるようにします。
イベントを常時監視するのではなく、スナップショットを取得する静的プロトタイプです。検知エンジンではありません。
iOS / iPadOS のプロセス取得は未実装。提案の Phase 4 以降の範囲です。
公開デモのプロセス名・PID・接続先は実在の macOS を模した合成値です。実データはローカルで生成します。