Triage des journaux unifiés macOS : requêtes clés
Prédicats log show et filtres pour sudo, SSH, Partage d'écran, TCC, Gatekeeper, XProtect, agents de lancement, montages USB et la commande log.
En bref. Partez des processus et des subsystems, pas du texte exact des messages : sudo, sshd, screensharingd, tccd / com.apple.TCC, syspolicyd, XProtect, launchd et Background Task Management, diskarbitrationd, ainsi que la commande log elle-même. Chaque section ci-dessous fournit un prédicat log show à utiliser sur un Mac et le filtre ou préréglage équivalent dans Unified Log Parser, qui signale automatiquement les mêmes familles dans l'onglet Constats.
Une mise en garde avant les requêtes : Apple traite les messages de journal comme du texte libre. Les formulations changent d'une version à l'autre, et une requête qui ne renvoie rien ne prouve pas l'absence. Lisez les entrées qui entourent chaque résultat (même PID, même minute).
Élévation de privilèges : sudo et su
log show --archive case.logarchive --timezone UTC --predicate 'process == "sudo" AND eventMessage CONTAINS "COMMAND="'
Chaque ligne prend la forme user : TTY=ttys001 ; PWD=/Users/user ; USER=root ; COMMAND=/bin/…. Les tentatives échouées apparaissent sous la forme incorrect password attempt. Dans le parseur, le préréglage Authentification sélectionne sudo, su, opendirectoryd, loginwindow, authd, sshd et SecurityAgent ; l'indicateur Utilisation de sudo ne conserve que les lignes contenant une commande ou un échec, et non les recherches d'annuaire que sudo génère aussi.
authd enregistre les droits d'autorisation, comme system.privilege.admin lorsqu'une application demande un mot de passe administrateur, avec le client à l'origine de la demande. L'indicateur correspondant est Droits d'autorisation.
Accès à distance : SSH et Partage d'écran
log show --archive case.logarchive --timezone UTC --predicate 'process BEGINSWITH "sshd" OR process == "screensharingd"'
La session à distance et le Partage d'écran sont désactivés par défaut : toute activité signifie que quelqu'un les a activés. Les versions récentes d'OpenSSH scindent le serveur en sshd et sshd-session ; ciblez donc les deux. Le préréglage SSH / partage d'écran couvre les deux, ainsi qu'ARDAgent pour Apple Remote Desktop.
Autorisations de confidentialité : TCC
log show --archive case.logarchive --timezone UTC --predicate 'subsystem == "com.apple.TCC"'
C'est très verbeux : chaque requête d'un client est journalisée. Concentrez-vous sur les décisions de tccd lui-même et sur les services à fort impact — kTCCServiceSystemPolicyAllFiles (accès complet au disque), kTCCServiceAccessibility, kTCCServiceScreenCapture, kTCCServiceListenEvent, kTCCServicePostEvent, kTCCServiceAppleEvents. L'indicateur Autorisations de confidentialité sensibles (TCC) du parseur conserve les décisions de tccd pour ces services ; l'indicateur Autorisations de confidentialité (TCC) conserve les autres requêtes et demandes. L'octroi de l'accès complet au disque à Terminal peu avant un accès massif à des fichiers est un scénario qui mérite d'être reconstitué minute par minute. Recoupez avec la base TCC elle-même.
Gatekeeper, quarantaine et XProtect
log show --archive case.logarchive --timezone UTC --predicate 'process == "syspolicyd" OR process BEGINSWITH "XProtect" OR eventMessage CONTAINS[c] "quarantine"'
syspolicyd évalue le code téléchargé ; l'essentiel de sa sortie est routinier. L'indicateur Décisions Gatekeeper se limite aux lignes mentionnant un blocage, un refus, une notarisation absente ou un contournement par l'utilisateur (« Ouvrir quand même », Open Anyway). Les mentions de quarantaine aident à relier un fichier à l'application qui l'a téléchargé. XProtect génère beaucoup d'activité planifiée ; l'indicateur ne retient que les formulations liées à la détection et à la remédiation.
Persistance : agents, démons de lancement et éléments de connexion
log show --archive case.logarchive --timezone UTC --predicate 'eventMessage CONTAINS "/Library/LaunchAgents/" OR eventMessage CONTAINS "/Library/LaunchDaemons/" OR subsystem == "com.apple.backgroundtaskmanagement"'
Background Task Management (macOS 13 et ultérieur) journalise les nouveaux éléments de connexion et éléments de lancement au moment de leur enregistrement. Les chemins sous ~/Library/LaunchAgents et /Library/LaunchDaemons apparaissent aussi à chaque démarrage d'un agent existant : attendez-vous à des résultats routiniers ; cherchez les nouveaux labels et les plists nommés d'après des éditeurs absents de votre parc (le com.example.updater.plist de l'exemple). Le préréglage launchd / éléments de connexion et l'indicateur Agents, démons de lancement et éléments de connexion couvrent ces cas.
Périphériques USB et volumes
log show --archive case.logarchive --timezone UTC --predicate 'process == "diskarbitrationd" OR subsystem BEGINSWITH "com.apple.DiskArbitration"'
Les montages, démontages et éjections nomment le volume (/Volumes/EXFIL dans l'exemple). Mettez-les en regard de l'activité sur les fichiers dans les mêmes minutes pour étayer l'hypothèse d'un transfert de données vers un support amovible. Le préréglage USB et montages et l'indicateur Montages de volumes les sélectionnent.
La commande log elle-même
Sur les versions récentes, l'outil log enregistre ses propres exécutions, avec le processus parent et les arguments, sous le subsystem com.apple.log. Un intrus qui lance log show pour vérifier ce qui a été enregistré, ou sudo log erase, y laisse une trace — jusqu'à ce que l'effacement prenne effet. L'indicateur La commande log les conserve.
Indices shell et scripts
Les journaux unifiés ne sont pas un journal d'exécution de processus, mais des lignes de commande fuient dans les messages : sh -c, osascript -e, curl -o, python -c, base64 -d, chmod +x, xattr -d com.apple.quarantine. L'indicateur Commandes shell et scripts recherche ces motifs partout. Considérez les résultats comme des pistes : les installeurs et les outils de mise à jour en produisent beaucoup.
Tout assembler
Utilisez l'onglet Constats pour une première passe, définissez la plage temporelle autour du premier signal fort (Autour ±1 h depuis n'importe quelle entrée), puis passez à l'onglet Journal et retirez le filtre d'indicateurs pour lire tout ce qu'ont fait les mêmes processus. Le tutoriel dans le navigateur applique exactement cette démarche au cas synthétique FIN-MBP-03, et l'article sur l'export explique comment verser les résultats dans une chronologie.