あなたのMacでは常に数百のプロセスが動作しています。そのほとんどは正規のシステムサービスや自分でインストールしたアプリです。しかし、たった1つの不正なプロセス(未署名、異常なパスから実行、ネットワーク接続を密かに開いている)がマシン全体を危険にさらす可能性があります。正常なシステムデーモンと不審な侵入者を見分ける方法を身につけることは、macOSユーザーが習得できる最も実用的なセキュリティスキルの1つです。
結論から言うと
macOSで不審なプロセスを検出するには、codesign -dvvvでコード署名の欠落や無効を確認し、spctl --assessでGatekeeperの承認状況を検証し、各プロセスの起動パス、親プロセス、ネットワーク活動、Entitlementsを調べます。Apple署名も開発者署名もなく、/tmp、/var/folders、またはユーザーが書き込み可能な場所から実行されているプロセスは、直ちに調査が必要です。
危険信号:不審なプロセスの兆候
見慣れないプロセスがすべてマルウェアとは限りませんが、以下のパターンには警戒すべきです。
- コード署名なし、またはアドホック署名。 正規のmacOSアプリは、Apple または特定の開発者によって署名されています。未署名のバイナリが常駐している場合は危険信号です。
- 一時ディレクトリや隠しディレクトリからの起動。
/tmp、/private/var、/var/folders、またはドットプレフィックスのディレクトリ(.hidden/)から実行されているプロセスは精査すべきです。正規のアプリは/Applications、/System、/usrに配置されます。 - 異常な親プロセス。
launchdによってログイン時に起動されたbashから生成されたcurlやpython3プロセスで、見覚えのあるLaunchAgentと一致しない場合は不審です。 - 想定外のアウトバウンドネットワーク接続。 見覚えのないプロセスが、特に非標準ポートで未知のIPアドレスに接続している場合は調査すべきです。
- 明確な目的のない高リソース使用。 暗号通貨マイナーやデータ窃取ツールは、操作と無関係に持続的なCPU使用率やネットワークI/Oを示すことがあります。
- 欠落した、または過度に広範なEntitlements。 シンプルなユーティリティが
com.apple.security.cs.disable-library-validationやcom.apple.security.cs.allow-unsigned-executable-memoryを要求しているのは異常です。
ステップバイステップ:不審なプロセスの調査方法
プロセスリストで見慣れないものを見つけたら、以下のチェックを順番に行いましょう。
1. コード署名を検証する
最も重要な単一のチェックです。バイナリに対してcodesignを実行します:
codesign -dvvv /path/to/suspicious-binary
Authorityチェーンを確認します。正常なアプリでは以下のように表示されます:
Authority=Developer ID Application: Company Name (TEAMID)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
code object is not signed at allと表示されたり、Authorityチェーンがない場合、そのバイナリは特定の開発者による署名がされていません。
2. Gatekeeperと公証ステータスを確認する
AppleのGatekeeperは、ソフトウェアが公証済み(Appleの自動マルウェアスキャンに提出済み)であることを検証します:
spctl --assess --verbose /path/to/suspicious-binary
公証済みアプリはaccepted, source=Notarized Developer IDと返します。それ以外の結果は、そのバイナリがAppleの公証要件を回避したか、要件以前のものであることを意味します。
3. 起動パスと引数を確認する
プロセスバイナリの実際の場所を確認します:
ps -eo pid,comm,args | grep <process-name>
正規のシステムプロセスは/usr/libexec、/System/Library、または/Applicationsから実行されます。com.apple.somethingという名前のプロセスが/Users/you/Library/LaunchAgents/から起動し、バイナリが/tmpにある場合は、システムサービスを偽装しています。
4. 永続化メカニズムを確認する
マルウェアは通常、再起動後も動作し続けるためにLaunchAgentまたはLaunchDaemonをインストールします:
# ユーザーレベルの永続化
ls ~/Library/LaunchAgents/
# システムレベルの永続化
ls /Library/LaunchDaemons/
ls /Library/LaunchAgents/
見慣れない.plistファイルを開き、ProgramArgumentsキーを確認して、どのバイナリを起動するか調べましょう。
5. ネットワーク接続を調べる
プロセスが何と通信しているか確認します:
lsof -i -n -P | grep <PID>
未知のIPへの接続、特に4444、8080などC2(コマンド&コントロール)サーバーがよく使う非標準ポートでの接続に注意してください。
6. Entitlementsを確認する
Entitlementsは、プロセスがアクセスできるシステムリソースを定義します:
codesign -d --entitlements - /path/to/binary
正規のPDFビューアーがcom.apple.security.device.cameraやcom.apple.security.network.serverを必要とするはずがありません。
不審に見えるが正常な一般的プロセス
慌てる前に、以下のリストを確認してください。これらのAppleシステムプロセスは頻繁にユーザーを混乱させます:
| プロセス | 実際の機能 |
|---|---|
kernel_task | macOSカーネル。CPU使用率が高い場合は通常サーマルスロットリングが原因で、マルウェアではありません |
mds / mds_stores | Spotlightインデックスエンジン。アプリのインストールやファイルコピー後に急増します |
WindowServer | GUI全体のコンポジター。CPU使用率が高い場合は通常ディスプレイスケーリングの問題です |
nsurlsessiond | App Storeの更新やiCloud同期のバックグラウンドダウンロード |
trustd | 証明書と信頼性の評価デーモン |
syspolicyd | Gatekeeperポリシー適用 |
cloudd | iCloud Drive同期デーモン |
bird | iCloudドキュメント同期ヘルパー |
mediaanalysisd | 写真アプリの顔/オブジェクト認識用ML処理 |
suggestd | Siri SuggestionsとSpotlightナレッジのインデックス作成 |
これらが有効なApple署名を持ち、/usr/libexecや/System/Libraryから実行されている場合、ほぼ確実に正規のプロセスです。
プロセスセキュリティ監査のためのツール
Activity Monitor
Activity MonitorはCPU、メモリ、基本的なプロセス情報を表示しますが、コード署名、Entitlements、親子プロセスツリー、起動パスを有用な形で表示することはできません。セキュリティ調査においては、出発点に過ぎません。
ターミナル:codesignとspctl
codesignとspctlコマンドラインツールは、署名と公証の検証における信頼できる情報源です。不可欠ですが、数十のプロセスを監査する必要がある場合は手間がかかります。各プロセスのバイナリパスを手動で見つける必要があるためです。
ProcXray
ProcXrayは、コード署名の検証とEntitlementsの検査をプロセス監視UIに直接統合しています。すべての実行中プロセスについて、以下を確認できます:
- 署名ステータスを一目で確認 — 署名済み、未署名、または無効 — ターミナルコマンドを実行せずに。
- 完全なEntitlements一覧 — 各プロセスが要求するシステム機能を確認。
- プロセスツリー表示 — どの親プロセスが不審な子プロセスを起動したか即座に追跡。
- 起動パスと引数 — バイナリの場所と起動方法を正確に確認。
各バイナリに対して手動でcodesign -dvvvを実行する代わりに、ProcXrayはすべてのプロセスのセキュリティコンテキストをリアルタイムで表示します。未署名のものや予期しない場所から実行されているものを見つけた場合、ターミナルに切り替えることなく、その系譜やネットワークコンテキストを調査できます。
FAQ
プロセスがマルウェアか正規のシステムサービスかをどう判断しますか?
3つを確認してください:(1) コード署名 — codesign -dvvvを実行し、Appleまたは特定の開発者のAuthorityチェーンを確認、(2) 起動パス — 正規のサービスは/Systemや/usr/libexecから実行され、/tmpや隠しディレクトリからは実行されません、(3) 永続化 — ~/Library/LaunchAgentsと/Library/LaunchDaemonsで、バイナリを指す見慣れないplistファイルがないか確認します。
マルウェアはActivity Monitorから隠れることができますか?
はい。ルートキットはシステムコールをフックして、ユーザー空間のツールからプロセスを隠すことができます。macOSのSystem Integrity Protection(SIP)により、これは大幅に困難になっています。SIPが有効であれば(csrutil statusで確認)、最新のmacOSではカーネルレベルの隠蔽はブロックされます。ただし、マルウェアは正規のプロセス名を使ったり、署名済みプロセスにインジェクションしたりして偽装することは可能です。
GatekeeperはすべてのマルウェアからMacを守れますか?
いいえ。Gatekeeperと公証は強力な第一防衛層を提供します。デフォルトでは、未署名および未公証のソフトウェアの実行をブロックします。しかし、ユーザーがGatekeeperを明示的にオーバーライドした場合(右クリック > 開く)、またはマルウェアが既に実行中のプロセスを通じて配信された場合(例:ブラウザのエクスプロイト)、Gatekeeperは回避されます。多層防御 — 署名の確認、プロセス動作の監視、永続化メカニズムの監査 — が引き続き不可欠です。
参考資料
- Apple: About Gatekeeper
- Apple: Notarizing macOS Software Before Distribution
- Apple: System Integrity Protection
- Apple:
codesignman page - Apple:
spctlman page - Apple: Entitlements Documentation
ProcXrayをダウンロード → — コード署名検証機能内蔵、macOS Sonoma以降対応。