ブログに戻る
macOS security system tools

このMacのプロセスはウイルス?macOSプロセスが安全か見分ける方法

アクティビティモニタで見慣れないMacプロセスを発見したら、パス、コード署名、親プロセス、動作を確認して安全性を判断しましょう。

このページの目次

Mac の動作が遅いと感じたためにアクティビティ モニターを開くと、リストの先頭近くに nsurlsessiond、photoanalysisd、または trustd と呼ばれるものがあります。その名前で何もインストールしたことがありません。簡単に検索すると、自信に満ちた矛盾した答えが書かれたフォーラムのスレッドが見つかります。このガイドでは、自分で判断できる反復可能な方法、つまり通常の macOS デーモンと実際に疑うべきものを区別する 4 つのチェックを提供します。

簡単な回答

Mac 上の奇妙な名前のプロセスのほとんどは通常のシステム サービスですが、名前だけではそのプロセスが安全かどうかを判断することはできません。最も強力な最初のチェックは、実行可能ファイルが存在する場所と、そのコード署名が有効であり、要求された ID と一致しているかどうかです。ユーザーが書き込み可能なディレクトリまたは一時ディレクトリ内のシステムを検出するプロセス、無効な署名、またはソフトウェアと一致しない署名者はすべて調査が必要です。これらはそれ自体で証明されるというよりも強力なシグナルであるため、親プロセス、永続性、および動作が依然として重要です。アクティビティ モニターはコード署名の詳細を表示できません。 ProcXray は、署名情報と完全な実行可能パスを実行中のプロセスと一緒に配置します。

名前だけでは何も分からない理由

macOS は、アイドル状態のシステムで数百のバックグラウンド プロセスを実行します。ほとんどは、bird、secd、distnoted、rapportd、hidd など、ユーザーが読むことを意図していないため、簡潔で説明のつかない名前が付けられています。これらはいずれもユーザー向けの Apple 資料には記載されていないため、プロセス名を検索すると、3 人が推測し、1 人が macOS の再インストールを推奨するフォーラムのスレッドにたどり着くことがよくあります。

さらに悪いことに、名前はマルウェアが簡単にコピーできる 1 つの属性です。悪意のあるバイナリは自分自身を WindowServer または mdworker と呼ぶことができ、その名前でアクティビティ モニターに表示されます。名前ベースの判断はまったく逆であり、攻撃者が完全に制御する唯一のフィールドを信頼します。

以下の 4 つのチェックは、質問をどれだけ早く解決できるか順に行われます。

チェック 1: バイナリはどこに存在しますか?

この 1 回のチェックで、ほとんどのケースが解決されます。

macOS は、独自の実行可能ファイルを少数の保護された場所に保存します。 macOS Catalina では専用の読み取り専用システム ボリュームが導入され、macOS Big Sur では署名付きシステム ボリュームの暗号化保護が追加されました。通常のセキュリティ構成が変更されていない場合、実行中のソフトウェアは単にバイナリを /System/ に追加することはできません。システム整合性保護は、他の保護されたシステムの場所への変更も制限します。

正規のシステム ソフトウェアの一般的な場所:

詳細に確認する必要がある場所:

PID からプロセス名と親を簡単に表示するには:

ps -o pid,ppid,user,comm -p <pid>

レポートされるコマンドラインを検査するには、次のようにします。

ps -ww -o pid,ppid,user,args -p <pid>

comm、特に args は、信頼できる出所ではなく、手がかりとして扱います。プロセスは、ps が表示する引数を変更する可能性があり、出力は必ずしも実際の実行可能パスを明らかにするとは限りません。アクティビティ モニターで、プロセスをダブルクリックして [ファイルとポートを開く] を選択すると、開いているファイルの中から実行可能ファイルを公開できますが、パスは無関係なエントリの中に埋もれており、専用の列では使用できません。実行中のプロセスを検査するその他の方法については、Mac で実行中のプロセスを確認する方法 を参照してください。

