Skip to content

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.

Publié le 7 min de lecture

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-...
ChampExempleSignification
flags0083Champ de bits hexadécimal, voir le tableau des flags
time66f7c2a1Secondes Unix en hexadécimal, UTC
agentSafariNom de l’application qui a écrit le fichier
uuid6E4C2B1A-...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.

BitNomSourceConfiance
0x0001QTN_FLAG_DOWNLOADWebKit QuarantineSPI.h (open source)Élevée
0x0002QTN_FLAG_SANDBOXWebKit QuarantineSPI.hÉlevée
0x0004QTN_FLAG_HARDWebKit QuarantineSPI.h ; policyengine.cpp d’Apple Security traite ces fichiers comme en quarantaine stricteÉlevée
0x0040QTN_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
0x0080QTN_FLAG_TRANSLOCATENom présent dans les sources libsecurity_translocate et copyfile d’Apple ; valeur issue de redéclarations tiercesMoyenne
0x0100QTN_FLAG_DO_NOT_TRANSLOCATEIdemMoyenne
Tout autre bit, p. ex. 0x0020InconnuAucuneSignalé 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

ValeurBitsLecture
00810x0080 + 0x0001Téléchargement, bit de translocation
00830x0080 + 0x0002 + 0x0001Téléchargement, sandbox, bit de translocation
00820x0080 + 0x0002Fichier écrit par une application sandboxée, sans bit de téléchargement
00c30x0080 + 0x0040 + 0x0002 + 0x0001Comme 0083, plus approuvé par l’utilisateur
00c10x0080 + 0x0040 + 0x0001Comme 0081, plus approuvé par l’utilisateur
01830x0100 + 0x0080 + 0x0002 + 0x0001Comme 0083, plus le bit « ne pas transloquer »
00860x0080 + 0x0004 + 0x0002Quarantaine 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 ._nom qui les transportent.
  • Les ZIP créés avec « Compresser » du Finder contiennent des entrées __MACOSX/._nom avec 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.

Articles liés