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.
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-...
| Feld | Beispiel | Bedeutung |
|---|---|---|
| flags | 0083 | Hexadezimales Bitfeld, siehe Flag-Tabelle |
| time | 66f7c2a1 | Unix-Sekunden in Hexadezimal, UTC |
| agent | Safari | Name der App, die die Datei geschrieben hat |
| uuid | 6E4C2B1A-... | 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.
| Bit | Name | Quelle | Konfidenz |
|---|---|---|---|
0x0001 | QTN_FLAG_DOWNLOAD | WebKit QuarantineSPI.h (Open Source) | Hoch |
0x0002 | QTN_FLAG_SANDBOX | WebKit QuarantineSPI.h | Hoch |
0x0004 | QTN_FLAG_HARD | WebKit QuarantineSPI.h; policyengine.cpp aus Apple Security behandelt solche Dateien als hart unter Quarantäne gestellt | Hoch |
0x0040 | QTN_FLAG_USER_APPROVED (QTN_FLAG_ASSESSMENT_OK in Apple Security) | WebKit QuarantineSPI.h; policyengine.cpp setzt es, wenn der Benutzer über Gatekeeper übersteuert oder freigibt | Hoch |
0x0080 | QTN_FLAG_TRANSLOCATE | Name in Apples Quellen libsecurity_translocate und copyfile; Wert aus Neudeklarationen Dritter | Mittel |
0x0100 | QTN_FLAG_DO_NOT_TRANSLOCATE | Wie oben | Mittel |
Jedes andere Bit, z. B. 0x0020 | Unbekannt | Keine | Wird 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
| Wert | Bits | Lesart |
|---|---|---|
0081 | 0x0080 + 0x0001 | Download, Translocate-Bit |
0083 | 0x0080 + 0x0002 + 0x0001 | Download, Sandbox, Translocate-Bit |
0082 | 0x0080 + 0x0002 | Datei von einer Sandbox-App geschrieben, kein Download-Bit |
00c3 | 0x0080 + 0x0040 + 0x0002 + 0x0001 | Wie 0083, zusätzlich vom Benutzer freigegeben |
00c1 | 0x0080 + 0x0040 + 0x0001 | Wie 0081, zusätzlich vom Benutzer freigegeben |
0183 | 0x0100 + 0x0080 + 0x0002 + 0x0001 | Wie 0083, zusätzlich das Do-not-translocate-Bit |
0086 | 0x0080 + 0x0004 + 0x0002 | Harte 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/._namemit 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.