
Scanner de mécanismes de persistance macOS avec vérification de signature de code et suivi chronologique.
Voyez TOUT ce qui s'exécute sur votre Mac. Comprenez POURQUOI ça tourne. Décidez QUOI garder.


MacPersistenceChecker vous montre tout ce qui s'exécute automatiquement sur votre Mac, explique pourquoi c'est important et vous aide à décider ce qu'il faut garder ou supprimer.
→ Trouver des malwares → Détecter la persistance cachée → Comprendre votre système en quelques minutes
Télécharger MacPersistenceChecker v2.0.0 (DMG)
→ Scannez votre Mac en moins de 30 secondes → Pas d'assistant d'installation, ouvrez et lancez → macOS natif, universel (Apple Silicon & Intel), macOS 13+
Si macOS signale que l'app est endommagée :
xattr -cr /Applications/MacPersistenceChecker.app
L'application apprend votre système et classe automatiquement des milliers d'éléments.
Prise en main rapide :
Coût réaliste : <1 $/mois pour une utilisation active, 0 $ en régime stable.
L'application construit un graphe de connaissances de chaque élément de persistance sur votre Mac et utilise Claude (Anthropic) pour raisonner dessus. Classez rapidement des milliers d'éléments, ne remontez que ce qui compte vraiment, et apprenez votre système pour qu'il réponde à la plupart des questions sans autres appels IA.
┌──────────────────────────┐
│ Persistence scan │
│ (e.g. 6800 items) │
└─────────────┬────────────┘
▼
┌────────────────────────────────────────┐
│ Concept Extraction (deterministic) │
│ 6 extractors → vendor / software / │
│ pathCategory / pattern / mechanism / │
│ filename. No AI calls here. │
└─────────────┬──────────────────────────┘
▼
┌────────────────────────────────────────┐
│ Knowledge Graph (SQLite) │
│ • concepts (~280 typically) │
│ • concept_links (subsumes / instance) │
│ • item_concepts (m:n) │
│ • concept_verdicts │
└─────────────┬──────────────────────────┘
▼
┌────────────────────────────────────────┐
│ Concept Resolver │
│ for every item, picks the strongest │
│ verdict via a deterministic ladder: │
│ severity → confidence → specificity │
│ → source → recency. │
└─────────────┬──────────────────────────┘
│
┌───────────┴────────────┐
▼ ▼
┌──────────────────┐ ┌──────────────────────┐ │ Item is already │ │ Item is unresolved │ │ classified. │ │ → goes to a cluster. │ │ Filter hides it │ └──────────┬───────────┘ │ from "Suspicious"│ ▼ └──────────────────┘ ┌──────────────────────┐ │ Cluster Builder │ │ groups items by │ │ identical concept │ │ signature (sorted │ │ ids). 6800 items → │ │ ~280 clusters. │ └──────────┬───────────┘ ▼ ┌──────────────────────────────────────────┐ │ User decides per cluster (one click = │ │ N items decided), OR sends batch to AI: │ │ │ │ • Trust / Watch / Block (manual) │ │ • Send unresolved clusters to AI │ │ → Haiku batch (15 cluster per call) │ │ → AI returns verdicts attached to │ │ concepts (not items) — propagate │ │ to ALL items linked to those │ │ concepts, including future ones. │ └──────────────────────────────────────────┘
### Outils IA
| Outil | Où | Modèle | Coût / appel |
|---|---|---|---|
| Analyser avec IA (élément unique) | Détail de l'élément → Knowledge Graph | Haiku | ~0,003 $ |
| Triage intelligent par lot | Barre d'outils → Triage | Haiku par lot | ~0,005 $ (15 clusters) |
| Rapport système | Barre d'outils → Rapport | Sonnet | ~0,05‑0,10 $ |
| Chasse aux menaces | Barre d'outils → Chasse | Haiku | ~0,003 $ |
| Diff d'instantané | Historique → Comparer → Analyser avec IA | Haiku | ~0,003 $ |
Limite d'appels quotidienne (30 par défaut) configurable dans Paramètres → IA. Plafond strict, l'IA se désactive automatiquement une fois atteint.
### Contrôles de confiance
Les règles définies par l'utilisateur **l'emportent toujours** sur celles extraites par l'IA :
- **Faire confiance à cet élément** — règle singleItem, votre verdict annule la liste de surveillance IA
- **Faire confiance à ce motif** — règle pattern avec ancrage TeamID/signature (binaires signés uniquement)
- **Supprimer la confiance** — supprimer une règle que vous avez ajoutée par erreur
- **Surveiller / Bloquer** — appliquer une décision de liste de surveillance/malveillance à tout un cluster dans Smart Triage
</details>
---
## Analyse de la persistance
### Scanners principaux
- **Daemons de lancement** — Services système (`/Library/LaunchDaemons`, `/System/Library/LaunchDaemons`)
- **Agents de lancement** — Agents au niveau utilisateur (`~/Library/LaunchAgents`, `/Library/LaunchAgents`)
- **Éléments de connexion** — Applications qui démarrent à l'ouverture de session
- **Extensions noyau** — Kexts hérités
- **Extensions système** — Extensions système modernes (DriverKit, NetworkExtension, EndpointSecurity)
- **Outils d'aide privilégiés** — Services XPC avec privilèges élevés
- **Tâches cron** — Tâches planifiées
- **Profils de configuration** — Profils MDM et de configuration
- **Support d'applications** — Applications et assistants d'arrière‑plan
### Scanners étendus (optionnel)
- **Scripts périodiques** — Scripts quotidiens, hebdomadaires, mensuels dans `/etc/periodic/`
- **Fichiers de démarrage du shell** — `.zshrc`, `.bashrc`, `/etc/profile` avec détection de motifs suspects
- **Hooks de connexion/déconnexion** — Hooks de connexion hérités via `com.apple.loginwindow`
- **Plugins d'autorisation** — Plugins de l'agent de sécurité dans `/Library/Security/SecurityAgentPlugins`
- **Importateurs Spotlight** — Importateurs de métadonnées personnalisés
- **Plugins Quick Look** — Générateurs d'aperçu pouvant être abusés
- **Plugins de services d'annuaire** — Plugins d'authentification
- **Extensions de synchronisation Finder** — Extensions Finder via pluginkit
- **Base de données BTM** — Entrées de gestion des tâches d'arrière‑plan (macOS 13+)
- **Détournement de dylib** — Détection de `DYLD_INSERT_LIBRARIES` et d'injection suspecte de dylib
- **TCC/Accessibilité** — Applications avec autorisations d'accessibilité dans la base TCC
---
## Évaluation des risques
Chaque élément de persistance reçoit un **Score de risque (0-100)** basé sur plusieurs facteurs :
- Signatures de code invalides ou manquantes
- Protection hardened runtime manquante
- Binaires signés ad‑hoc
- Emplacements de fichiers suspects
- Configurations de démarrage automatique persistantes (RunAtLoad, KeepAlive)
- Motifs de logiciels malveillants connus
**Niveaux de gravité :** Faible, Moyen, Élevé, Critique – éléments triés par risque pour une identification rapide des menaces.
### Détection d'anomalies de fréquence de lancement
- **Micro‑redémarrage** – StartInterval < 60 secondes (possible abus de watchdog)
- **Chien de garde agressif** – KeepAlive + faible StartInterval combinés
- **Aucune limite de limitation** – KeepAlive sans ThrottleInterval (risque de boucle crash‑redémarrage)
### Détection des éléments signés mais dangereux
- **Droits dangereux** – Détection de droits risqués (`com.apple.security.cs.disable-library-validation`, etc.)
- **Usurpation d'Apple** – Logiciel non‑Apple tentant de se faire passer pour Apple
- **Emplacements cachés** – Applications signées dans des répertoires suspects
- **Lacunes de notarisation** – Applications récentes sans notarisation
- **Analyse du certificat développeur** – Validation du Team ID par rapport aux fournisseurs connus
### Détection LOLBins (Living‑off‑the‑Land Binaries)
Détecte l'utilisation suspecte de binaires macOS légitimes dans des contextes de persistance. **La combinaison est importante :**
- **osascript + persistance** = AppleScript avec démarrage automatique (abus d'automatisation GUI)
- **curl/wget + RunAtLoad** = Motif de téléchargement et d'exécution
- **python + helper privilégié** = Exécution de script élevée
- **security + KeepAlive** = Risque de vol d'identifiants
- **launchctl + démarrage automatique** = Installateur de méta‑persistance
- **netcat + persistance** = Tunnel de commande & contrôle / reverse shell
40+ LOLBins suivis avec des mappages MITRE ATT&CK et une évaluation de gravité contextuelle.
### Réputation du binaire et analyse comportementale
Heuristiques avancées pour détecter des motifs comportementaux suspects :
- **Garde de persistance cachée** – Agent KeepAlive sans fonction de watchdog évidente
- **Persistance agressive** – RunAtLoad + KeepAlive sur des éléments non‑service
- **Démarrage automatique furtif** – Processus d'arrière‑plan d'un fournisseur inconnu
- **Persistance orpheline** – Plist pointant vers un exécutable inexistant
- **Emplacement suspect** – Exécutable dans `/tmp/`, `/Users/Shared/` ou des répertoires cachés
- **Risque d'élévation de privilèges** – Agent utilisateur tentant des opérations privilégiées
- **Persistance activée réseau** – Persistance avec capacités réseau
- **Persistance basée sur les scripts** – Scripts en ligne via des interpréteurs
- **Usurpation de processus système** – Élément non‑Apple utilisant un nom à consonance Apple
- **Motif de redémarrage fréquent** – StartInterval < 60 secondes
### Inadéquation entre l'intention du Plist et du binaire
Détecte lorsque ce que déclare le plist ne correspond pas à ce que fait réellement le binaire – **exactement ce que font les droppers modernes :**
- **Plist innocent, binaire lourd** – Configuration simple mais binaire avec des droits dangereux
- **Helper passif avec réseau** – Assistant d'arrière‑plan avec accès client/serveur réseau
- **Helper passif avec chargement de dylib** – Assistant pouvant charger du code non signé
- **Configuration minimale, capacités maximales** – Plist minimal mais droits étendus
- **Tâche simple avec accès au trousseau** – Tâche d'apparence simple avec accès aux identifiants
### Âge du binaire vs âge de la persistance
Détecte des motifs d'horodatage suspects qui indiquent des mises à jour malveillantes après installation :
- **Ancien Plist, nouveau binaire** – Motif classique de "mise à jour malveillante post‑installation"
- **Remplacement silencieux du binaire** – Binaire modifié sans changement de plist
- **Manipulation d'horodatage** – Date de modification antérieure à la date de création (impossible)
- **Heure de modification suspecte** – Binaire modifié entre 2 et 5 heures du matin
- **Binaire modifié après installation** – Binaire non‑updater changé après l'installation initiale
### Niveaux de confiance
- 🟢 **Apple** – Signé par Apple
- 🔵 **Fournisseur connu** – Logiciel tiers vérifié
- 🟡 **Signé** – Signature valide mais non notarisé
- ⚪ **Inconnu** – Aucun exécutable à vérifier
- 🟠 **Suspect** – Certificat expiré ou chemin suspect
- 🔴 **Non signé** – Aucune signature valide
---
## Chronologie et Forensique
Chronologie forensique complète pour chaque élément de persistance :
**Découverte**
- Première vue – Quand l'élément a été découvert pour la première fois
**Fichier de configuration (Plist)**
- Créé – Horodatage de création du fichier
- Modifié – Dernier horodatage de modification
**Exécutable (Binaire)**
- Créé – Horodatage de création du binaire
- Modifié – Dernier horodatage de modification
- Dernière exécution – Dernier accès/temps d'exécution
### Détection d'anomalies d'horodatage
- **Timestomping** – Date de création après la date de modification (technique anti‑forensique)
- **Remplacement de fichier** – Fichier créé après la découverte initiale
- **Échange de binaire** – Binaire récemment modifié avec un ancien plist (possible cheval de Troie)
- **Exécution récente** – Binaire accédé récemment mais pas chargé actuellement
---
## Intégration MITRE ATT&CK
Chaque mécanisme de persistance est mappé au framework MITRE ATT&CK :
- **Tactiques :** Persistance, Élévation de privilèges, Contournement de défense, Exécution
- **Techniques :** T1543.001, T1543.004, T1547.001, T1547.015, et plus
- Liens directs vers la documentation MITRE ATT&CK
---
## Rapport d'invasivité des applications
Analyse complète des applications installées pour évaluer leur niveau d'« invasivité » :
### Système de double évaluation
**Score de persistance (0-100)** – Évalue les mécanismes de persistance :
- Types de déclencheurs (RunAtLoad, KeepAlive)
- Niveaux de privilèges (LaunchDaemons, Kernel Extensions, Privileged Helpers)
- Résilience (redémarrage automatique, updaters)
- Redondance (plusieurs éléments du même fournisseur)
- Niveau de confiance (pénalités pour non signé/suspect)
**Score d'installation (0-100)** – Évalue l'empreinte « indésirable » :
- Dispersion des fichiers dans les dossiers Library
- Utilisation totale du disque
- Fichiers orphelins (persistance sans application correspondante)
- Gonflement du cache
- Installations à l'échelle du système
### Système de note
Applications notées de **A à F** sur la base du score combiné avec une ventilation détaillée de tous les facteurs de notation.
---
## Visualisation
### Tableau de bord des statistiques
- **Histogramme de distribution des risques** – Éléments par tranches de risque (Faible, Moyen, Élevé, Critique)
- **Diagramme en donut des niveaux de confiance** – Répartition entre les niveaux de confiance
- **Graphique de répartition par catégorie** – Éléments par catégorie de persistance
- **Visualisation chronologique** – Événements du cycle de vie des éléments (Créé, Modifié, Exécuté, Découvert)
### Graphique interactif
- **Graphique complet du système** – Vue d'ensemble de tous les éléments de persistance et relations
- **Graphique ciblé sur un élément** – Graphique radial pour l'analyse d'un élément individuel
- **Modes d'analyse :** Basique (confiance/catégories) ou Complet (inclut dépendances dylib, connexions réseau)
- **Canvas interactif** – Zoomer, déplacer, explorer les relations
- **Couleurs par niveau de confiance** – Évaluation rapide visuelle des menaces
### Radar de profil de sécurité
Graphique radar complet montrant les dimensions Confiance, Signature, Sécurité, Stabilité, Transparence et Âge en un coup d'œil.
---
## Surveillance en temps réel
Surveillance continue des changements de persistance avec deux modes d'analyse.
### Modes de surveillance
**Mode standard**
- Surveillance temps réel du système de fichiers basée sur les FSEvents
- Suppression intelligente du bruit avec débounce configurable
- Score de pertinence pour filtrer les changements insignifiants
- Notifications immédiates pour les changements de haute pertinence
**Mode IA** (nécessite une clé API Claude)
- L'IA Claude analyse chaque changement détecté
- Contexte complet envoyé à l'IA : informations de signature, LOLBins, anomalies comportementales, scores de risque
- L'IA décide si le changement justifie une notification en fonction du niveau de menace réel
- Intervalle de vérification configurable (30 secondes à 1 heure)
- Filtrage par seuil de gravité (Info, Faible, Moyen, Élevé, Critique)
### Intégration dans la barre de menus
- Indicateur d'état de la surveillance en temps réel
- Badge de mode affichant « IA » ou « Std »
- Contrôles rapides (Démarrer/Arrêter la surveillance, déclencher une analyse)
- Accès aux paramètres
- Compteur de badge pour les changements non confirmés
- Aperçu du dernier changement détecté
### Déduplication des notifications
- Un même élément ne déclenchera pas de notifications répétées pendant la période de refroidissement
- Période de refroidissement configurable (1-24 heures, par défaut 2 heures)
- Empêche la fatigue de notification due aux éléments changeant fréquemment
### Notification de démarrage
Lorsque la surveillance démarre, vous recevez une notification confirmant :
- Mode actif (Mode IA ou Mode standard)
- Intervalle de vérification (IA) ou « Temps réel » (Standard)
- Paramètres de seuil de notification
### Détection des changements
- **Ajouté** – Nouveaux éléments de persistance
- **Supprimé** – Éléments supprimés
- **Modifié** – Changements de configuration (activé/désactivé, changements de chemin, etc.)
- **Activé/Désactivé** – Changements d'état
### Détails de l'analyse IA
Lorsque le mode IA est actif, chaque changement envoie les données complètes de l'élément à Claude :
- Informations de base (nom, catégorie, chemins, contenu du plist)
- Détails de signature (signé, Apple, notarisé, ID d'équipe, état du certificat)
- Évaluation des risques (score, analyse détaillée)
- Détections LOLBins avec mappages MITRE
- Anomalies comportementales
- Inadéquations d'intention (plist vs binaire)
- Anomalies d'âge (analyse d'horodatage)
- Indicateurs de signé mais dangereux
Claude répond avec :
- `shouldNotify` – Doit‑on alerter l'utilisateur
- `severity` – Évaluation du niveau de menace
- `title` – Titre de la notification
- `explanation` – Pourquoi c'est ou ce n'est pas suspect
- `recommendation` – Action suggérée
- `mitreTechniques` – Techniques ATT&CK pertinentes
### Personnalisation de l'IA
Contrôlez la façon dont l'IA analyse les changements via **Paramètres → IA** :
**Options structurées**
| Option | Par défaut | Effet |
|--------|------------|-------|
| Ignorer les éléments signés Apple | Activé | Déprioriser les éléments signés par Apple (com.apple.*) |
| Ignorer les chemins système | Activé | Déprioriser les chemins /System et /Library |
| Prioriser les non signés | Activé | Accorder une attention supplémentaire aux exécutables non signés |
| Se concentrer sur les LOLBins | Activé | Prioriser la détection de Living‑off‑the‑Land Binaries |
| Score de risque minimal | 0 | Analyser uniquement les éléments avec risque >= seuil |
| Chemins ignorés | – | Chemins personnalisés à sauter (séparés par des virgules) |
**Seuil de notification**
- `Info` – Tout notifier
- `Faible` – Notifier la gravité faible et au‑dessus
- `Moyen` – Notifier le niveau moyen et au‑dessus (par défaut)
- `Élevé` – Uniquement les niveaux élevé et critique
- `Critique` – Uniquement les menaces critiques
**Invite personnalisée**
Ajoutez vos propres instructions qui sont ajoutées à l'invite IA. Exemples :```
Always notify me if an item uses python or osascript.
Ignore anything from Microsoft.
Be more aggressive with unsigned items from ~/Downloads.
L'IA utilise ces préférences pour prendre des décisions plus intelligentes. Par exemple :
/tmp/ → Notification critiqueosascript avec RunAtLoad → Notification élevéeMacPersistenceChecker inclut un serveur MCP (Model Context Protocol) qui permet à Claude Code, Claude Desktop et d’autres clients compatibles MCP d’interroger les données de persistance.
swift build --target MPCServer
Le binaire est créé dans `.build/debug/mpc-server`.
### Outils MCP disponibles
| Outil | Description |
|------|-------------|
| `get_current_state` | Obtenir tous les éléments de persistance actuels avec filtres optionnels |
| `get_diff` | Obtenir les changements par rapport à la référence ou à un instantané spécifique |
| `get_summary` | Aperçu compact avec comptages et menaces principales |
| `get_item_details` | Détails complets pour un élément spécifique par identifiant |
| `get_risk_analysis` | Analyse de risque agrégée avec recommandations |
| `get_snapshots` | Lister les instantanés disponibles avec métadonnées |
| `compare_snapshots` | Comparer deux instantanés pour détecter les changements |
### Configuration de Claude Code
Ajoutez à vos paramètres MCP de Claude Code (`~/.claude/claude_desktop_config.json` ou similaire) :```json
{
"mcpServers": {
"macpersistence": {
"command": "/path/to/mpc-server",
"args": []
}
}
}
Une fois configuré, vous pouvez demander à Claude Code :
Export lisible par machine pour les pipelines de sécurité :
Bouton activé uniquement après l'achèvement de l'analyse.
Neutralisez en toute sécurité les éléments de persistance suspects sans suppression définitive :








git clone https://github.com/Pinperepette/MacPersistenceChecker.git cd MacPersistenceChecker ./build.sh
Copiez `MacPersistenceChecker.app` dans `/Applications/`.
### Prérequis
- macOS 13.0+
- Xcode 15+ ou Swift 5.9+
### Dépendances
- [GRDB.swift](https://github.com/groue/GRDB.swift) - Base de données SQLite
---
## Autorisations
Nécessite un **accès complet au disque** pour analyser :
- `/Library/LaunchDaemons`
- Fichiers de configuration système
- Base de données TCC
- Fichiers de démarrage du shell
Sans accès complet au disque, certains éléments peuvent ne pas être visibles.
---
## Licence
Licence MIT - Voir [LICENSE](https://github.com/pinperepette/macpersistencechecker/blob/main/LICENSE) pour plus de détails.
## Auteur
**pinperepette** - 2025
## Historique des étoiles
<a href="https://www.star-history.com/?repos=Pinperepette%2FMacPersistenceChecker&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=Pinperepette/MacPersistenceChecker&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=Pinperepette/MacPersistenceChecker&type=date&legend=top-left" />
Graphique de l
</picture>
</a>
---
*Inspiré par [Autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns) pour Windows par Mark Russinovich*