Skip to content

QuarantineEventsV2 · xattr · AppleDouble · .LastGKReject

D’où vient ce fichier ?

Déposez la base QuarantineEventsV2 d’un Mac, des listings xattr, des fichiers AppleDouble ou .LastGKReject. Obtenez une chronologie unique des téléchargements, avec les flags de quarantaine décodés, les lignes récupérées dans l’espace libre et les pistes qui méritent un second regard. Analyse dans votre navigateur en WebAssembly : rien n’est envoyé.

Déposez une collecte Mac, une base QuarantineEventsV2 ou une sortie xattr

QuarantineEventsV2 (+ -wal / -journal), listings xattr -l / -r -l -x, fichiers AppleDouble ._, .LastGKReject, ou tout un dossier, ZIP ou tar.gz UAC. Plusieurs utilisateurs à la fois.

L’exemple est synthétique : un portable fictif du service financier, FIN-MBP-03, le 14 septembre 2026.

Analysé dans votre navigateur — rien n’est envoyé

Récupérer vos données

Guide de collecte complet

La provenance des téléchargements se trouve dans la base QuarantineEventsV2 de chaque utilisateur et dans les attributs étendus des fichiers eux-mêmes. Collectez les deux : la base prouve le téléchargement, les attributs le relient aux fichiers sur le disque.

  1. Copiez avec Terminal, ou collectez avec UAC, Aftermath ou Velociraptor
  2. Déposez ici le dossier, le ZIP ou le tar.gz
  3. Analyse locale — rien ne quitte le navigateur

Sur le Mac, donnez à Terminal l’Accès complet au disque (Réglages Système › Confidentialité et sécurité), puis collez ce bloc. Il copie votre base avec ses fichiers -wal/-journal, liste les attributs de quarantaine et WhereFroms de Downloads, Desktop, Documents et LaunchAgents sous forme de dumps hexadécimaux exacts, et copie .LastGKReject s’il existe.

Terminal · zsh / bash
mkdir -p ~/qcase
cp -p ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2* ~/qcase/
xattr -r -l -x ~/Downloads ~/Desktop ~/Documents ~/Library/LaunchAgents > ~/qcase/xattr_$(id -un).txt 2>/dev/null
for f in /private/var/db/.LastGKReject /private/var/db/SystemPolicyConfiguration/.LastGKReject; do
  [ -f "$f" ] && cp -p "$f" ~/qcase/"$(basename "$(dirname "$f")")_LastGKReject"
done

Tout est placé dans ~/qcase. Déposez ce dossier sur la page.

Tous les comptes du Mac (mot de passe administrateur, Terminal avec Accès complet au disque) : bases sous qcase/Users/<name>, un seul listing pour tous les dossiers de départ ainsi que les LaunchAgents et LaunchDaemons du système.

