kMDItemWhereFroms frente al atributo de cuarentena
¿De dónde vino este archivo en un Mac? Lea kMDItemWhereFroms, compárelo con los datos de cuarentena e interprete un atributo de cuarentena ausente.
TL;DR. kMDItemWhereFroms es un atributo extendido que contiene una lista de propiedades binaria de cadenas, normalmente la URL de descarga y la página de referencia (en Mail, cadenas de tipo remitente y asunto). Responde a «¿de dónde vino este archivo?», pero, a diferencia del atributo de cuarentena y de la base de datos QuarantineEventsV2, no lleva flags, ni agente, ni UUID. Un archivo que conserva WhereFroms pero ha perdido su atributo de cuarentena es una pista útil, no una prueba de manipulación.
Qué contiene kMDItemWhereFroms
El nombre completo del atributo es com.apple.metadata:kMDItemWhereFroms. Los navegadores y Mail lo escriben al guardar un archivo. Su valor es una lista de propiedades binaria con un array de cadenas:
- en una descarga del navegador, normalmente la URL de descarga seguida del referente o la página desde la que se inició;
- en un adjunto de Mail, cadenas de tipo remitente y asunto.
Está en el propio archivo, junto a com.apple.quarantine. La entrada del glosario kMDItemWhereFroms da la definición breve.
Cómo leerlo
Con mdls
En un sistema en vivo, Spotlight expone el valor directamente:
mdls -name kMDItemWhereFroms ~/Downloads/report.pdf
mdls consulta a Spotlight, así que funciona en el Mac en ejecución para archivos que Spotlight ha indexado. Para evidencias recopiladas, lea el atributo en sí.
Con xattr
xattr -p com.apple.metadata:kMDItemWhereFroms ~/Downloads/report.pdf
xattr -l -x ~/Downloads/report.pdf
El primer comando imprime el valor como texto. Como el valor es una lista de propiedades binaria, la salida parece ilegible: las URL se leen, pero aparecen intercaladas con bytes de longitud y tipo que no se muestran. xattr -l sin -x tiene el mismo problema. El segundo comando imprime cada atributo como volcado hexadecimal, lo que conserva los bytes exactos.
Para un árbol de carpetas, use el listado de la guía de recopilación:
xattr -r -l -x ~/Downloads ~/Desktop ~/Documents ~/Library/LaunchAgents > ~/qcase/xattr_$(id -un).txt 2>/dev/null
Quarantine Parser decodifica WhereFroms con exactitud a partir de listados hexadecimales. A partir de una representación de texto solo puede hacerlo de forma aproximada, porque algunos bytes pueden haberse perdido de camino al terminal. Si puede elegir, recopile con -x.
Tres registros, tres preguntas distintas
WhereFroms, el atributo de cuarentena y la base de datos se solapan, pero cada uno demuestra algo distinto.
| kMDItemWhereFroms | com.apple.quarantine | QuarantineEventsV2 | |
|---|---|---|---|
| Dónde | Atributo extendido del archivo | Atributo extendido del archivo | Base de datos SQLite por usuario |
| Contenido | URL y referente; en Mail, remitente y cadenas de tipo asunto | Flags, hora Unix en hexadecimal, nombre del agente, UUID | Hora, agente, ID de bundle, URL de datos y de origen, remitente, número de tipo |
| Qué indica | Desde qué URL o mensaje se guardó el archivo | Que el archivo se marcó para Gatekeeper, cuándo, con qué app y si se aprobó | Que hubo una descarga en cuarentena; sin ruta ni nombre de archivo local |
| Sobrevive al borrado del archivo | No | No | Las filas suelen persistir |
| Se puede eliminar | Sí, como cualquier atributo extendido | Sí: xattr -d com.apple.quarantine o xattr -c | Filas con sqlite3, o el archivo entero |
El UUID del valor de cuarentena es lo que une el archivo con su fila de la base de datos; consulte la guía de flags. WhereFroms no tiene esa clave, así que cualquier vínculo entre un valor WhereFroms y una fila se basa en que coincidan URL y horas. Recuerde también que muchas filas reales tienen las columnas de URL vacías, y que herramientas como curl, wget, scp, rsync o git no participan en absoluto en la cuarentena.
El patrón «WhereFroms sin cuarentena»
Quarantine Parser genera un hallazgo cuando un archivo tiene WhereFroms pero no atributo de cuarentena, formulado como «posible xattr -d». El razonamiento: un navegador que escribe WhereFroms normalmente deja también un atributo de cuarentena, y xattr -d com.apple.quarantine elimina este último sin tocar el primero ni la base de datos.
Es una explicación plausible, sobre todo en ejecutables, donde quitar la cuarentena evita Gatekeeper. Antes de calificarlo de antiforense, considere alternativas:
- Copias parciales de atributos. Una copia, sincronización o transferencia puede haber conservado algunos atributos extendidos y otros no. El comportamiento depende de la herramienta y de los sistemas de archivos implicados.
- Extracción con otras herramientas. La Utilidad de Archivo propaga el valor de cuarentena del archivo comprimido a los archivos extraídos; los descompresores de terceros pueden no hacerlo. Lo que hagan con otros atributos depende de cada herramienta.
- Borrar todos los atributos es otro caso.
xattr -celimina todos los atributos, WhereFroms incluido, así que no produce este patrón.
Pruebe la herramienta y la versión de macOS concretas cuando pueda, y busque corroboración: una fila cuya URL coincida con el WhereFroms, o una fila recuperada del espacio libre.
AppleDouble: atributos que viajan
Los atributos extendidos pueden sobrevivir al archivo original cuando viajan con una copia.
Archivos ._ en exFAT, FAT y SMB
En sistemas de archivos sin atributos extendidos, macOS escribe un archivo compañero AppleDouble llamado ._<nombre> que guarda los atributos. Cuando un usuario copia un archivo descargado a una memoria USB en exFAT o a un recurso compartido SMB, el archivo ._ puede llevar tanto el valor de cuarentena como el WhereFroms al destino, incluso después de borrar el original del Mac.
__MACOSX en los ZIP del Finder
Los archivos creados con el comando «Comprimir» del Finder incluyen entradas __MACOSX/._<nombre> con los mismos datos. Velociraptor incluye MacOS.Forensics.AppleDoubleZip para leerlas a escala. Quarantine Parser lee directamente los atributos de cuarentena y WhereFroms de los archivos AppleDouble: arrastre el archivo ._ o la carpeta __MACOSX junto con el resto de evidencias.
com.apple.provenance: presente pero opaco
En macOS recientes, muchos archivos llevan también com.apple.provenance, un valor de 11 bytes. Es una clave opaca hacia la tabla provenance_tracking de ExecPolicy, no una URL ni una marca de tiempo. Quarantine Parser no lo decodifica. Anote su presencia, pero no saque conclusiones solo de sus bytes.
Para una referencia condensada de estos artefactos, consulte la ficha de eventos de cuarentena de nuestro sitio hermano, y el caso práctico paso a paso para ver ambos patrones en contexto.
Preguntas frecuentes
¿Por qué xattr -l muestra texto ilegible para kMDItemWhereFroms?
El valor es una lista de propiedades binaria, no texto. xattr -l lo imprime como si fuera texto, así que las URL aparecen mezcladas con bytes no imprimibles. Use xattr -l -x para un volcado hexadecimal exacto, o mdls -name kMDItemWhereFroms en un sistema en vivo.
¿Un archivo con kMDItemWhereFroms pero sin atributo de cuarentena demuestra manipulación?
No. Es compatible con que alguien ejecutara xattr -d com.apple.quarantine, pero una copia o transferencia que conservó algunos atributos extendidos y otros no podría producir el mismo resultado. Trátelo como una pista y pruebe las herramientas y la versión de macOS implicadas.
¿Cuál de los tres registros sobrevive al borrado del archivo?
Normalmente solo la fila de la base de datos QuarantineEventsV2, ya que las filas suelen persistir después de borrar el archivo descargado. kMDItemWhereFroms y com.apple.quarantine son atributos extendidos y desaparecen con el archivo, salvo que exista una copia AppleDouble en otro lugar.