Skip to content

com.apple.quarantine-Flags: das Quarantäne-xattr lesen

So dekodieren Sie einen com.apple.quarantine-Wert: Flag-Bits wie 0083 und 00c3, Hex-Zeitstempel, Agent und UUID, mit Quelle und Konfidenz je Flag.

Veröffentlicht am 6 Min. Lesezeit

TL;DR. Ein com.apple.quarantine-Wert hat vier Felder, flags;time;agent;uuid, zum Beispiel 0083;66f7c2a1;Safari;6E4C2B1A-.... Die Flags sind ein hexadezimales Bitfeld, das Apple nicht dokumentiert; Open-Source-Code von WebKit und Apple Security benennt die wichtigen Bits, und 0x0040 bedeutet, dass der Benutzer das Objekt über Gatekeeper freigegeben hat. time sind Unix-Sekunden in Hex (UTC), agent ist die herunterladende App, und die UUID verknüpft die Datei mit ihrer Zeile in QuarantineEventsV2.

Das Format des Werts

Das Quarantäne-Attribut ist ein erweitertes Attribut namens com.apple.quarantine. Sein Wert ist eine kurze Zeichenkette mit vier durch Semikolons getrennten Feldern:

0083;66f7c2a1;Safari;6E4C2B1A-...
FeldBeispielBedeutung
flags0083Hexadezimales Bitfeld, siehe Flag-Tabelle
time66f7c2a1Unix-Sekunden in Hexadezimal, UTC
agentSafariName der App, die die Datei geschrieben hat
uuid6E4C2B1A-...Verknüpft mit LSQuarantineEventIdentifier; kann leer sein

Die Flag-Bits mit Quellen und Konfidenz

Apple dokumentiert diese Flags nicht öffentlich. Die Tabelle zeigt, woher jeder Name und jeder Wert stammt, damit Sie Ihre Schlussfolgerungen entsprechend gewichten können. Mehr dazu im Glossareintrag Quarantäne-Flags.

BitNameQuelleKonfidenz
0x0001QTN_FLAG_DOWNLOADWebKit QuarantineSPI.h (Open Source)Hoch
0x0002QTN_FLAG_SANDBOXWebKit QuarantineSPI.hHoch
0x0004QTN_FLAG_HARDWebKit QuarantineSPI.h; policyengine.cpp aus Apple Security behandelt solche Dateien als hart unter Quarantäne gestelltHoch
0x0040QTN_FLAG_USER_APPROVED (QTN_FLAG_ASSESSMENT_OK in Apple Security)WebKit QuarantineSPI.h; policyengine.cpp setzt es, wenn der Benutzer über Gatekeeper übersteuert oder freigibtHoch
0x0080QTN_FLAG_TRANSLOCATEName in Apples Quellen libsecurity_translocate und copyfile; Wert aus Neudeklarationen DritterMittel
0x0100QTN_FLAG_DO_NOT_TRANSLOCATEWie obenMittel
Jedes andere Bit, z. B. 0x0020UnbekanntKeineWird als unbekannt gemeldet

Einige Hinweise zur Bedeutung. Apples Security-Code behandelt hart unter Quarantäne gestellte Dateien, die von Sandbox-Quellen ohne Download-Berechtigung erzeugt wurden, als für die Ausführung abgelehnt. App Translocation greift, wenn eine unter Quarantäne stehende App von einem unerwarteten Ort gestartet wird: Sie läuft dann von einem zufällig benannten, schreibgeschützten Mount mit Pfaden unter /private/var/folders/.../AppTranslocation/. Und der Wert 0x0040 für „assessment OK / vom Benutzer freigegeben“ ist in allen Quellen einheitlich; deshalb ist das User-Approved-Flag das nützlichste Bit in einer Untersuchung.

Häufige Werte und ihre Lesart

WertBitsLesart
00810x0080 + 0x0001Download, Translocate-Bit
00830x0080 + 0x0002 + 0x0001Download, Sandbox, Translocate-Bit
00820x0080 + 0x0002Datei von einer Sandbox-App geschrieben, kein Download-Bit
00c30x0080 + 0x0040 + 0x0002 + 0x0001Wie 0083, zusätzlich vom Benutzer freigegeben
00c10x0080 + 0x0040 + 0x0001Wie 0081, zusätzlich vom Benutzer freigegeben
01830x0100 + 0x0080 + 0x0002 + 0x0001Wie 0083, zusätzlich das Do-not-translocate-Bit
00860x0080 + 0x0004 + 0x0002Harte Quarantäne, Sandbox, Translocate-Bit

Das aufschlussreichste Muster ist eine Änderung an derselben Datei: Aus 0083 wird 00c3 bedeutet, dass der Benutzer sie über Gatekeeper freigegeben hat. Liegt Ihnen nur ein einziger Stand vor, zeigen 00c3 oder 00c1 dennoch, dass irgendwann eine Freigabe stattfand.

Die übrigen Felder: Zeit, Agent, UUID

Zeit

Das zweite Feld enthält Unix-Sekunden, hexadezimal, in UTC. Unter macOS rechnen Sie es so um:

