
macOS IPC、launchd、Mach-O、および信頼関係の調査 — 依存関係ゼロのターミナルネイティブフォレンジックツール
machscope は、macOS のプロセス、launchd ジョブ、Mach サービス、バンドル、署名、エンタイトルメント、Mach-O のリンケージをすべてひとつの探索可能なグラフにまとめる、ターミナルネイティブの macOS 探索ツールです。
あるシンプルな問いに、残酷なまでに正確に答えるために存在します。
このプロセス、サービス、バイナリ、バンドルは、実際に何に接続されているのか?
プロセス、実行ファイル、launchd ジョブ、Mach サービス、バンドル、組み込み XPC サービス、コード署名、エンタイトルメント、Mach-O リンケージ、信頼性/異常性の発見 をひとつのビューで関連付けます。
Activity Monitor、ps、lsof、launchctl、codesign、otool が、偏執的でありながら操作者に優しい子を持ったら、それがこれです。
macOS の内部は洗練されていますが、真実は分散しています。
ひとつの怪しいプロセスを理解するために、次のツールを行ったり来たりすることがよくあります:
pslsoflaunchctlcodesignotoolInfo.plistmachscope はそのワークフローをひとつのターミナルツールに凝縮します。
以下のために設計されています:
PID、パス、launchd ラベル、または Mach サービス名 を指定すると、machscope は以下を関連付けることができます:
ps からのプロセスメタデータlsof からの実行ファイルパスとオープンファイルのコンテキストlaunchctl からの launchd の状態とラベルのヒントMachServices.xpc サービスcodesign からのコード署名識別子、チーム ID、認証チェーン、ランタイムヒントcodesign からのエンタイトルメントデータotool からの Mach-O ヘッダー、リンクされている dylib、ロードコマンド、rpathすべてのリアルタイムの XPC 関係を観察できるとは主張しません。一部の関係は 宣言されたもの であり、観測されたもの ではありません。その正直さは意図的です。
ps はプロセスを示すが、所有権チェーンは示さないlaunchctl はジョブを示すが、完全なバイナリ/バンドル/信頼性のコンテキストは示さないcodesign は ID を示すが、ランタイムの関係は示さないotool はリンケージを示すが、 launchd や Mach サービスの公開状況は示さないmachscope はそれらすべてを一度のパスで関連付ける--follow リゾルバのピボット
graph.nodes と graph.edges は将来の TUI、レンダラー、差分ワークフロー向けに設計されている./machscope.py inspect <pid|path|launchd-label|mach-service>
./machscope.py inspect <target> --follow
./machscope.py inspect <target> --json
./machscope.py scan --limit 40 --min-score 1
./machscope.py services [filter]
./machscope.py inspect 1
./machscope.py inspect 57382
./machscope.py inspect /System/Applications/Calculator.app --follow
./machscope.py inspect /usr/libexec/remoted
./machscope.py inspect com.apple.WindowServer --follow
./machscope.py inspect ai.openclaw.gateway --follow
./machscope.py inspect com.apple.dnssd.service --follow
./machscope.py scan --limit 40 --min-score 1
./machscope.py scan --limit 10 --min-score 6
./machscope.py services
./machscope.py services mDNS
./machscope.py services com.apple
Target: com.apple.dnssd.service [mach-service follow]
Resolved via: mach-service-launchd
Executable: /usr/sbin/mDNSResponder
Launchd: com.apple.mDNSResponder.reloaded
Plist: /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
Signature: apple-platform team=not set id=com.apple.mDNSResponder
Mach services: com.apple.dnssd.service, com.apple.mDNSResponder.control, com.apple.mDNSResponder.log_utility
Entitlements: 0
Linked dylibs: 25 RPATHs: 0
Trust: score=1 verdict=ordinary
Findings:
- [LOW] T012 Odd launchd label suffix
inspect --json は、スクリプトや将来の UI 作業向けに設計された構造化オブジェクトを返します。
トップレベルの構造:
targettarget_resolutionprocessbinarybundlelaunchdtrustgraph.nodesgraph.edgesグラフは意図的にシンプルであり、以下の入力として機能します:
--follow の仕組み--follow は、machscope を単なるメタデータダンパーではなく、探索ツールのように感じさせる機能です。
以下のようなリゾルバのピボットを追加します:
launchctl print の状態 → 利用可能な場合はライブ PIDこれが重要な理由は、macOS で最も興味深いアーティファクトは、多くの場合、あなたが入力した文字通りのものではなく、その背後にあるものだからです。
machscope にはシンプルな信頼性/異常性レイヤーが含まれています。
表面化できるものの例:
.reloaded のような奇妙な launchd サフィックスこれは マルウェア判定エンジンではありません。 リードを表面化し、死角を減らし、怪しいチェーンを調査しやすくするための方法です。
最初のバージョンは意図的に以下を使用しています:
ラップされたツール:
pslsoflaunchctlcodesignotoolfileこれにより、ツールを簡単にクローン、検査、そしてストックシステム上で実行できるようになります。
一部の関係は宣言されたものであり、観測されたものではありません。
例えば:
machscope は、不確実性を偽装するよりも、明示的であることを選びます。
ps、lsof、launchctl、codesign、otool、file などのネイティブツールへのアクセス最初は一般ユーザーとして実行してください。
それだけで十分な答えが得られることがよくあります。
一部の詳細は、昇格権限がないと不完全になることがあります。特に以下の場合:
lsoflaunchctl昇格する場合は、意図的に行ってください。
machscope は以下のものになろうとしているわけではありません:
macOS の内部を読みやすくするための、シャープなローカルツールです。
初期段階ですが、すでに有用です。
現在の出力とグラフモデルは、将来のバージョンで以下の機能を追加できるように意図的に形作られています: