apsdとは実際に何か
apsdはApple Push Notification service daemonです。macOSの標準コンポーネントで、Appleが出荷し、コード署名しています。MacをAppleのプッシュ通知ネットワーク(APNs)に接続し続ける役割を担っています。マルウェアでも、任意の追加機能でも、あなたがインストールしたものでもありません。
その役割は狭いですが中心的です。Appleのプッシュサーバーへの接続を開いたままにし、Mac宛てのメッセージが送られた瞬間に届くようにします。アプリが後から確認するのを待つ必要はありません。Appleのインフラに何かが届くと、その接続を通して送り込み、apsdがシステムの該当部分に渡します。
macOSの多くは、この1本の回線に支えられています。iMessageとFaceTimeはシグナリングに使うので、メッセージや着信はすぐに届きます。Mailはプッシュ配信に対応したアカウントで使います。Find Myもそれに依存しています。Calendar、Contacts、Remindersは、別のデバイスで何かが変わったことを知るために使います。App Storeやサードパーティアプリの通知もそれを通ります。モバイルデバイス管理に登録されたMacでは、MDMコマンドも同じ方法で配信されるため、管理対象フリートではapsdが必須になります。
そのため、ネットワーク上でapsdが動いているのを見たら、たいていはこれから届く通知の裏側にある通信、またはシステムが静かに「新しいものはありません」と確認している裏側を見ているのです。
なぜapsdは常に接続されているのか
apsdがあらゆるネットワークモニターに現れるのは、偶然ではなく設計上の理由です。プッシュ通知は受信側デバイスに到達できてはじめて機能します。Appleは、そのデバイスがAppleのサーバーへ向けて1本の長寿命接続を開き、それを維持することで到達可能にしています。接続は大半の時間アイドルですが、両端がまだ有効だとわかるように小さなキープアライブ通信をやり取りし続けます。
この設計は意図的に効率的です。通知したいアプリがそれぞれ独自に接続を開いて更新をポーリングする方式なら、数十個のソケット、数十回のウェイクアップ、バッテリー寿命と帯域幅への目に見える負担になります。代わりに、システム全体で共有される単一のチャネルがあり、個々のアプリがMacから通知バックエンドへ直接話しかけることはありません。メッセージをAppleのサービスに渡し、Appleがapsdの保持している1本の接続に送り込みます。
また、その接続は下のネットワークが変わるたびに再確立しなければなりません。スリープからの復帰、Wi-FiからEthernetへの切り替え、別のネットワークへの参加、VPNの接続や切断。そうしたたびに既存のソケットは切断され、apsdはすぐに新しい接続を作り直します。ネットワークをまたいで移動しながら接続ログを見ていると、apsdは毎回かなり早く再接続するプロセスの一つです。
通信先はAppleが運営するプッシュおよび宅配ホストで、APNsの通信は通常TCPポート5223で運ばれます。制限の厳しいネットワークでそのポートが使えない場合は、代替経路が使われます。通信量はふつう少なく、多くの接続、短いやり取り、合計データ量もわずかです。目立つのに重くない、この性質が、apsdを監視ツールで目につかせる理由です。
apsdは安全か、そして自分で確認する方法
apsdは安全です。Apple純正のデーモンで、長年macOSの一部ですし、そのネットワーク挙動は役割そのものから完全に説明できます。本当に気にすべきなのは、apsd自体が危険かどうかではなく、その名前でMac上で動いているプロセスが本物かどうかです。マルウェアに退屈なシステム名を付けるのは昔からある手口なので、もっともな疑問です。
特別なツールがなくても確認できます。Activity MonitorでNetworkまたはCPUタブのapsdを探し、ダブルクリックしてインスペクタを開きます。本物のデーモンはrootで動作し、ホームフォルダ、Applications、Downloadsフォルダではなく、読み取り専用のシステムボリューム内にあり、あなたが起動した何かではなくlaunchdによって起動されます。ユーザーフォルダのどこかにapsdのコピーがあれば、それは追う価値のある異常です。
より確実なのはコード署名の確認です。AppleのシステムバイナリはAppleによって署名され、最新のmacOSではシステムボリュームが暗号学的に封印されているため、改ざんされたり置き換えられたシステムデーモンを、普通のソフトウェアがこっそり用意することはできません。明示的に確認したいなら、macOSには任意のバイナリの署名者を表示するコマンドラインツールが付属していて、apsdなら署名者はAppleであるはずです。
apsdが何でないかも押さえておくとよいでしょう。これはあなたのメッセージや書類を内容としてAppleに送っているわけではありません。プッシュチャネルが運ぶのは、上で説明したサービス向けの通知ペイロードとシグナリングです。iMessageのようなエンドツーエンド暗号化サービスでは、そこは配信経路であって、読み取れる内容が置かれる場所ではありません。apsdが絶えず接続しているのを見ると、通知システムが動いている、それ以上でもそれ以下でもないとわかります。
apsdをブロックすべきですか?
正直に言うと、答えはノーです。そして、その理由は具体的に述べる価値があります。単一のプロセスとしては影響がかなり広いからです。
apsdをブロックしても、うるさいアプリを個別に静かにすることはできません。Macに届くすべてのプッシュ通知が通る、あの一本の経路を断つことになります。iMessageは別の何かが同期を強制するまで表示されなくなります。FaceTimeの着信は鳴らなくなります。Find Myはすぐに応答できなくなります。プッシュに依存するメールアカウントは、定期チェックに戻るか、まったく更新しなくなります。カレンダー、連絡先、リマインダーは、他のデバイスで行われた変更を受け取れなくなります。サードパーティ製アプリの通知は、単純に届かなくなります。管理対象のMacでは、ITからのMDMコマンドが届かなくなり、たいていは解決ではなくサポート案件になります。
さらに厄介なのは、失敗のしかたが目立つのではなく、分かりにくいことです。プッシュがブロックされたというエラーは表示されません。ただ静かに、タイムリーでなくなるだけです。そして数週間後に、なぜメッセージはiPhoneには届くのにMacには届かないのかを調べることになります。
通知を減らしたいのが目的なら、使うべきなのはそれ用に作られたツールです。System Settingsではアプリごとに通知をオフにでき、Focusモードでは状況やスケジュールに応じて抑制できます。どちらも配信自体はそのままに、邪魔だけを止めます。バックグラウンド通信を減らしたいのが目的でも、apsdはそもそも対象が違います。送受信バイト数で見れば、典型的なMacでは最も軽い通信相手の一つです。実際にデータを動かしているのは、同期クライアント、バックアップエージェント、アップデーター、分析や広告SDKを含むアプリで、見るべきはそちらです。
apsdがCPUやネットワークを多く使用している場合、そしてより大局的に見た状況
ときどきapsdは本当に不調になり、その症状はほぼいつも同じです。CPU使用率が高止まりし、静かなキープアライブの様子とは程遠い接続試行が延々と続きます。たいてい見えているのは再接続ループです。デーモンが接続を確立しようとし、失敗するか切断され、また無限に試します。
よくある原因は、順に見ていく価値があります。最も多いのは不安定な、あるいは制限の厳しいネットワークです。キャプティブポータル、APNsが使うポートをフィルタリングする社内ネットワーク、不安定なVPNは、いずれもapsdの接続完了を妨げ、しかも試行は続きます。次は古い認証情報です。認証期限が切れたMailやiCloudアカウントは、はっきりしたエラーではなくプッシュの不調として現れることが多く、そのアカウントをサインアウトしてから再度サインインすると直ります。プッシュ接続に関わる証明書へ影響するKeychainの問題でも、同じパターンになります。それでも当てはまらないなら、再起動で驚くほど多くのループが解消します。また、そのループが特定のネットワークに限られるかも確認してください。自宅では問題なく、オフィスでだけループするなら、原因はMacではなくネットワークです。
より大きなポイントは、ここに来た理由そのものです。apsdは、macOSが許可なく動かしている多くのデーモンの一つにすぎず、そのほとんどはネットワークと通信します。どれも普通で、しかも既定では中身が見えません。macOSは、それらがどこへ接続しているのかをほとんど見せてくれないので、見覚えのない名前の普通のプロセスが妙に不穏に見えるのです。
その見えにくさを埋めるのがNetMuteです。アプリごと、プロセスごとの通信をリアルタイムで表示するので、Mac上の他のすべてと並べてapsdの動きを確認できます。ドメイン単位のログでは、各プロセスがどのドメインに、いつ、どれだけのデータを送受信したかが記録され、ぼんやりした不安が具体的な答えになります。本当に話すべきではないものがあれば、アプリごとのファイアウォールがワンクリックでブロックします。必要なら、自動期限切れの一時ルールで、ブロックすると何か壊れるかだけ試すこともできます。Network profilesなら、ルールを使っているネットワークに追従させられ、Tracker Shieldは300以上の既知のトラッカードメインをカバーします。目的は、apsdが示すように多くのバックグラウンド通信が正当なものだと分かったうえで、むやみに増やすことではなく、見分けることです。