Comment désinstaller un antivirus sur Mac sans casser votre réseau
Un antivirus n’est pas une seule app. C’est un bundle d’app plus un ensemble d’enregistrements que macOS conserve de son propre côté de la clôture : une extension système, une configuration de filtre réseau sauvegardée, une ou plusieurs tâches launchd, généralement un auxiliaire privilégié, et sur un Mac géré, un profil de configuration. Glisser le bundle vers la Corbeille supprime la façade et laisse chaque enregistrement en place. C’est pour ça que cette catégorie a la réputation d’être irretirable, et pour ça que le premier réflexe doit être le désinstalleur de l’éditeur plutôt que le Finder.
Ce qu’un logiciel de sécurité installe au-delà du bundle d’app
Vous pouvez inventorier toute cette surface en lecture seule, sur n’importe quel Mac, en une minute environ :
systemextensionsctl list
ls -la /Library/LaunchDaemons /Library/LaunchAgents ~/Library/LaunchAgents
ls -la /Library/PrivilegedHelperTools
profiles list
pkgutil --pkgs | grep -i vendorname
Une extension système porte le code qui inspecte les fichiers et le trafic, en
remplacement des extensions noyau que ce type de logiciel embarquait autrefois, ce qui
explique pourquoi les vieux conseils sur la suppression d’un .kext ne décrivent plus
rien du tout. Le
guide des extensions système
d’Apple précise où elle vit : « Les extensions système résident dans le dossier
Contents/Library/SystemExtensions de votre app. » Son activation exige votre
approbation, ce qui explique pourquoi installer un logiciel de sécurité passe toujours
par un détour dans Réglages. La
note technique de déploiement
d’Apple ajoute la propriété qui compte au moment du retrait : un fournisseur packagé de
cette façon « s’exécute dans un contexte global, totalement indépendant de l’utilisateur
connecté ».
Un filtre de contenu réseau ou un proxy transparent est un objet à part, et c’est celui qui coupe l’accès à internet des gens. La configuration qui l’active appartient au système plutôt qu’à l’app. NEFilterManager est explicite : « La configuration du filtre est stockée dans les préférences Network Extension, gérées par le framework Network Extension », et les changements ne prennent effet que lorsque l’app propriétaire les enregistre explicitement.
Les tâches launchd démarrent les éléments en arrière-plan. /Library/LaunchDaemons
s’exécute en root au démarrage, avant que quiconque ne se connecte ;
/Library/LaunchAgents s’exécute pour chaque utilisateur à la connexion ;
~/Library/LaunchAgents s’exécute pour vous. Une plist dans ces dossiers est un
enregistrement auprès de launchd, pas un simple fichier de réglages.
Un auxiliaire privilégié sous /Library/PrivilegedHelperTools est un exécutable
possédé par root, associé à un démon qui devrait être déchargé avant que le fichier
n’aille où que ce soit. Un profil de configuration, sur un Mac déployé par un
employeur ou une école, porte les approbations d’extension et les charges de filtre pour
que le logiciel s’installe sans demander l’avis de personne, et le même mécanisme peut le
remettre en place.
Pourquoi le glisser vers la Corbeille ne peut pas fonctionner
Apple documente une bonne nouvelle, plus étroite qu’il n’y paraît au premier abord : « Le système désinstalle automatiquement toute extension système quand l’utilisateur supprime l’app correspondante. » Cela couvre l’extension à l’intérieur du bundle, et ne dit rien des autres enregistrements, dont aucun ne se trouve à l’intérieur du bundle.
La configuration du filtre est à l’origine de la plainte la plus fréquente ici. Elle a son propre cycle de vie dans les préférences Network Extension, et Apple documente son retrait comme un appel explicite que fait l’app propriétaire. Supprimer une app ne fait jamais cet appel. Ce qui reste, c’est un filtre activé qui pointe vers un fournisseur qui n’existe plus, et les symptômes sont ceux que les gens rapportent après une suppression à moitié faite : des résolutions DNS qui échouent, un navigateur qui se bloque sur chaque page, des connexions qui expirent alors que l’icône Wi-Fi affiche un signal plein. Le réseau va bien. Le trafic est confié à un filtre qui ne peut pas répondre.
Les tâches launchd sont le second échec. Supprimer un exécutable ne désenregistre pas la tâche qui le lance, cela transforme un service qui fonctionnait en un service qui échoue à chaque lancement, et une tâche configurée pour rester en vie est retentée en boucle, d’où viennent les signalements du genre « mon ventilateur s’emballe depuis que je l’ai désinstallé ». Supprimer la plist pendant que la tâche est chargée est le miroir de ce cas : launchd garde la tâche jusqu’au prochain redémarrage, sans rien sur le disque derrière elle. L’auxiliaire et le profil survivent pour la même raison, et un profil portant une charge logicielle réinstallera ce que vous avez supprimé.
La difficulté est une décision de conception
Un logiciel de sécurité que n’importe quel processus pourrait désinstaller
silencieusement ne vaudrait rien, puisque la première chose que ferait un malware
compétent serait de retirer ce qui le surveille. macOS place donc les deux extrémités du
cycle de vie hors de portée d’un processus en arrière-plan : l’activation exige qu’un
humain clique sur Autoriser dans Réglages (la
page d’alerte d’Apple pointe vers Éléments de
connexion et extensions sur macOS 15 et plus récent, Confidentialité et sécurité avant
cela), et la désactivation est une requête émise par l’app propriétaire de l’extension.
Cette friction, c’est cette conception qui fonctionne, et il n’existe aucune séquence de
commandes rm qui serait la vraie désinstallation qu’on vous cache.
La règle : lancez d’abord le désinstalleur de l’éditeur
Toujours, et avant de toucher à quoi que ce soit d’autre. Seule l’app qui la contient peut soumettre une requête de désactivation pour sa propre extension. Seule l’app qui a enregistré la configuration du filtre peut la retirer des préférences Network Extension. Seul l’outil de l’éditeur sait lequel de ses composants réinstallera les autres si l’ordre d’arrêt n’est pas respecté. Aucun désinstalleur tiers ne peut obtenir ces accès, donc un scanner de résidus, Mole compris, sert pour ce qui reste après le passage de l’outil de l’éditeur, jamais comme substitut.
Si vous avez déjà glissé l’app vers la Corbeille, remettez-la à sa place avec Fichier > Remettre en place, lancez-la, et utilisez son propre désinstalleur. Les sections ci-dessous indiquent où chaque éditeur le range.
Où chaque éditeur range son désinstalleur
Chaque lien ci-dessous pointe vers le site de support propre à l’éditeur, où vivent les étapes à jour. Les pages de support bougent, donc en cas de désaccord, suivez la page plutôt que ce résumé.
McAfee
Le désinstalleur est déjà sur le Mac, dans Applications, nommé d’après le produit que vous avez acheté, donc une installation Total Protection et une installation LiveSafe n’utilisent pas le même. L’article de McAfee vous fait vous connecter en administrateur, quitter chaque app McAfee, puis ouvrir Aller > Applications et double-cliquer sur ce désinstalleur. Deux de ses étapes justifient de le lire plutôt que d’improviser : il vous dit de cliquer sur Autoriser quand macOS demande à propos d’une extension système, et il se termine par un redémarrage donné comme une étape numérotée plutôt qu’une suggestion. Une icône morte dans le Dock peut survivre au retrait et doit être retirée à la main.
Norton
Là aussi, une app de désinstallation distincte déjà présente dans Applications. La page de désinstallation de Norton guide via Aller > Applications, puis double-cliquer sur Norton Uninstaller, puis « saisir le mot de passe de votre compte administrateur, puis cliquer sur Install Helper », puis le mot de passe à nouveau, puis Terminer. L’étape de l’auxiliaire est ce qui donne au désinstalleur les privilèges nécessaires pour défaire ses propres composants au niveau système.
Avast
Un désinstalleur intégré à l’app, sur une page qui commence par écarter l’alternative évidente : « Déplacer Avast Security vers la Corbeille ou utiliser Clean My Mac ne désinstalle pas complètement l’application. » Le chemin documenté est Avast Security > Uninstall Avast Security dans la barre de menus, Continue, puis le mot de passe de démarrage de votre Mac et Install Helper. Le même désinstalleur se trouve aussi dans Applications sous le nom Avast Security Uninstaller, pour le cas où l’app ne s’ouvrirait pas.
Bitdefender
Un binaire de désinstallation dédié plutôt qu’un glisser-déposer. La page de désinstallation vous fait ouvrir le dossier Bitdefender, double-cliquer sur Bitdefender Uninstaller, cocher le produit, cliquer sur Uninstall, et saisir un nom et un mot de passe d’administrateur. Le même passage propose de retirer Bitdefender VPN, à accepter si vous ne le gardez pas, puisque ce composant enregistre sa propre extension réseau.
Malwarebytes
Un élément de menu intégré à l’app. L’article de désinstallation
vous fait passer par Help > Uninstall Malwarebytes dans la barre de menus, une
invite de confirmation, et votre mot de passe Mac. Fait inhabituel pour cette catégorie,
la même page accepte aussi le retrait via le Finder, ce qui constitue une déclaration de
l’éditeur sur sa propre empreinte. Les anciens articles de désinstallation sur
support.malwarebytes.com redirigent désormais ; utilisez la page
help.malwarebytes.com.
Sophos
Deux produits, deux réponses. Sophos Home, le produit grand public, utilise une app
séparée Remove Sophos Home, lancée depuis Spotlight. La
page
est directe sur l’alternative : « NE PAS glisser Sophos Home vers la Corbeille, cela ne
désinstallera pas le programme. » Elle installe un auxiliaire, demande votre mot de
passe, et exige un redémarrage. La même page contient une section optionnelle pour
retirer ensuite les extensions système Sophos, et cette procédure encadre
systemextensionsctl uninstall entre la désactivation et la réactivation de la
protection de l’intégrité du système. C’est la déclaration la plus claire de l’endroit où
se situe la limite : même le désinstalleur d’un éditeur n’emporte pas toujours ses
extensions avec lui. Ces étapes sont optionnelles, exactement comme l’éditeur les
qualifie, et il vaut mieux laisser SIP activé.
Sophos Endpoint, le produit géré, utilise Remove Sophos Endpoint depuis Launchpad, mais la documentation le conditionne : « Si la protection anti-sabotage est activée, vous devez la désactiver avant de pouvoir désinstaller Sophos Endpoint. » Cela exige un administrateur Sophos Central ou le mot de passe par appareil détenu dans cette console, donc sur un Mac professionnel, ce n’est pas une opération que l’utilisateur peut faire seul.
Kaspersky
Intégré à l’app, via le panneau de support. La
page de désinstallation
guide via Help > Support, Uninstall, Uninstall à nouveau, puis les
identifiants administrateur, et avertit que les extensions Chrome et Firefox survivent à
l’app. Kaspersky publie aussi un outil de retrait
séparé, kavremover-mac, pour le cas où le chemin intégré échoue. Les deux pages portent
des dates de 2024, donc vérifiez par rapport à votre version.
Si le Mac est géré, la réponse est votre équipe informatique
Avant d’y passer une soirée, vérifiez si la décision vous appartient du tout :
profiles status -type enrollment
profiles list
La première affiche l’état d’inscription DEP et MDM sans droits d’administrateur, la seconde liste les profils de configuration installés pour votre utilisateur, et la même information apparaît sous Réglages Système > Général > Gestion des appareils. Le guide de gestion des appareils d’Apple est clair sur la suite : « Certains profils ne peuvent être retirés que par un administrateur système de votre Mac. Si vous ne pouvez pas retirer un profil, votre Mac est peut-être une machine gérée. »
Sur un Mac géré, le logiciel de sécurité est une charge de cette gestion. Retirez-le localement et le profil le réinstalle. Essayez de désactiver la protection anti-sabotage localement et vous ne pouvez pas, parce que le mot de passe vit dans une console que vous n’avez pas. Demandez au service informatique de le désassigner.
Vérifier le retrait
C’est là qu’une suppression à moitié faite se fait attraper pendant que c’est encore peu coûteux. Faites-le après que le désinstalleur de l’éditeur a terminé et que le Mac a redémarré, parce que plusieurs de ces vérifications ne disent la vérité qu’après un démarrage.
1. Extensions système.
systemextensionsctl list
Sur un Mac où rien n’est installé, la sortie est une seule ligne indiquant
0 extension(s). Sinon, chaque ligne nomme l’identifiant d’équipe, l’identifiant de
bundle de l’extension, sa version, et un état entre crochets. Tout ce qui porte encore
l’identifiant de l’éditeur retiré signifie que la désactivation ne s’est pas terminée.
L’outil propose bien systemextensionsctl uninstall <teamID> <bundleID>, et certains
éditeurs le documentent précisément pour ce cas, mais n’y recourez que lorsque la page de
l’éditeur vous le dit.
2. Enregistrements launchd. Cherchez les étiquettes de l’éditeur dans les trois emplacements, puis demandez à launchd ce qui est réellement chargé :
ls -la /Library/LaunchDaemons /Library/LaunchAgents ~/Library/LaunchAgents
launchctl list | grep -i vendorname
sudo launchctl list | grep -i vendorname
Les deux appels launchctl list répondent à des questions différentes : le premier
couvre votre session de connexion, le second le domaine système où vivent les démons
root. Une plist résiduelle sans tâche chargée correspondante est un résidu inerte, une
tâche chargée sans plist est un Mac qui a besoin d’un redémarrage, et une tâche présente
dans les deux est un logiciel encore en cours d’exécution. Mole montre ces trois
emplacements comme une seule liste, ce qui fait l’objet de la section suivante.
3. Filtres réseau. Un filtre de contenu enregistré apparaît dans Réglages Système > Réseau comme une entrée Filtres, donc l’absence d’entrée signifie que rien n’est inscrit. Une entrée toujours listée après le départ de l’app est ce qui casse votre connexion.
4. Éléments de connexion et extensions. Ouvrez Réglages Système > Général > Éléments de connexion et extensions et lisez à la fois la liste de connexion et les éléments en arrière-plan en dessous. Les composants d’éditeurs survivent fréquemment à l’app à cet endroit.
5. Processus en cours. Dans le Moniteur d’activité, recherchez le nom de l’éditeur et basculez sur Tous les processus depuis le menu Présentation, pour inclure les démons possédés par root. Un résultat vide après un redémarrage est la confirmation que vous cherchez.
6. Reçus. pkgutil --pkgs | grep -i vendorname nomme ce que l’installateur a écrit,
ce qui vous donne les chemins qui valent la peine d’être examinés sous
~/Library/Application Support une fois les composants actifs disparus.
Si les trois premières vérifications sont propres, le produit n’est plus sur la machine, et tout ce qui reste relève de l’espace disque plutôt que du comportement.
Ce que fait Mole ici, et ce qu’il refuse de faire
L’onglet Logiciels de Mole réunit l’inventaire des apps et les éléments au démarrage sur un seul écran, si bien que les agents et démons de lancement et les éléments de connexion qu’un produit a enregistrés sont visibles à côté de l’app qui les a enregistrés, chacun avec son chemin réel.
Pour les résidus, Mole se fie à l’identité de bundle plutôt qu’au nom, et les chemins au
niveau système qu’il connaît sont ceux ci-dessus : /Library/LaunchDaemons/<bundle-id>.plist,
/Library/LaunchAgents/<bundle-id>.plist, /Library/PrivilegedHelperTools/<bundle-id>,
et les reçus sous /private/var/db/receipts. Chaque correspondance au niveau système est
en revue seule, ce qui veut dire qu’elle arrive décochée : vous optez pour chaque chemin
après l’avoir lu, plutôt que de devoir désélectionner une liste précochée. Les
suppressions vont à la Corbeille, si bien qu’une erreur se répare en la ressortant, les
éléments ignorés et échoués sont signalés, et tout tourne en local.
Deux refus comptent plus que tout cela. Mole scanne /Library/SystemExtensions à la
recherche d’extensions possédées par l’app en cours de retrait, et quand il en trouve
une, il soulève un avertissement nommant cette extension et précisant qu’elle peut
subsister après le départ de l’app. Il ne tente pas la désactivation, parce qu’il ne le
peut pas : cette requête doit venir de l’app propriétaire. Et pour les éditeurs dont les
produits sont verrouillés, gérés, ou destructeurs à retirer par morceaux, dont ESET,
CrowdStrike, SentinelOne, Jamf, Palo Alto GlobalProtect et Cisco Secure Client, Mole
refuse purement et simplement de les désinstaller et renvoie vers le désinstalleur
officiel de l’éditeur.
Cette limite est ce qui rend le reste de cette page digne de confiance, alors autant le
dire sans détour : Mole n’est pas une réponse aux malwares, ni une sauvegarde, ni un
substitut au désinstalleur d’un éditeur pour un logiciel qui embarque des pilotes, des
composants VPN ou des extensions système. Pour un antivirus, le travail de Mole commence
après que le désinstalleur de l’éditeur a terminé. Dans un terminal, le
Mole CLI, gratuit et open source, couvre la même revue
avec mo uninstall, et chaque commande destructive accepte --dry-run pour que vous
lisiez d’abord la liste des chemins.
FAQ
Mon internet a cessé de fonctionner après avoir supprimé mon antivirus. Que faire ?
Presque certainement une configuration de filtre réseau qui a survécu à l’app. Elle vit
dans les préférences Network Extension, que le framework gère indépendamment du bundle,
donc supprimer l’app laisse un filtre activé pointant vers un fournisseur qui n’est plus
là. Vérifiez Réglages Système > Réseau pour une entrée Filtres et
systemextensionsctl list pour une extension survivante. Le correctif consiste à
réinstaller le produit de l’éditeur et à lancer son propre désinstalleur. Réinstaller un
logiciel qu’on essaie de retirer paraît contre-intuitif, et reste pourtant le chemin le
plus court.
Puis-je simplement supprimer les plists dans /Library/LaunchDaemons ?
Pas en premier réflexe, et rarement en dernier recours. Une plist à cet endroit est un
enregistrement auprès de launchd, donc retirer le fichier pendant que la tâche est
chargée laisse la tâche s’exécuter jusqu’au prochain redémarrage, sans rien sur le disque
pour l’expliquer. Une fois que le désinstalleur de l’éditeur a tourné, que le Mac a
redémarré, et que sudo launchctl list ne montre aucune tâche chargée correspondante,
une plist résiduelle est un résidu inerte. N’en supprimez jamais une appartenant à un
logiciel encore installé.
Le désinstalleur de l’éditeur demande mon mot de passe puis échoue. Que faire ?
Vérifiez trois choses. Le Mac est-il géré, auquel cas la protection anti-sabotage ou un profil bloque le retrait et la réponse est le service informatique. Le produit est-il encore en cours d’exécution, puisque certains désinstalleurs ne peuvent pas se terminer tant que leur propre démon garde des fichiers ouverts, donc redémarrez et réessayez. Et le désinstalleur est-il à jour, puisque certains éditeurs publient un outil de retrait autonome distinct du chemin intégré à l’app. Si les trois points sont propres, le support de l’éditeur est l’étape suivante.
Dois-je redémarrer avant de vérifier que le logiciel a bien disparu ?
Oui. Le démontage d’une extension et le désenregistrement launchd se terminent tous deux au fil d’un démarrage, donc une vérification lancée immédiatement après que le désinstalleur a terminé peut montrer des résidus déjà programmés pour disparaître, et peut tout aussi bien cacher un démon qui reviendra.
Pour aller plus loin
- Comment désinstaller complètement des apps sur Mac pour la séquence générale, les identifiants de bundle et les conteneurs partagés.
- Retirer les fichiers résiduels après désinstallation d’apps Mac pour les résidus une fois les composants actifs confirmés disparus.
- Ce que les nettoyeurs Mac ne devraient jamais supprimer pour l’autre versant du même jugement.