date -u -r $((16#66f7c2a1))

Die Ausgabe lautet Sat Sep 28 08:47:29 UTC 2024.

Der Agent und das Escape \x20

Der Agent ist ein App-Name, kein Bundle-Identifier. Leerzeichen werden im Attribut als \x20 maskiert, Microsoft Word erscheint also als Microsoft\x20Word. Heben Sie die Maskierung auf, bevor Sie nach Agent gruppieren.

Null-Zeit, leerer Agent, leere UUID

Werte wie 0081;00000000;; kommen vor: keine Zeit, kein Agent, keine UUID. Sie wurden auf einem echten System mit macOS 26.6 beobachtet und sind für sich genommen nicht verdächtig; es gibt schlicht nichts zu verknüpfen.

Kleingeschriebene UUIDs

Auf demselben System waren einige UUIDs kleingeschrieben. Vergleichen Sie UUIDs immer ohne Beachtung der Groß- und Kleinschreibung. Eine Attribut-UUID ohne Datenbankzeile ist ebenfalls häufig (Safari-Downloads hatten auf jenem System in den letzten Monaten keine), behandeln Sie sie also als Ansatzpunkt, nicht als Befund.

Wie sich das Attribut verbreitet

  • Das Archivierungsprogramm überträgt den Quarantäne-Wert des Archivs samt UUID auf jede Datei, die es entpackt. Eine einzige Datenbankzeile kann daher zu vielen Dateien passen. Entpacker von Drittanbietern tun das unter Umständen nicht.
  • Disk-Images: Das Mounten eines unter Quarantäne stehenden Disk-Images stellt dessen Inhalt unter Quarantäne.
  • Kopien innerhalb von APFS oder HFS+ behalten erweiterte Attribute. Auf Dateisystemen ohne xattrs (exFAT, FAT, SMB-Freigaben) schreibt macOS AppleDouble-Dateien ._name, die sie mitführen.
  • ZIPs, die mit „Komprimieren“ im Finder erstellt wurden, enthalten Einträge __MACOSX/._name mit den Attributen.

Wie es entfernt wird

xattr -d com.apple.quarantine file
xattr -c file

Der erste Befehl entfernt das Quarantäne-Attribut, der zweite alle erweiterten Attribute. Keiner der beiden berührt die Datenbank QuarantineEventsV2. Ein gezieltes xattr -d lässt andere Attribute stehen, auch das vom Browser gesetzte kMDItemWhereFroms; eine Datei mit WhereFroms, aber ohne Quarantäne-Attribut deutet also darauf hin, dass jemand es entfernt hat. Siehe kMDItemWhereFroms und Quarantäne.

Das Attribut auslesen

xattr -p com.apple.quarantine file
xattr -l file
xattr -r -l -x ~/Downloads

xattr -p gibt den Wert eines Attributs aus, xattr -l listet alle Attribute mit ihren Werten, und xattr -r -l -x durchläuft einen Ordner und erzeugt Hex-Dumps, die die exakten Bytes erhalten (die empfohlene Form für Beweismittel). ls -l@ zeigt nur Namen und Größen der Attribute, nicht ihre Werte. Für die WhereFroms-URLs über Spotlight verwenden Sie mdls -name kMDItemWhereFroms file.

Quarantine Parser akzeptiert all diese Listings, in ein Textfeld eingefügt, einschließlich der Ausgabe von find … -exec xattr -p …, dazu AppleDouble-Dateien, und verknüpft jeden Wert mit seinem Datenbankereignis.

Was „freigegeben“ beweist und was nicht

Das Bit 0x0040 zeigt, dass das Objekt eine Gatekeeper-Freigabe durchlaufen hat. Weil das Attribut mit Kopien mitwandert, muss diese Freigabe nicht auf dem Mac stattgefunden haben, den Sie untersuchen. Das Bit sagt weder, wann sie erfolgte, noch wer geklickt hat (eine gestohlene Sitzung sieht genauso aus), noch ob das Programm danach erfolgreich lief.

Das Fehlen von 0x0040 beweist noch weniger. Nur ausführbare Dateien, Installer und Apps durchlaufen die Freigabe; ein Dokument kann viele Male geöffnet werden, ohne dieses Bit je zu erhalten. Für die Seite der Ablehnungen siehe .LastGKReject als Gatekeeper-Beweismittel, für die Datenbankseite QuarantineEventsV2 forensisch auswerten. Ein Spickzettel findet sich auf macforensics.app.

Häufige Fragen

Was bedeutet 0083 in com.apple.quarantine?

Bitweise gelesen ist 0083 gleich 0x0080 + 0x0002 + 0x0001: das Translocate-Bit (Wert aus Neudeklarationen Dritter, mittlere Konfidenz), das Sandbox-Bit und das Download-Bit. Es ist einer der häufigsten Werte auf heruntergeladenen Dateien.

Was bedeutet 00c3?

00c3 ist 0083 plus 0x0040, das Bit für die Freigabe durch den Benutzer. Eine Datei, deren Wert sich von 0083 zu 00c3 geändert hat, wurde vom Benutzer über Gatekeeper freigegeben. Apple dokumentiert die Flags nicht öffentlich; diese Lesart stammt aus dem Open-Source-Code von WebKit und Apple Security.

Löscht das Entfernen von com.apple.quarantine den Download-Eintrag?

Nein. xattr -d com.apple.quarantine oder xattr -c entfernt nur das Attribut von der Datei; die Zeile in QuarantineEventsV2 bleibt bestehen. Eine Datei, die noch kMDItemWhereFroms trägt, aber kein Quarantäne-Attribut mehr hat, verdient einen genaueren Blick.

Wie wandle ich die Hex-Zeit eines Quarantäne-Werts um?

Das zweite Feld enthält Unix-Sekunden in Hexadezimal, UTC. Unter macOS gibt date -u -r $((16#66f7c2a1)) für den Wert 66f7c2a1 Sat Sep 28 08:47:29 UTC 2024 aus.

Verwandte Artikel