Flags com.apple.quarantine : lire l’attribut de quarantaine
Décoder une valeur com.apple.quarantine : bits de flags comme 0083 et 00c3, horodatage hexadécimal, agent et UUID, avec source et niveau de confiance par flag.
TL;DR. Une valeur com.apple.quarantine comporte quatre champs, flags;time;agent;uuid, par exemple 0083;66f7c2a1;Safari;6E4C2B1A-.... Les flags forment un champ de bits hexadécimal qu’Apple ne documente pas ; le code open source de WebKit et d’Apple Security nomme les bits importants, et 0x0040 signifie que l’utilisateur a approuvé l’élément via Gatekeeper. Le time est un nombre de secondes Unix en hexadécimal (UTC), l’agent est l’application qui a téléchargé, et l’UUID relie le fichier à sa ligne dans QuarantineEventsV2.
Le format de la valeur
L’attribut de quarantaine est un attribut étendu nommé com.apple.quarantine. Sa valeur est une courte chaîne de texte composée de quatre champs séparés par des points-virgules :
0083;66f7c2a1;Safari;6E4C2B1A-...
| Champ | Exemple | Signification |
|---|---|---|
| flags | 0083 | Champ de bits hexadécimal, voir le tableau des flags |
| time | 66f7c2a1 | Secondes Unix en hexadécimal, UTC |
| agent | Safari | Nom de l’application qui a écrit le fichier |
| uuid | 6E4C2B1A-... | Correspond à LSQuarantineEventIdentifier ; peut être vide |
Les bits de flags, avec sources et niveau de confiance
Apple ne documente pas publiquement ces flags. Le tableau indique d’où viennent chaque nom et chaque valeur, pour que vous puissiez pondérer vos conclusions. Plus de détails dans l’entrée de glossaire flags de quarantaine.
| Bit | Nom | Source | Confiance |
|---|---|---|---|
0x0001 | QTN_FLAG_DOWNLOAD | WebKit QuarantineSPI.h (open source) | Élevée |
0x0002 | QTN_FLAG_SANDBOX | WebKit QuarantineSPI.h | Élevée |
0x0004 | QTN_FLAG_HARD | WebKit QuarantineSPI.h ; policyengine.cpp d’Apple Security traite ces fichiers comme en quarantaine stricte | Élevée |
0x0040 | QTN_FLAG_USER_APPROVED (QTN_FLAG_ASSESSMENT_OK dans Apple Security) | WebKit QuarantineSPI.h ; policyengine.cpp le positionne quand l’utilisateur passe outre ou approuve via Gatekeeper | Élevée |
0x0080 | QTN_FLAG_TRANSLOCATE | Nom présent dans les sources libsecurity_translocate et copyfile d’Apple ; valeur issue de redéclarations tierces | Moyenne |
0x0100 | QTN_FLAG_DO_NOT_TRANSLOCATE | Idem | Moyenne |
Tout autre bit, p. ex. 0x0020 | Inconnu | Aucune | Signalé comme inconnu |
Quelques remarques sur le sens. Le code Security d’Apple considère les fichiers en quarantaine stricte, créés par des sources sandboxées sans privilège de téléchargement, comme refusés à l’exécution. L’App Translocation intervient quand une application en quarantaine est lancée depuis un emplacement inattendu : elle s’exécute depuis un montage aléatoire en lecture seule, avec des chemins sous /private/var/folders/.../AppTranslocation/. Enfin, la valeur 0x0040 pour « assessment OK / approuvé par l’utilisateur » est cohérente d’une source à l’autre, ce qui fait du flag d’approbation utilisateur le bit le plus utile en enquête.
Valeurs courantes et comment les lire
| Valeur | Bits | Lecture |
|---|---|---|
0081 | 0x0080 + 0x0001 | Téléchargement, bit de translocation |
0083 | 0x0080 + 0x0002 + 0x0001 | Téléchargement, sandbox, bit de translocation |
0082 | 0x0080 + 0x0002 | Fichier écrit par une application sandboxée, sans bit de téléchargement |
00c3 | 0x0080 + 0x0040 + 0x0002 + 0x0001 | Comme 0083, plus approuvé par l’utilisateur |
00c1 | 0x0080 + 0x0040 + 0x0001 | Comme 0081, plus approuvé par l’utilisateur |
0183 | 0x0100 + 0x0080 + 0x0002 + 0x0001 | Comme 0083, plus le bit « ne pas transloquer » |
0086 | 0x0080 + 0x0004 + 0x0002 | Quarantaine stricte, sandbox, bit de translocation |
Le motif le plus parlant est un changement sur un même fichier : 0083 qui devient 00c3 signifie que l’utilisateur l’a approuvé via Gatekeeper. Si vous ne disposez que d’un seul instantané, 00c3 ou 00c1 montre quand même qu’une approbation a eu lieu à un moment donné.
Les autres champs : heure, agent, UUID
Heure
Le deuxième champ contient des secondes Unix, en hexadécimal, en UTC. Pour le convertir sur macOS :
date -u -r $((16#66f7c2a1))
ce qui affiche Sat Sep 28 08:47:29 UTC 2024.
L’agent et l’échappement \x20
L’agent est un nom d’application, pas un identifiant de bundle. Les espaces sont échappés en \x20 dans l’attribut : Microsoft Word apparaît donc sous la forme Microsoft\x20Word. Décodez-les avant de regrouper par agent.
Heure nulle, agent vide, UUID vide
Des valeurs comme 0081;00000000;; existent : ni heure, ni agent, ni UUID. Elles ont été observées sur un système macOS 26.6 réel et ne sont pas suspectes en elles-mêmes ; il n’y a simplement rien à rapprocher.
UUID en minuscules
Sur ce même système, quelques UUID étaient en minuscules. Comparez toujours les UUID sans tenir compte de la casse. Un UUID d’attribut sans ligne dans la base est lui aussi fréquent (les téléchargements Safari de ce système n’en avaient aucune ces derniers mois) : traitez-le comme une piste, pas comme une conclusion.
Comment l’attribut se propage
- L’Utilitaire d’archive applique la valeur de quarantaine de l’archive, UUID compris, à chaque fichier qu’il extrait. Une seule ligne de la base peut donc correspondre à de nombreux fichiers. Les décompresseurs tiers peuvent ne pas la propager.
- Images disque : monter une image disque en quarantaine place son contenu en quarantaine.
- Les copies au sein d’APFS ou HFS+ conservent les attributs étendus. Sur les systèmes de fichiers sans xattr (exFAT, FAT, partages SMB), macOS écrit des fichiers AppleDouble
._nomqui les transportent. - Les ZIP créés avec « Compresser » du Finder contiennent des entrées
__MACOSX/._nomavec les attributs.
Comment on le supprime
xattr -d com.apple.quarantine file
xattr -c file
La première commande retire l’attribut de quarantaine, la seconde tous les attributs étendus. Aucune ne touche à la base QuarantineEventsV2. Un xattr -d ciblé laisse les autres attributs en place, dont kMDItemWhereFroms posé par le navigateur : un fichier avec WhereFroms mais sans attribut de quarantaine laisse penser que quelqu’un l’a retiré. Voir kMDItemWhereFroms ou quarantaine.
Lire l’attribut
xattr -p com.apple.quarantine file
xattr -l file
xattr -r -l -x ~/Downloads
xattr -p affiche la valeur d’un attribut, xattr -l liste tous les attributs avec leurs valeurs, et xattr -r -l -x parcourt un dossier et produit des dumps hexadécimaux qui conservent les octets exacts (la forme recommandée pour la preuve). ls -l@ n’affiche que les noms et tailles des attributs, pas leurs valeurs. Pour les URL WhereFroms via Spotlight, utilisez mdls -name kMDItemWhereFroms file.
Quarantine Parser accepte tous ces listings collés dans une zone de texte, y compris la sortie de find … -exec xattr -p …, ainsi que les fichiers AppleDouble, et rapproche chaque valeur de son événement dans la base.
Ce que « approuvé » prouve, et ce qu’il ne prouve pas
Le bit 0x0040 montre que l’élément est passé par une approbation Gatekeeper. Comme l’attribut suit les copies, cette approbation n’a pas forcément eu lieu sur le Mac que vous examinez. Le bit ne dit pas quand elle a eu lieu, qui a cliqué (une session volée donne le même résultat), ni si le programme s’est ensuite exécuté correctement.
L’absence de 0x0040 prouve encore moins. Seuls les exécutables, installeurs et applications passent par l’approbation ; un document peut être ouvert de nombreuses fois sans jamais recevoir ce bit. Pour le versant des refus, voir .LastGKReject comme preuve Gatekeeper, et pour le versant base de données, l’analyse forensique de QuarantineEventsV2. Un aide-mémoire est disponible sur macforensics.app.
Questions fréquentes
Que signifie 0083 dans com.apple.quarantine ?
Lu bit par bit, 0083 vaut 0x0080 + 0x0002 + 0x0001 : le bit de translocation (valeur connue par des redéclarations tierces, confiance moyenne), le bit sandbox et le bit de téléchargement. C’est l’une des valeurs les plus courantes sur les fichiers téléchargés.
Que signifie 00c3 ?
00c3 correspond à 0083 plus 0x0040, le bit d’approbation par l’utilisateur. Un fichier dont la valeur est passée de 0083 à 00c3 a été approuvé par l’utilisateur via Gatekeeper. Apple ne documente pas publiquement les flags ; cette lecture s’appuie sur le code open source de WebKit et d’Apple Security.
Supprimer com.apple.quarantine efface-t-il l’enregistrement du téléchargement ?
Non. xattr -d com.apple.quarantine ou xattr -c ne retire l’attribut que du fichier ; la ligne de QuarantineEventsV2 reste en place. Un fichier qui conserve kMDItemWhereFroms mais n’a plus d’attribut de quarantaine mérite un examen attentif.
Comment convertir l’heure hexadécimale d’une valeur de quarantaine ?
Le deuxième champ contient des secondes Unix en hexadécimal, en UTC. Sur macOS, date -u -r $((16#66f7c2a1)) affiche Sat Sep 28 08:47:29 UTC 2024 pour la valeur 66f7c2a1.