Mac でネットワークを壊さずにアンチウイルスをアンインストールする方法
アンチウイルス製品は一つのアプリではありません。アプリバンドルに加えて、macOS が自分の側で保持している登録情報のひとまとまり、システム拡張、保存されたネットワークフィルタの設定、一つ以上の launchd ジョブ、たいていは特権ヘルパー、そして管理下の Mac なら構成プロファイルまでが揃っています。バンドルをゴミ箱にドラッグしてもフロントエンドが消えるだけで、登録情報はすべてそのまま残ります。このカテゴリが「消せない」という評判を持つのはそのためで、最初の一手が Finder ではなくベンダー自身のアンインストーラであるべき理由もそこにあります。
セキュリティ製品がアプリバンドルの外にインストールするもの
どの Mac でも、読み取り専用のまま約一分でこの全体像を洗い出せます。
systemextensionsctl list
ls -la /Library/LaunchDaemons /Library/LaunchAgents ~/Library/LaunchAgents
ls -la /Library/PrivilegedHelperTools
profiles list
pkgutil --pkgs | grep -i vendorname
システム拡張は、ファイルやトラフィックを検査するコードを担っていて、このソフトウェアがかつて出荷していたカーネル拡張を置き換えたものです。だから .kext を削除するという古いアドバイスは、もう何も指していません。Apple のシステム拡張ガイドは、その置き場所をこう説明しています。「システム拡張はアプリの Contents/Library/SystemExtensions フォルダの中に存在します」。有効化にはあなたの承認が必要で、だからセキュリティソフトウェアのインストールには必ず設定画面への立ち寄りが伴います。Apple のデプロイメントに関するテクニカルノートは、削除時に重要になる性質を付け加えています。この形でパッケージされたプロバイダは「ログインしているユーザーから完全に独立した、グローバルなコンテキストで動作する」というものです。
ネットワークコンテンツフィルタや透過プロキシは別個のオブジェクトで、人々のインターネットを奪う原因になるのはこれです。それを有効にする設定は、アプリではなくシステム側に属しています。NEFilterManager ははっきりと述べています。「フィルタの設定は、Network Extension フレームワークが管理する Network Extension の環境設定に保存されます」。変更が反映されるのは、所有アプリが明示的に保存したときだけです。
launchd ジョブはバックグラウンドの部品を起動します。/Library/LaunchDaemons は誰もログインする前、起動時に root として実行され、/Library/LaunchAgents はログイン時にすべてのユーザーに対して実行され、~/Library/LaunchAgents はあなたのために実行されます。これらのフォルダにある plist は普通の設定ファイルではなく、launchd への登録です。
/Library/PrivilegedHelperTools 配下の特権ヘルパーは root が所有する実行ファイルで、対になるデーモンがあり、ファイルをどこかに動かす前にそのデーモンをアンロードしておくべきです。勤務先や学校が展開した Mac にある構成プロファイルは、拡張機能の承認とフィルタのペイロードを運んでいて、それによってソフトウェアは誰にも確認を求めずにインストールされますし、同じ仕組みでそれを元に戻すこともできます。
ゴミ箱にドラッグしてもうまくいかない理由
Apple は一つだけ良い知らせを文書化していますが、最初に読んだ印象より範囲は狭いものです。「ユーザーが対応するアプリを削除すると、システムは自動的にシステム拡張をアンインストールします」。これはバンドル内の拡張機能をカバーするだけで、バンドルの外にある他の登録情報については何も語っていません。
フィルタの設定は、この分野で最もよくある苦情の裏にあるものです。Network Extension の環境設定の中に独自の寿命を持っていて、Apple はその削除を所有アプリが行う明示的な呼び出しとして文書化しています。アプリを削除しても、その呼び出しは決して発生しません。残るのは、もう存在しないプロバイダを指したまま有効になっているフィルタで、症状は不完全な削除のあとに人々が報告するそのものです。失敗する DNS ルックアップ、どのページでも固まるブラウザ、Wi-Fi のアイコンはフルの信号を示しているのに接続がタイムアウトする。ネットワーク自体は正常です。トラフィックが、答えることのできないフィルタに渡されているだけです。
launchd ジョブは二つ目の失敗です。実行ファイルを削除しても、それを起動していたジョブは登録解除されません。動いていたサービスが起動のたびに失敗するサービスに変わるだけで、常駐するよう設定されたジョブはループで再試行され続けます。「アンインストールしたのにファンが回り出す」という報告はここから来ています。ジョブが読み込まれた状態で plist を削除するのは、その裏返しです。launchd はディスク上に何も残っていなくても、次の再起動までそのジョブを保持し続けます。ヘルパーとプロファイルも同じ理由で生き残り、ソフトウェアのペイロードを運ぶプロファイルは、あなたが削除したものを再インストールします。
難しさは設計上の決定
どんなプロセスでも静かにアンインストールできてしまうセキュリティソフトウェアは無価値です。有能なマルウェアが最初にやることは、自分を監視しているものを取り除くことだからです。だから macOS はライフサイクルの両端を、バックグラウンドプロセスが届かない場所に置いています。有効化には人間が設定画面で「許可」をクリックする必要があり(Apple のアラートページは macOS 15 以降ではログイン項目と機能拡張を、それ以前ではプライバシーとセキュリティを指しています)、無効化は拡張機能を所有するアプリからの要求です。この摩擦こそが、その設計が機能している証拠であり、あなたから隠されている本当のアンインストール手順としての rm コマンドの並びなど存在しません。
ルール、まずベンダーのアンインストーラを実行する
常に、他の何にも触る前にです。自分の拡張機能について無効化のリクエストを提出できるのは、それを内包するアプリだけです。フィルタの設定を Network Extension の環境設定から削除できるのは、それを保存したアプリだけです。順序を間違えて止めるとどのコンポーネントが他を再インストールしてしまうかを知っているのは、ベンダーのツールだけです。サードパーティのアンインストーラはそうしたハンドルを取得できないので、Mole を含む残渣スキャナーは、ベンダーのツールが実行し終えたあとに残ったものを片付けるためのものであり、それの代わりには決してなりません。
すでにアプリをゴミ箱にドラッグしてしまったなら、ファイル > 元の場所に戻すで戻し、起動して自身のアンインストーラを使ってください。以下の各セクションで、各ベンダーがそれをどこに置いているかを説明します。
各ベンダーがアンインストーラをどこに置いているか
以下のリンクはすべて、最新の手順が置かれているベンダー自身のサポートサイトを指しています。サポートページは移動することがあるので、この要約とページの内容が食い違ったら、このまとめではなくページのほうに従ってください。
McAfee
アンインストーラはすでに Mac の Applications の中にあり、購入した製品にちなんだ名前が付いているので、Total Protection のインストールと LiveSafe のインストールは同じものを使いません。McAfee の記事は、管理者としてサインインし、すべての McAfee アプリを終了させてから Go > Applications を開き、そのアンインストーラをダブルクリックするよう案内しています。読まずに自己流でやらないほうがいい理由が二つあります。macOS がシステム拡張について確認を求めてきたら「許可」をクリックするよう指示していることと、最後の再起動が提案ではなく番号付きの手順として書かれていることです。無反応になった Dock アイコンは削除後も生き残ることがあり、手でドラッグして外す必要があります。
Norton
こちらも同様に、Applications の中にすでにある別のアンインストーラアプリです。Norton のアンインストールページは Go > Applications、続けて Norton Uninstaller をダブルクリック、そして「管理者アカウントのパスワードを入力し、Install Helper をクリックする」、もう一度パスワード、最後に Finish という手順を案内しています。このヘルパーのステップこそが、アンインストーラが自身のシステムレベルのコンポーネントを解体するための権限を得る方法です。
Avast
アプリ内蔵のアンインストーラで、そのページは分かりやすい代替手段をまず否定するところから始まります。「Avast Security をゴミ箱に移動させたり、Clean My Mac を使ったりしても、アプリケーションは完全にはアンインストールされません」。文書化されている手順は、メニューバーで Avast Security > Uninstall Avast Security、Continue、続けて Mac の起動パスワードと Install Helper です。同じアンインストーラは、アプリが開かないときのために Avast Security Uninstaller として Applications にも置かれています。
Bitdefender
ドラッグではなく専用のアンインストーラバイナリです。アンインストールページは、Bitdefender フォルダを開き、Bitdefender Uninstaller をダブルクリックし、製品にチェックを入れ、Uninstall をクリックし、管理者の名前とパスワードを入力するよう案内しています。同じ流れの中で Bitdefender VPN の削除も提案されます。残すつもりがないなら受け入れる価値があります。そのコンポーネントは独自のネットワーク拡張を登録しているからです。
Malwarebytes
アプリ内のメニュー項目からです。アンインストールの記事は、メニューバーの Help > Uninstall Malwarebytes、確認プロンプト、Mac のパスワードという流れを案内しています。このカテゴリとしては珍しく、同じページは Finder 経由での削除も認めていて、これは自社のフットプリントについてのベンダー自身の言明でもあります。古い support.malwarebytes.com のアンインストール記事は今はリダイレクトされるので、help.malwarebytes.com のページを使ってください。
Sophos
二つの製品に二つの答えがあります。コンシューマ向け製品の Sophos Home は、Spotlight から起動する別の Remove Sophos Home アプリを使います。このページは代替手段についてぶっきらぼうです。「Sophos Home をゴミ箱にドラッグしないでください、これではプログラムはアンインストールされません」。ヘルパーをインストールし、パスワードを求め、再起動が必要です。同じページには、その後 Sophos のシステム拡張を削除するための任意セクションもあり、その手順は systemextensionsctl uninstall を System Integrity Protection の無効化と再有効化のあいだに挟んでいます。これは、境界がどこにあるかについての最も明確な表明です。ベンダー自身のアンインストーラでさえ、常に自分の拡張機能まで一緒に持ち去るとは限らないということです。これらの手順はベンダー自身がラベル付けしているとおり任意で、SIP は有効なままにしておく価値があります。
管理対象製品の Sophos Endpoint は Launchpad から Remove Sophos Endpoint を使いますが、ドキュメントには条件が付いています。「改ざん防止機能が有効になっている場合、Sophos Endpoint をアンインストールする前にそれをオフにする必要があります」。これには Sophos Central の管理者か、そのコンソールが保持するデバイスごとのパスワードが必要なので、業務用の Mac ではユーザー側でできる操作ではありません。
Kaspersky
アプリ内のサポートパネル経由です。アンインストールページは Help > Support、Uninstall、もう一度 Uninstall、続けて管理者の認証情報という流れを案内していて、Chrome と Firefox の拡張機能はアプリ本体より長生きすると警告しています。Kaspersky はアプリ内の手順が失敗したときのために、別の削除ツール kavremover-mac も公開しています。どちらのページも 2024 年の日付が付いているので、使っているバージョンと照らし合わせて確認してください。
Mac が管理下にあるなら、答えは IT チームにある
一晩かけて取り組む前に、そもそもこれがあなた自身の判断できることかどうかを確認してください。
profiles status -type enrollment
profiles list
一つ目は管理者権限なしで DEP と MDM の登録状態を表示し、二つ目はあなたのユーザーにインストールされている構成プロファイルを一覧表示します。同じ情報はシステム設定 > 一般 > デバイス管理の下にも表示されます。Apple のデバイス管理ガイドは、その先について率直です。「一部のプロファイルは、その Mac のシステム管理者しか削除できません。プロファイルを削除できない場合、その Mac は管理下のコンピュータである可能性があります」。
管理下の Mac では、セキュリティソフトウェアはその管理の一部というペイロードです。ローカルで削除しても、プロファイルがそれを再インストールします。改ざん防止機能をローカルで無効化しようとしてもできません。パスワードは、あなたが持っていないコンソールの中にあるからです。IT に割り当て解除を依頼してください。
削除できたかどうかを確認する
半端な削除を、まだ被害が小さいうちに見つけられる場所です。ベンダーのアンインストーラが終わり、Mac が再起動したあとに行ってください。このチェックのいくつかは、再起動を経て初めて本当のことを教えてくれるからです。
1. システム拡張。
systemextensionsctl list
何もインストールされていない Mac では、出力は 0 extension(s) という一行だけです。それ以外の場合、各行はチーム識別子、拡張機能のバンドル識別子、バージョン、角括弧に入った状態を示します。削除したはずのベンダーの識別子がまだ付いているものがあれば、無効化が完了していないということです。このツールは systemextensionsctl uninstall <teamID> <bundleID> も提供していて、一部のベンダーはまさにこのケースのためにそれを文書化していますが、ベンダーのページがそう指示している場合にのみ手を伸ばしてください。
2. launchd への登録。 三つの場所すべてでベンダーのラベルを探し、それから実際に何が読み込まれているか launchd に聞いてください。
ls -la /Library/LaunchDaemons /Library/LaunchAgents ~/Library/LaunchAgents
launchctl list | grep -i vendorname
sudo launchctl list | grep -i vendorname
二つの launchctl list の呼び出しは違う問いに答えます。一つ目はあなたのログインセッションをカバーし、二つ目は root のデーモンが存在するシステムドメインをカバーします。対応する読み込み済みジョブがない plist は残骸で、plist のない読み込み済みジョブは再起動が必要な Mac で、両方に存在するジョブはまだ動いているソフトウェアです。Mole は同じ三つの場所を一つのリストとして表示します。それが次のセクションです。
3. ネットワークフィルタ。 登録されているコンテンツフィルタはシステム設定 > ネットワークにフィルタの項目として表示されるので、項目がなければ何も登録されていません。アプリが消えたあとも一覧に残っているものが、接続を壊しているものです。
4. ログイン項目と機能拡張。 システム設定 > 一般 > ログイン項目と機能拡張を開き、ログインの一覧とその下のバックグラウンド項目の両方を読んでください。ベンダーのコンポーネントは、ここではアプリ本体より長生きすることがよくあります。
5. 実行中のプロセス。 アクティビティモニタでベンダー名を検索し、表示メニューからすべてのプロセスに切り替えて root 所有のデーモンも含めてください。再起動後に結果が空であることが、あなたが求めている確認です。
6. レシート。 pkgutil --pkgs | grep -i vendorname はインストーラが書き込んだものの名前を挙げてくれます。アクティブなコンポーネントが消えたあと、~/Library/Application Support 配下でレビューする価値のあるパスが分かります。
最初の三つのチェックがきれいなら、製品はマシンから消えていて、残っているのは挙動ではなくディスク容量だけです。
ここで Mole が行うこと、行わないこと
Mole の Software タブは、アプリの一覧と起動項目を一つの画面にまとめているので、ある製品が登録した launch agent、launch daemon、ログイン項目が、それを登録したアプリの隣に、それぞれ実際のパス付きで見えます。
残渣については、Mole は名前ではなくバンドル識別子でマッチングします。把握しているシステムレベルのパスは上記のとおりです。/Library/LaunchDaemons/<bundle-id>.plist、/Library/LaunchAgents/<bundle-id>.plist、/Library/PrivilegedHelperTools/<bundle-id>、そして /private/var/db/receipts 配下のレシート。システムレベルのマッチはすべてレビュー確信度、つまり未選択で届くという意味です。あらかじめチェックされたリストから外すのではなく、パスを読んだうえで自分から一つずつ選び入れます。削除はゴミ箱送りなので、間違えても引っ張り出せばよく、スキップと失敗は報告され、すべてローカルで完結します。
それよりも大事なのは、二つの拒否です。Mole は削除しようとしているアプリが所有する拡張機能を /Library/SystemExtensions でスキャンし、見つかった場合はその拡張機能の名前を挙げて、アプリが消えたあとも残る可能性があると伝える注意喚起を出します。無効化は試みません。試みることができないからです。そのリクエストは所有アプリから発生しなければなりません。そして ESET、CrowdStrike、SentinelOne、Jamf、Palo Alto GlobalProtect、Cisco Secure Client を含む、ロックされている、管理下にある、あるいは部分的に削除すると破壊的になる製品のベンダーについては、Mole はアンインストール自体を拒否し、ベンダー公式のアンインストーラを案内します。
この境界があるからこそ、このページの他の部分は信頼できるものになるので、ここは曖昧にしません。Mole はマルウェア対策ではなく、バックアップでもなく、ドライバや VPN コンポーネント、システム拡張を伴うソフトウェアのベンダー製アンインストーラの代わりでもありません。アンチウイルスに関しては、Mole の仕事はベンダーのアンインストーラが終わったあとに始まります。ターミナルでは、無料でオープンソースの Mole CLI が mo uninstall で同じレビューをカバーし、破壊的なコマンドはすべて --dry-run に対応しているので、先にパスのリストを読めます。
よくある質問
アンチウイルスを削除したらインターネットが使えなくなりました。どうすればいいですか
ほぼ確実に、アプリより長生きしたネットワークフィルタの設定です。それは Network Extension の環境設定の中にあり、フレームワークがバンドルとは独立に管理しているので、アプリを削除しても、もう存在しないプロバイダを指したまま有効になっているフィルタが残ります。システム設定 > ネットワークでフィルタの項目を、systemextensionsctl list で生き残った拡張機能を確認してください。直す方法は、ベンダーの製品を再インストールして、その自身のアンインストーラを実行することです。消そうとしているソフトウェアを再インストールするのは間違っているように感じますが、それでも最短の道です。
/Library/LaunchDaemons の plist をただ削除してもいいですか
最初の一手としてはだめですし、最後の一手としてもめったに正解ではありません。そこにある plist は launchd への登録なので、ジョブが読み込まれた状態でファイルを削除すると、ディスク上に説明するものが何もないまま、そのジョブは次の再起動まで動き続けます。ベンダーのアンインストーラが実行され、Mac が再起動し、sudo launchctl list が対応する読み込み済みジョブを表示しなくなって初めて、残った plist は無害な残骸になります。まだインストールされているソフトウェアに属する plist は絶対に削除しないでください。
ベンダーのアンインストーラがパスワードを求めたあと失敗します。どうすればいいですか
三つのことを確認してください。Mac が管理下にあるか、その場合は改ざん防止機能かプロファイルが削除をブロックしていて、答えは IT です。製品がまだ動いているか、一部のアンインストーラは自分自身のデーモンがファイルを開いたままにしていると完了できないので、再起動して再試行してください。そしてアンインストーラが最新かどうか、一部のベンダーはアプリ内の手順とは別にスタンドアロンの削除ツールを公開しています。この三つがすべてきれいなら、次はベンダーのサポートです。
消えたかどうかを確認する前に再起動する必要がありますか
はい。拡張機能の解体も launchd の登録解除も、どちらも再起動をまたいで完了するので、アンインストーラが終わった直後にチェックすると、すでに消えることが決まっている残渣が表示されることがありますし、逆に戻ってくるデーモンを見えなくしてしまうこともあります。
関連記事
- Mac でアプリを完全にアンインストールする方法、一般的な手順、バンドル識別子、共有コンテナについて。
- Mac アプリのアンインストール後に残ったファイルを削除する、アクティブなコンポーネントが消えたと確認できたあとの残渣について。
- Mac クリーナーが絶対に削除してはいけないもの、同じ判断の反対側について。