チェック 2: 誰が署名したか?

パスはファイルの場所を示します。コード署名ツールは、署名されたコードが変更されていないことを個別に検証し、署名に記録された ID を表示できます。

# Verify signature integrity. No output means success.
codesign --verify --strict --verbose=2 /usr/libexec/trustd

# 署名の詳細を表示します。
codesign -dvvv /usr/libexec/trustd

最初のコマンドは検証を実行します。 codesign -d 自体はメタデータのみを表示します。表示出力は macOS リリースとバイナリによって異なるため、パスと検証結果とともに解釈してください。

調査を正当化する結果は次のとおりです。

Gatekeeper にアプリケーション バンドルについてどう思うかを直接尋ねることもできます。

spctl --assess --verbose=4 /Applications/SomeApp.app

accepted と source=Notarized Developer ID は、Apple の自動公証サービスが、送信されたビルドに悪意のあるコンポーネントがないかスキャンし、チケットを発行したことを意味します。これは有用な信頼シグナルであり、アプリが無害であることを保証するものではありません。 rejected は、アプリが現在評価中の Gatekeeper ポリシーを満たしていないことを意味します。古いソフトウェア、ローカル ビルド、悪意のあるソフトウェアはすべて、そのような結果を引き起こす可能性があります。

ここでのギャップは、アクティビティ モニターではこれらが一切公開されないことです。署名欄も権限欄も公証ステータスもありません。 Apple 独自のプロセス ビューアを介して「これは Apple によって署名されていますか?」と答えることは不可能です。プロセス ビューアを終了してターミナルに移動する必要があります。

チェック 3: 何がきっかけでそうなったのか?

プロセスの親は、そのプロセスがどのようにして存在するようになったのかを示しており、多くの場合、プロセスそのものよりも情報が豊富です。

ps -o pid,ppid,user,args -p <pid>

PPID が 1 の場合、launchd はプロセスの現在の親です。設定されたジョブとしてプロセスを起動したか、元の親が終了したプロセスを採用した可能性があります。これ自体は、プロセスを強制終了した後にプロセスが再起動することを意味するわけではありません。再起動の動作は、KeepAlive やオンデマンド トリガーなどの設定によって異なります。永続性が疑われる場合は、原因となっている可能性のあるジョブを検査してください。

# Jobs that run as you
ls -la ~/Library/LaunchAgents/

# すべてのユーザーに対して実行されるジョブ
ls -la /Library/LaunchAgents/ /Library/LaunchDaemons/

Apple 自身のジョブは、密閉されたシステム ボリューム上にある /System/Library/LaunchAgents/ と /System/Library/LaunchDaemons/ に存在します。 /System のない /Library/ バージョンはサードパーティ製です。正規のインストーラーが物を置く場所であり、望ましくないソフトウェアが物を置く場所でもあります。ここの.plistは、ホーム フォルダー内のバイナリを指すランダムなリバース ドメイン名を持ち、典型的なアドウェア パターンです。

最近実行したブラウザー、ドキュメント ビューアー プロセス、シェル、またはインストーラーである親も、フォローする価値のある手がかりです。

チェック 4: 何をしているのか?

最初の 3 つのチェックがプロセスの要求された ID と一致する場合、当面の懸念は低くなりますが、プロセスの動作が安全であることは証明されません。現在のアクティビティと永続性を追加のコンテキストとして使用します。

ウイルスと間違われやすいプロセス

この表のすべてのプロセスは、macOS の通常の部分です。

