ブログに戻る

macOSで不審なプロセスを検出する方法

コード署名の検証、Gatekeeperのチェック、プロセス検査のテクニックを使い、Mac上のマルウェアや不審なプロセスを特定する方法を解説します。

あなたのMacでは常に数百のプロセスが動作しています。そのほとんどは正規のシステムサービスや自分でインストールしたアプリです。しかし、たった1つの不正なプロセス(未署名、異常なパスから実行、ネットワーク接続を密かに開いている)がマシン全体を危険にさらす可能性があります。正常なシステムデーモンと不審な侵入者を見分ける方法を身につけることは、macOSユーザーが習得できる最も実用的なセキュリティスキルの1つです。

結論から言うと

macOSで不審なプロセスを検出するには、codesign -dvvvでコード署名の欠落や無効を確認し、spctl --assessでGatekeeperの承認状況を検証し、各プロセスの起動パス、親プロセス、ネットワーク活動、Entitlementsを調べます。Apple署名も開発者署名もなく、/tmp/var/folders、またはユーザーが書き込み可能な場所から実行されているプロセスは、直ちに調査が必要です。

危険信号:不審なプロセスの兆候

見慣れないプロセスがすべてマルウェアとは限りませんが、以下のパターンには警戒すべきです。

ステップバイステップ:不審なプロセスの調査方法

プロセスリストで見慣れないものを見つけたら、以下のチェックを順番に行いましょう。

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.cameracom.apple.security.network.serverを必要とするはずがありません。

不審に見えるが正常な一般的プロセス

慌てる前に、以下のリストを確認してください。これらのAppleシステムプロセスは頻繁にユーザーを混乱させます:

プロセス実際の機能
kernel_taskmacOSカーネル。CPU使用率が高い場合は通常サーマルスロットリングが原因で、マルウェアではありません
mds / mds_storesSpotlightインデックスエンジン。アプリのインストールやファイルコピー後に急増します
WindowServerGUI全体のコンポジター。CPU使用率が高い場合は通常ディスプレイスケーリングの問題です
nsurlsessiondApp Storeの更新やiCloud同期のバックグラウンドダウンロード
trustd証明書と信頼性の評価デーモン
syspolicydGatekeeperポリシー適用
clouddiCloud Drive同期デーモン
birdiCloudドキュメント同期ヘルパー
mediaanalysisd写真アプリの顔/オブジェクト認識用ML処理
suggestdSiri SuggestionsとSpotlightナレッジのインデックス作成

これらが有効なApple署名を持ち、/usr/libexec/System/Libraryから実行されている場合、ほぼ確実に正規のプロセスです。

プロセスセキュリティ監査のためのツール

Activity Monitor

Activity MonitorはCPU、メモリ、基本的なプロセス情報を表示しますが、コード署名、Entitlements、親子プロセスツリー、起動パスを有用な形で表示することはできません。セキュリティ調査においては、出発点に過ぎません。

ターミナル:codesignとspctl

codesignspctlコマンドラインツールは、署名と公証の検証における信頼できる情報源です。不可欠ですが、数十のプロセスを監査する必要がある場合は手間がかかります。各プロセスのバイナリパスを手動で見つける必要があるためです。

ProcXray

ProcXrayは、コード署名の検証とEntitlementsの検査をプロセス監視UIに直接統合しています。すべての実行中プロセスについて、以下を確認できます:

各バイナリに対して手動で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は回避されます。多層防御 — 署名の確認、プロセス動作の監視、永続化メカニズムの監査 — が引き続き不可欠です。

参考資料

ProcXrayをダウンロード → — コード署名検証機能内蔵、macOS Sonoma以降対応。