Terminal · admin
for u in /Users/*; do
  f="$u/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2"
  sudo test -f "$f" || continue
  d=~/qcase/Users/"$(basename "$u")"
  mkdir -p "$d" && sudo sh -c 'cp -p "$1"* "$2/"' _ "$f" "$d"
done
sudo sh -c 'xattr -r -l -x /Users/*/Downloads /Users/*/Desktop /Users/*/Documents /Users/*/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons 2>/dev/null' > ~/qcase/xattr_all_users.txt
sudo chown -R "$(id -un)" ~/qcase

Pièges

  • Sans Accès complet au disque, les copies depuis Terminal peuvent échouer avec « Operation not permitted » (Desktop, Documents, Downloads et une partie de ~/Library sont protégés par TCC).
  • N’ouvrez jamais la base originale avec sqlite3 ou un outil graphique : il peut effectuer un checkpoint du WAL ou réécrire des pages et détruire des enregistrements supprimés. Calculez l’empreinte, copiez, puis analysez la copie.
  • zip et cp vers un support non Mac suppriment les attributs étendus ; conservez le listing xattr ou utilisez ditto si vous avez besoin des attributs eux-mêmes.
  • Les heures sont en UTC : la base utilise l’heure absolue Mac, l’attribut des secondes Unix en hexadécimal ; les deux sont converties pour vous.

Qu’est-ce que QuarantineEventsV2 ?

Quand une application qui participe à la mise en quarantaine des fichiers (Safari, Chrome, Mail, Messages, AirDrop, applications sandboxées) écrit un fichier téléchargé, macOS lui attache l’attribut étendu com.apple.quarantine et Launch Services ajoute une ligne à la base SQLite QuarantineEventsV2 de l’utilisateur : heure, application ayant téléchargé, URL des données, page d’origine, expéditeur pour un e-mail.

L’attribut suit le fichier ; la ligne de la base reste en général après la suppression du fichier. L’UUID en fin d’attribut relie les deux. Ensemble, ils répondent à la première question de nombreuses investigations sur Mac : d’où vient ce fichier, quand est-il arrivé, et a-t-il été ouvert ?

Ce que lit l’outil

  • ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 (table LSQuarantineEvent), avec ses compagnons -wal (frames validées appliquées, sommes de contrôle vérifiées) et -journal ; les copies lsquarantine_<user> d’Aftermath ; plusieurs utilisateurs à la fois.
  • Les valeurs com.apple.quarantine issues de xattr -p, xattr -l, xattr -r -l et xattr -r -l -x, collées ou en fichiers texte ; les valeurs kMDItemWhereFroms présentes dans ces mêmes listings.
  • Les fichiers AppleDouble ._ (volumes exFAT, FAT, SMB et dossiers __MACOSX des ZIP du Finder), qui conservent une copie des attributs.
  • .LastGKReject (dernier refus de Gatekeeper : heure, chemin de la cible d’après son signet, XProtectMalwareType) et les résultats Velociraptor MacOS.System.QuarantineEvents.
  • Dossiers, ZIP et collectes tar.gz comme les archives UAC, la sortie d’Aftermath et les ZIP de collecte Velociraptor.

À quoi il répond

  • Quelles applications ont téléchargé quoi, depuis quelle URL et quelle page, et quand — en une seule chronologie, par agent et par domaine.
  • Quels fichiers sur le disque correspondent à quel téléchargement (jointure par UUID), y compris chaque fichier extrait d’une archive en quarantaine.
  • Quels éléments l’utilisateur a approuvés via Gatekeeper (flag 0x0040), et quel élément Gatekeeper a refusé en dernier.
  • Si des lignes ont été supprimées : les enregistrements encore présents dans l’espace libre, les pages de la freelist, d’anciennes frames WAL ou le journal de rollback sont récupérés et signalés.
  • Les pistes à examiner : archives, images disque, installeurs et scripts provenant de domaines rarement vus, hébergeurs de partage de fichiers et de paste, fichiers téléchargés dans des dossiers LaunchAgents, WhereFroms sans quarantaine.

Limites

  • La base ne stocke pas le nom local du fichier ; seul l’UUID du xattr relie un fichier à sa ligne. Les téléchargements faits avec curl, wget, scp ou git ne laissent aucune trace de quarantaine.
  • Apple ne documente pas les bits de flag. Les noms viennent de déclarations open source (WebKit, code Security et copyfile d’Apple) ; les bits inconnus sont affichés comme inconnus.
  • Les lignes sans URL et les UUID d’attribut sans ligne sont courants sur les versions récentes de macOS et ne sont pas suspects en eux-mêmes.
  • La récupération des lignes supprimées dépend des réglages SQLite et des écritures ultérieures : n’en trouver aucune ne prouve rien. Les lignes récupérées peuvent être partielles.
  • Les constats sont des pistes pour l’analyste, pas des verdicts. Les horodatages sont affichés en UTC ou dans le fuseau horaire de votre navigateur.

Comment collecter

  • Le plus rapide : le bloc Terminal ci-dessus (Accès complet au disque) copie la base avec ses fichiers -wal/-journal, liste les attributs de quarantaine avec xattr -r -l -x et copie .LastGKReject.
  • UAC : artefact files/system/quarantine_events.yaml, inclus dans les profils ir_triage et full. Aftermath : copies brutes dans Artifacts/raw/lsquarantine_<user>. Velociraptor : MacOS.System.QuarantineEvents, ou Generic.Collectors.File pour les fichiers bruts.
  • Calculez d’abord l’empreinte des fichiers et travaillez sur des copies ; n’ouvrez jamais la base originale avec sqlite3, qui peut la modifier.

FAQ

Mes fichiers sont-ils envoyés ?

Non. Le parser est écrit en Rust compilé en WebAssembly et s’exécute dans un Web Worker de votre navigateur. Bases, listings et archives ne quittent jamais votre machine ; fermer l’onglet les oublie.

Où se trouve la base QuarantineEventsV2 ?

Dans ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 de chaque utilisateur. Copiez-la avec les éventuels fichiers -wal et -journal situés à côté, depuis un Terminal disposant de l’Accès complet au disque, ou collectez-la avec UAC, Aftermath ou Velociraptor.

Comment relier un fichier à son enregistrement de téléchargement ?

Lisez son attribut com.apple.quarantine (xattr -p com.apple.quarantine fichier). Le dernier champ est un UUID ; la ligne LSQuarantineEventIdentifier correspondante contient l’URL, la page d’origine et l’agent. Déposez ici la base et un listing xattr, la jointure est faite pour vous.

Que signifie le flag de quarantaine 0083 ou 00c3 ?

Le premier champ est un champ de bits hexadécimal qu’Apple ne documente pas. 0x0001 est généralement lu comme un téléchargement, 0x0002 comme une écriture par une application sandboxée, 0x0080 comme la translocation et 0x0040 comme une approbation par l’utilisateur via Gatekeeper : 00c3 correspond donc à 0083 plus l’approbation. Vérifiez sur un système de même version de macOS avant de vous y fier.

Peut-on récupérer des événements de quarantaine supprimés ?

Parfois. Quand une ligne est supprimée, SQLite laisse en général ses octets dans l’espace libre jusqu’à leur réutilisation. L’outil extrait ces enregistrements par carving, ainsi que les copies plus anciennes présentes dans le WAL ou le journal de rollback, et les signale comme récupérés. N’en trouver aucun ne prouve rien.