プロセス役割一般的な場所
kernel_taskカーネル自体。熱負荷も管理パスがありません - それはカーネルです
launchdPID 1。ほかのサービスを起動・監視/sbin/
WindowServer画面上に描画されたものをすべて合成します/System/Library/PrivateFrameworks/
mds、mds_stores、mdworkerスポットライトインデックス作成/System/Library/Frameworks/
nsurlsessiondアプリと iCloud のバックグラウンドでのダウンロードとアップロード/usr/libexec/
trustdTLS 接続の証明書の信頼性を評価/usr/libexec/
syspolicydゲートキーパーとシステム セキュリティ ポリシー/usr/libexec/
birdiCloud Drive ドキュメントの同期/usr/libexec/
clouddCloudKit — アプリ用の iCloud データ/System/Library/PrivateFrameworks/
secdキーチェーンと iCloud キーチェーンの同期/usr/libexec/
photoanalysisd写真ライブラリをスキャンして顔やシーンを探します/System/Library/PrivateFrameworks/
mediaanalysisdライブテキストとビジュアルルックアップ/System/Library/PrivateFrameworks/
rapportd継続性、ハンドオフ、およびユニバーサル クリップボード/usr/libexec/
sharingdAirDrop と共有サービス/usr/libexec/
distnotedプロセス間での分散通知配信/usr/sbin/
coreaudiodオーディオサブシステム/usr/sbin/
hiddキーボード、トラックパッド、その他の入力デバイス/usr/libexec/
backupdタイムマシン/System/Library/CoreServices/
com.apple.WebKit.WebContentSafari または WebKit ページ レンダラ (サイトごとに 1 つ)WebKit フレームワークの内部

これらの場所は永続的な API 契約ではなく一般的なものであり、Apple は macOS リリース間でコンポーネントを移動できます。ユーザーが書き込み可能なディレクトリ内で名前が一致する場合は、強力な警告サインです。別の保護されたシステム パスは、悪意があるとみなされる前に検証する必要があります。プロセス固有の診断については、kernel_task、WindowServer、および mds_stores のガイドを参照してください。

実際に疑わしいもの

調査する価値のあるシグナルを、おおよそ懸念される順に示します。

  1. システム以外のパスから実行されているシステムっぽい名前。 /Users/Shared/ の WindowServer は WindowServer ではありません。
  2. 署名なし、またはアドホック署名あり、システムに隣接するディレクトリから実行されます。 ユーザーに出荷される正規のソフトウェアは署名されています。
  3. 要求された ID と一致しない署名機関。 無関係な開発者 ID によって署名された Adob​​e アップデーターを名乗るアプリ。
  4. ニアミス名。 末尾のスペース、置換された文字、二重文字 — mdworker_shared と 1 文字違うもの。
  5. ~/Library/LaunchAgents/ の起動エージェントは、一時ディレクトリまたはダウンロード ディレクトリ内のバイナリを指します。
  6. 強制終了後数秒以内に新しい PID で再出現するプロセス。Apple 署名の起動デーモンまで追跡することはできません。

Apple に組み込まれた XProtect は、既知のマルウェアを自動的に検出してブロックし、定期的に感染をチェックする修復テクノロジーを備えています。アラートが存在しないため、既知の脅威に対する懸念は軽減されますが、実行中のすべてのプロセスが安全であるとは限りません。より詳細な調査ワークフローについては、macOS で不審なプロセスを検出する方法 を参照してください。

ProcXray を使用して 4 つのチェックすべてを一度に実行する

上記のワークフローでは、アクティビティ モニターといくつかのターミナル コマンドの間を移動し、クリアするプロセスごとにそれを繰り返す必要があります。 ProcXray は、それを 1 つのビューにまとめるために構築されました。

任意のプロセスを選択すると、単一の詳細パネルの隣接するタブに次の内容が表示されます。

このタスクでは 2 つの機能が特に重要です。新しく生成されたプロセスは緑色で強調表示され、終了したプロセスは赤色に消えて表示されたままになるため、コマンドを再実行してキャッチする必要があるプロセスではなく、強制終了後に再生成されるプロセスが一目瞭然です。正規表現検索では、名前、PID、引数、パスを一度にフィルタリングするため、ユーザーが書き込み可能な特定の場所を調査したり、疑わしい名前とその実行可能パスを比較したりすることが容易になります。 /System 外部のすべてのプロセスをサードパーティとして扱わないでください。多くの Apple プロセスは、/usr/libexec、/usr/sbin、/usr/bin、/sbin から合法的に実行されます。

