Antivirus auf dem Mac deinstallieren, ohne das Netzwerk lahmzulegen
Ein Antivirenprodukt ist keine einzelne App. Es ist ein App-Bundle plus eine Reihe von Registrierungen, die macOS auf seiner eigenen Seite hält: eine Systemerweiterung, eine gespeicherte Netzwerkfilter-Konfiguration, ein oder mehrere launchd-Jobs, meist ein privilegierter Helper, und auf einem verwalteten Mac ein Konfigurationsprofil. Wer das Bundle in den Papierkorb zieht, entfernt nur die Oberfläche und lässt jede Registrierung zurück. Deshalb hat diese Kategorie den Ruf, sich nicht entfernen zu lassen, und deshalb ist der erste Schritt immer der Deinstaller des Herstellers, nicht der Finder.
Was ein Sicherheitsprodukt jenseits des App-Bundles installiert
Die gesamte Fläche lässt sich auf jedem Mac in etwa einer Minute rein lesend inventarisieren:
systemextensionsctl list
ls -la /Library/LaunchDaemons /Library/LaunchAgents ~/Library/LaunchAgents
ls -la /Library/PrivilegedHelperTools
profiles list
pkgutil --pkgs | grep -i vendorname
Eine Systemerweiterung enthält den Code, der Dateien und Datenverkehr prüft, und
ersetzt die Kernel-Erweiterungen, die diese Software früher mitbrachte. Deshalb laufen
alte Ratschläge zum Löschen einer .kext heute ins Leere. Apples
Leitfaden zu Systemerweiterungen
nennt den Ort: „System extensions reside inside your app's
Contents/Library/SystemExtensions folder.“ Die Aktivierung braucht Ihre Zustimmung,
weshalb die Installation von Sicherheitssoftware immer einen Abstecher in die
Systemeinstellungen erfordert. Apples
Deployment-Technote
ergänzt die Eigenschaft, die bei der Entfernung zählt: Ein so verpackter Provider „runs in
a global context, completely independent of the logged in user.“
Ein Netzwerk-Inhaltsfilter oder transparenter Proxy ist ein eigenständiges Objekt, und er ist es, der Nutzern das Internet nimmt. Die Konfiguration, die ihn aktiviert, gehört dem System, nicht der App. NEFilterManager ist eindeutig: „The filter configuration is stored in the Network Extension preferences which are managed by the Network Extension framework“, und Änderungen greifen erst, wenn die besitzende App sie ausdrücklich speichert.
launchd-Jobs starten die Hintergrundkomponenten. /Library/LaunchDaemons läuft als
root beim Booten, bevor sich jemand anmeldet; /Library/LaunchAgents läuft für jeden
Benutzer beim Login; ~/Library/LaunchAgents läuft für Sie. Ein Plist in diesen Ordnern
ist eine Registrierung bei launchd, keine gewöhnliche Einstellungsdatei.
Ein privilegierter Helper unter /Library/PrivilegedHelperTools ist eine
root-eigene ausführbare Datei, gekoppelt an einen Daemon, der entladen werden sollte,
bevor die Datei irgendwohin verschoben wird. Ein Konfigurationsprofil, auf einem von
Arbeitgeber oder Schule verwalteten Mac, trägt die Erweiterungsfreigaben und
Filter-Payloads, damit die Software installiert, ohne jemanden zu fragen, und derselbe
Mechanismus kann sie zurückbringen.
Warum das Verschieben in den Papierkorb nicht funktionieren kann
Apple dokumentiert eine gute Nachricht, die enger gefasst ist, als sie beim ersten Lesen klingt: „The system automatically uninstalls any system extensions when the user deletes the corresponding app.“ Das deckt die Erweiterung innerhalb des Bundles ab und sagt nichts über die übrigen Registrierungen, von denen keine im Bundle liegt.
Die Filter-Konfiguration steckt hinter der häufigsten Beschwerde hier. Sie führt ihr eigenes Leben in den Network-Extension-Einstellungen, und Apple dokumentiert ihre Entfernung als expliziten Aufruf, den die besitzende App tätigt. Das Löschen einer App löst diesen Aufruf nie aus. Übrig bleibt ein aktivierter Filter, der auf einen nicht mehr existierenden Provider zeigt, und die Symptome sind genau die, die nach einer Halb-Entfernung gemeldet werden: DNS-Abfragen, die fehlschlagen, ein Browser, der bei jeder Seite hängt, Verbindungen, die abbrechen, während das WLAN-Symbol volles Signal zeigt. Das Netzwerk ist in Ordnung. Der Datenverkehr wird nur an einen Filter übergeben, der nicht antworten kann.
Die launchd-Jobs sind der zweite Fehlerfall. Eine ausführbare Datei zu löschen meldet den Job, der sie startet, nicht ab, sondern macht aus einem funktionierenden Dienst einen, der bei jedem Start scheitert, und ein Job, der so konfiguriert ist, am Leben zu bleiben, wird dabei in einer Schleife immer wieder neu gestartet, woher die Berichte „mein Lüfter dreht hoch, nachdem ich es deinstalliert habe“ stammen. Das Plist zu löschen, während der Job geladen ist, ist das Spiegelbild davon: launchd behält den Job bis zum nächsten Neustart, ohne dass noch etwas auf der Festplatte davon zeugt. Der Helper und das Profil überleben aus demselben Grund, und ein Profil mit Software-Payload installiert das Gelöschte wieder.
Die Schwierigkeit ist eine Designentscheidung
Sicherheitssoftware, die jeder Prozess stillschweigend deinstallieren könnte, wäre
wertlos, denn das Erste, was fähige Malware täte, wäre, den Beobachter zu entfernen.
Deshalb legt macOS beide Enden des Lebenszyklus dorthin, wo ein Hintergrundprozess nicht
herankommt: Die Aktivierung braucht einen Menschen, der in den Systemeinstellungen auf
Zulassen klickt (Apples Hinweisseite verweist
auf Anmeldeobjekte & Erweiterungen ab macOS 15, davor auf Datenschutz & Sicherheit), und
die Deaktivierung ist eine Anfrage der App, der die Erweiterung gehört. Die Reibung ist
dieses Design bei der Arbeit, und es gibt keine Abfolge von rm-Befehlen, die die
eigentliche, Ihnen vorenthaltene Deinstallation wäre.
Die Regel: zuerst den Deinstaller des Herstellers ausführen
Immer, und bevor Sie sonst irgendetwas anfassen. Nur die enthaltende App kann eine Deaktivierungsanfrage für ihre eigene Erweiterung stellen. Nur die App, die die Filter-Konfiguration gespeichert hat, kann sie aus den Network-Extension-Einstellungen entfernen. Nur das Tool des Herstellers weiß, welche seiner Komponenten die anderen wieder installiert, wenn man sie in falscher Reihenfolge stoppt. Kein Drittanbieter-Deinstaller kann sich diese Zugriffe verschaffen, deshalb ist ein Restescanner, Mole eingeschlossen, für das gedacht, was nach dem Lauf des Hersteller-Tools übrig bleibt, niemals als Ersatz dafür.
Falls Sie die App schon in den Papierkorb gezogen haben, holen Sie sie mit Ablage > Zurücklegen zurück, starten Sie sie und nutzen Sie ihren eigenen Deinstaller. Die Abschnitte unten zeigen, wo jeder Hersteller ihn versteckt.
Wo jeder Hersteller seinen Deinstaller aufbewahrt
Jeder Link unten führt auf die eigene Support-Seite des Herstellers, wo die aktuellen Schritte stehen. Support-Seiten ändern sich, folgen Sie im Zweifel also der Seite und nicht dieser Zusammenfassung.
McAfee
Der Deinstaller liegt bereits auf dem Mac, im Programme-Ordner, benannt nach dem Produkt, das Sie gekauft haben, sodass eine Total-Protection-Installation und eine LiveSafe-Installation nicht denselben verwenden. McAfees Artikel lässt Sie als Administrator anmelden, jede McAfee-App beenden und dann Gehe zu > Programme öffnen und den Deinstaller doppelklicken. Zwei seiner Schritte sind der Grund, ihn zu lesen statt zu improvisieren: Er sagt Ihnen, bei der macOS-Abfrage zu einer Systemerweiterung auf Zulassen zu klicken, und er endet mit einem Neustart als nummeriertem Schritt, nicht als Vorschlag. Ein totes Dock-Symbol kann die Entfernung überleben und muss von Hand weggezogen werden.
Norton
Ebenfalls eine eigene Deinstaller-App, bereits im Programme-Ordner. Nortons Deinstallationsseite führt durch Gehe zu > Programme, dann Doppelklick auf Norton Uninstaller, dann das Administratorkennwort eingeben und auf Install Helper klicken, dann das Kennwort erneut, dann Finish. Der Helper-Schritt verschafft dem Deinstaller die Rechte, um seine eigenen systemnahen Komponenten wieder rückgängig zu machen.
Avast
Ein In-App-Deinstaller, auf einer Seite, die gleich zu Beginn die naheliegende Alternative ausschließt: „Moving Avast Security to the Trash or using Clean My Mac does not fully uninstall the application.“ Der dokumentierte Weg ist Avast Security > Uninstall Avast Security in der Menüleiste, Continue, dann das Mac-Startkennwort und Install Helper. Derselbe Deinstaller liegt außerdem im Programme-Ordner als Avast Security Uninstaller, für den Fall, dass sich die App nicht öffnen lässt.
Bitdefender
Ein eigenes Deinstaller-Programm statt eines Ziehens in den Papierkorb. Die Deinstallationsseite lässt Sie den Bitdefender-Ordner öffnen, Bitdefender Uninstaller doppelklicken, das Produkt ankreuzen, auf Uninstall klicken und Administratorname sowie -kennwort eingeben. Derselbe Durchgang bietet an, Bitdefender VPN mitzuentfernen, was sich lohnt, falls Sie es nicht behalten möchten, da diese Komponente eine eigene Netzwerkerweiterung registriert.
Malwarebytes
Ein Menüpunkt in der App. Der
Deinstallationsartikel
führt Sie über Help > Uninstall Malwarebytes in der Menüleiste, eine
Bestätigungsabfrage und Ihr Mac-Kennwort. Ungewöhnlich für diese Kategorie: Dieselbe
Seite akzeptiert auch die Entfernung über den Finder, eine Aussage des Herstellers über
den eigenen Fußabdruck. Ältere Deinstallationsartikel unter support.malwarebytes.com
leiten inzwischen weiter; nutzen Sie die Seite unter help.malwarebytes.com.
Sophos
Zwei Produkte, zwei Antworten. Sophos Home, das Verbraucherprodukt, nutzt eine eigene
Remove Sophos Home-App, die über Spotlight gestartet wird. Die
Seite
ist unmissverständlich zur Alternative: „DO NOT drag Sophos Home to the Trash as this will
not uninstall the program.“ Sie installiert einen Helper, fragt nach Ihrem Kennwort und
braucht einen Neustart. Dieselbe Seite trägt einen optionalen Abschnitt zum
nachträglichen Entfernen der Sophos-Systemerweiterungen, und dieser Ablauf klammert
systemextensionsctl uninstall zwischen Deaktivieren und Wieder-Aktivieren des System
Integrity Protection ein. Das ist die klarste Aussage darüber, wo die Grenze verläuft:
Selbst der eigene Deinstaller eines Herstellers nimmt seine Erweiterungen nicht immer mit.
Diese Schritte sind optional, genau wie der Hersteller sie kennzeichnet, und SIP
eingeschaltet zu lassen lohnt sich.
Sophos Endpoint, das verwaltete Produkt, nutzt Remove Sophos Endpoint aus dem Launchpad, aber die Dokumentation sperrt es: „If tamper protection is turned on, you need to turn it off before you can uninstall Sophos Endpoint.“ Das braucht einen Sophos-Central-Administrator oder das gerätespezifische Kennwort aus dieser Konsole, auf einem Firmen-Mac ist das also keine Sache, die Sie selbst erledigen.
Kaspersky
In der App, über das Support-Panel. Die
Deinstallationsseite
führt durch Help > Support, Uninstall, noch einmal Uninstall, dann
Administratoranmeldedaten, und warnt, dass die Chrome- und Firefox-Erweiterungen die App
überleben. Kaspersky veröffentlicht außerdem ein eigenes
Removal-Tool, kavremover-mac, für den Fall, dass
der In-App-Weg fehlschlägt. Beide Seiten tragen ein Datum aus 2024, prüfen Sie also gegen
Ihre Version.
Wenn der Mac verwaltet wird, liegt die Antwort bei Ihrer IT-Abteilung
Bevor Sie einen Abend hierin investieren, prüfen Sie, ob die Entscheidung überhaupt bei Ihnen liegt:
profiles status -type enrollment
profiles list
Der erste Befehl gibt den DEP- und MDM-Anmeldestatus aus, ohne Administratorrechte zu brauchen, der zweite listet die für Ihren Benutzer installierten Konfigurationsprofile, und dieselbe Information erscheint unter Systemeinstellungen > Allgemein > Geräteverwaltung. Apples Leitfaden zur Geräteverwaltung ist unmissverständlich, was folgt: „Some profiles can only be removed by a system administrator of your Mac. If you can't remove a profile, your Mac may be a managed computer.“
Auf einem verwalteten Mac ist die Sicherheitssoftware ein Payload dieser Verwaltung. Entfernen Sie sie lokal, installiert das Profil sie erneut. Versuchen Sie, den Manipulationsschutz lokal zu deaktivieren, gelingt Ihnen das nicht, weil das Kennwort in einer Konsole liegt, die Sie nicht haben. Bitten Sie die IT-Abteilung, sie freizugeben.
Die Entfernung überprüfen
Hier lässt sich eine halbe Entfernung noch günstig erwischen. Erledigen Sie das, nachdem der Hersteller-Deinstaller fertig ist und der Mac neu gestartet hat, denn mehrere dieser Prüfungen sagen erst nach einem Neustart die Wahrheit.
1. Systemerweiterungen.
systemextensionsctl list
Auf einem Mac ohne installierte Erweiterungen ist die Ausgabe eine einzelne Zeile mit
0 extension(s). Andernfalls nennt jede Zeile den Team-Identifier, die Bundle-ID der
Erweiterung, ihre Version und einen Status in Klammern. Trägt eine Zeile noch den
Identifier des entfernten Herstellers, ist die Deaktivierung nicht abgeschlossen. Das Tool
bietet zwar systemextensionsctl uninstall <teamID> <bundleID> an, und manche Hersteller
dokumentieren es genau für diesen Fall, aber greifen Sie nur dazu, wenn die Seite des
Herstellers es Ihnen sagt.
2. launchd-Registrierungen. Suchen Sie in allen drei Orten nach den Kennzeichen des Herstellers, dann fragen Sie launchd, was tatsächlich geladen ist:
ls -la /Library/LaunchDaemons /Library/LaunchAgents ~/Library/LaunchAgents
launchctl list | grep -i vendorname
sudo launchctl list | grep -i vendorname
Die beiden launchctl list-Aufrufe beantworten unterschiedliche Fragen: Der erste
betrifft Ihre Anmeldesitzung, der zweite die Systemdomäne, in der root-Daemons leben. Ein
übrig gebliebenes Plist ohne passenden geladenen Job ist inaktiver Restmüll, ein geladener
Job ohne Plist ist ein Mac, der einen Neustart braucht, und ein Job in beiden ist Software,
die noch läuft. Mole zeigt dieselben drei Orte als eine einzige Liste, dazu mehr im
nächsten Abschnitt.
3. Netzwerkfilter. Ein registrierter Inhaltsfilter erscheint in **Systemeinstellungen
Netzwerk** als Filters-Eintrag, kein Eintrag bedeutet also, dass nichts registriert ist. Einer, der nach dem Verschwinden der App weiterhin gelistet ist, ist das, was Ihre Verbindung kaputt macht.
4. Anmeldeobjekte und Erweiterungen. Öffnen Sie Systemeinstellungen > Allgemein > Anmeldeobjekte & Erweiterungen und lesen Sie sowohl die Anmeldeliste als auch die Hintergrundobjekte darunter. Herstellerkomponenten überleben die App hier häufig.
5. Laufende Prozesse. Suchen Sie in der Aktivitätsanzeige nach dem Herstellernamen und wechseln Sie im Darstellung-Menü zu Alle Prozesse, damit root-eigene Daemons mitgezählt werden. Ein leeres Ergebnis nach einem Neustart ist die Bestätigung, die Sie wollen.
6. Belege. pkgutil --pkgs | grep -i vendorname nennt, was der Installer geschrieben
hat, und liefert Ihnen die Pfade, die sich zu prüfen lohnen, sobald die aktiven
Komponenten unter ~/Library/Application Support verschwunden sind.
Sind die ersten drei Prüfungen sauber, ist das Produkt vom Rechner verschwunden und alles Übrige ist nur noch Speicherplatz, kein Verhalten mehr.
Was Mole hier tut, und was es ablehnt
Moles Software-Tab führt den App-Bestand und die Startobjekte auf einem Bildschirm zusammen, sodass die Launch Agents, Launch Daemons und Anmeldeobjekte, die ein Produkt registriert hat, direkt neben der App sichtbar sind, die sie registriert hat, jedes mit seinem echten Pfad.
Bei den Resten gleicht Mole über die Bundle-Identität ab statt über den Namen, und die
systemnahen Pfade, die es kennt, sind die oben genannten:
/Library/LaunchDaemons/<bundle-id>.plist, /Library/LaunchAgents/<bundle-id>.plist,
/Library/PrivilegedHelperTools/<bundle-id> sowie die Belege unter
/private/var/db/receipts. Jeder systemnahe Treffer hat nur Review-Vertrauen, kommt also
unangekreuzt an: Sie entscheiden sich für jeden Pfad, nachdem Sie ihn gelesen haben, statt
sich aus einer vorangekreuzten Liste abzumelden. Entfernungen gehen in den Papierkorb,
also ist ein Fehler nur ein Zurückziehen, übersprungene und fehlgeschlagene Elemente
werden gemeldet, und alles läuft lokal.
Zwei Ablehnungen zählen mehr als alles Übrige. Mole durchsucht
/Library/SystemExtensions nach Erweiterungen, die der zu entfernenden App gehören, und
findet es eine, gibt es einen Hinweis aus, der diese Erweiterung nennt und sagt, dass sie
den Verlust der App überleben kann. Es versucht nicht, sie zu deaktivieren, weil es das
nicht kann: Diese Anfrage muss von der besitzenden App kommen. Und bei Herstellern, deren
Produkte gesperrt, verwaltet oder in Einzelteilen zu entfernen zerstörerisch sind,
darunter ESET, CrowdStrike, SentinelOne, Jamf, Palo Alto GlobalProtect und Cisco Secure
Client, lehnt Mole die Deinstallation vollständig ab und verweist auf den offiziellen
Deinstaller des Herstellers.
Diese Grenze ist es, die den Rest dieser Seite glaubwürdig macht, deshalb steht sie ohne
Einschränkung: Mole ist keine Malware-Reaktion, kein Backup und kein Ersatz für einen
Hersteller-Deinstaller bei Software, die Treiber, VPN-Komponenten oder
Systemerweiterungen mitbringt. Bei Antivirensoftware beginnt Moles Aufgabe erst, nachdem
der Deinstaller des Herstellers fertig ist. Im Terminal deckt die freie und quelloffene
Mole CLI dieselbe Überprüfung mit mo uninstall ab, und
jeder zerstörerische Befehl nimmt --dry-run entgegen, damit Sie die Pfadliste zuerst
lesen können.
Häufige Fragen
Mein Internet funktioniert nicht mehr, seit ich mein Antivirenprogramm gelöscht habe. Was tue ich?
Fast sicher eine Netzwerkfilter-Konfiguration, die die App überlebt hat. Sie lebt in den
Network-Extension-Einstellungen, die das Framework unabhängig vom Bundle verwaltet, sodass
das Löschen der App einen aktivierten Filter zurücklässt, der auf einen nicht mehr
existierenden Provider zeigt. Prüfen Sie Systemeinstellungen > Netzwerk auf einen
Filters-Eintrag und systemextensionsctl list auf eine überlebende Erweiterung. Die
Lösung ist, das Produkt des Herstellers neu zu installieren und dessen eigenen
Deinstaller laufen zu lassen. Software, die Sie entfernen möchten, dafür neu zu
installieren, fühlt sich falsch an und ist trotzdem der kürzeste Weg.
Kann ich einfach die Plists in /Library/LaunchDaemons löschen?
Nicht als ersten Schritt, und selten als letzten. Ein Plist dort ist eine Registrierung
bei launchd, also lässt das Löschen der Datei, während der Job geladen ist, den Job bis
zum nächsten Neustart weiterlaufen, ohne dass noch etwas auf der Festplatte das erklärt.
Sobald der Hersteller-Deinstaller gelaufen ist, der Mac neu gestartet hat und
sudo launchctl list keinen passenden geladenen Job mehr zeigt, ist ein übrig gebliebenes
Plist toter Restmüll. Entfernen Sie nie eines, das zu noch installierter Software gehört.
Der Deinstaller des Herstellers fragt nach meinem Kennwort und schlägt dann fehl. Was jetzt?
Prüfen Sie drei Dinge. Ist der Mac verwaltet, blockiert der Manipulationsschutz oder ein Profil die Entfernung, und die Antwort liegt bei der IT-Abteilung. Läuft das Produkt noch, denn manche Deinstaller können nicht fertig werden, solange ihr eigener Daemon Dateien geöffnet hält, also neu starten und erneut versuchen. Und ist der Deinstaller aktuell, denn manche Hersteller veröffentlichen ein eigenständiges Removal-Tool getrennt vom In-App-Weg. Sind alle drei sauber, ist der Support des Herstellers die nächste Anlaufstelle.
Muss ich neu starten, bevor ich prüfe, ob es weg ist?
Ja. Sowohl der Abbau der Erweiterung als auch die Abmeldung bei launchd schließen erst über einen Neustart hinweg ab, sodass eine Prüfung direkt nach dem Ende des Deinstallers bereits verschwindende Reste zeigen kann und ebenso einen Daemon verbergen kann, der zurückkommen wird.
Weiterführende Artikel
- Mac-Apps vollständig deinstallieren für die allgemeine Abfolge, Bundle-Identifier und geteilte Container.
- Übrig gebliebene Dateien nach dem Deinstallieren von Mac-Apps entfernen für Reste, sobald die aktiven Komponenten nachweislich weg sind.
- Was Mac-Cleaner niemals löschen sollten für die andere Seite derselben Abwägung.