よくある質問

nsurlsessiond はウイルスですか?

いいえ、いいえ。nsurlsessiond は Apple のバックグラウンド ネットワーキング デーモンであり、アプリがフォアグラウンドにないときに継続するダウンロードとアップロード (iCloud 同期、App Store のアップデート、および URLSession バックグラウンド転送を使用するアプリ) を担当します。これは /usr/libexec/ に存在し、Apple によって署名されています。ネットワークまたは CPU アクティビティが高い場合は、通常、大規模な iCloud 同期またはバックグラウンドでのアプリのダウンロードが進行中であることを意味します。

Mac プロセスが正当なものかどうかを確認するにはどうすればよいですか?

実行可能パスから始めて、codesign --verify --strict --verbose=2 <path> を実行してその署名を検証し、codesign -dvvv <path> を実行して記録された ID を検査します。保護されたシステム パス、主張する開発者と一致する有効な署名、期待される親、および説明可能な動作は、相互に強化するシグナルです。ユーザーが書き込み可能なディレクトリまたは一時ディレクトリから実行されているシステムっぽい名前は調査の対象になりますが、単一のチェックではプロセスが安全か悪意があるかを証明することはできません。

アクティビティ モニターがプロセスが安全かどうかを教えてくれないのはなぜですか?

アクティビティ モニターには、出所ではなくリソースの使用状況が表示されます。コード署名、署名権限、公証ステータスの列はなく、バイナリ パスには、[ファイルとポートを開く] パネルを介して間接的にのみアクセスできます。プロセスが正当かどうかを判断するには、アクティビティ モニターが公開しない情報が必要です。そのため、通常、答えにはターミナルや ProcXray などのツールが必要です。

マルウェアは macOS 上のシステム プロセスになりすますことができますか?

名前を自由にコピーできますが、それは簡単なことです。ただし、通常の macOS セキュリティ構成では、通常のソフトウェアはバイナリを署名済みシステム ボリュームに追加したり、Apple として有効な署名を作成したりすることはできません。読み取り専用システム ボリュームが Catalina に登場し、Big Sur では暗号化 SSV 保護が追加されました。したがって、パスと検証されたコード ID は、表示されるプロセス名よりもはるかに強力な証拠となりますが、依然として評価の一部を形成するにすぎません。

認識しないプロセスを強制終了する必要がありますか?

いいえ、最初のステップとしてではありません。見慣れないデーモンの多くは負荷が高く、それらの強制終了は無意味 (launchd がすぐに再起動する) から破壊的 (WindowServer がログイン セッションを終了する) まで多岐にわたります。まず 4 つのチェックを使用して特定します。それが望ましくないソフトウェアであることが判明した場合、それを起動する起動エージェントを削除することが実際の修正になります。プロセスを強制終了しても、プロセスが解放されて戻ってくるだけです。

macOS にはマルウェア保護機能が組み込まれていますか?

はい。 XProtect は、最初の起動時、アプリの変更時、および XProtect シグネチャの更新時に、既知の悪意のあるコンテンツがないかアプリをチェックします。その修復テクノロジーは、感染を定期的にチェックします。 Gatekeeper はダウンロードされたソフトウェアを検証し、最初に開くときに承認を求めますが、公証機能により Apple マルウェアの自動スキャンが追加されます。ユーザーは Gatekeeper の決定の一部を無効にすることができ、署名または公証されたソフトウェアが自動的に無害になるわけではありません。これらの保護は、保証ではなく強力なベースラインです。

出典と参考文献

ProcXray をダウンロード → — 無料の基本バージョンと 14 日間のプレミアム トライアル、macOS Sonoma+。