← Volver al blog

Antiforense NTFS: lo que hacen realmente los atacantes y lo que los delata

· 8 min de lectura

Cada técnica antiforense en NTFS deja algo atrás. La razón es estructural. La MFT, el diario USN, $LogFile y las Volume Shadow Copies registran cada uno una vista diferente de los mismos eventos, y modificar uno de ellos es en sí mismo un evento que los demás registran. Un atacante que se esconde de un artefacto casi siempre se enciende en otro. Un defensor que recorre los cuatro juntos es difícil de batir.

Este es el catálogo. Para cada técnica: qué hacen los atacantes, qué residuo deja y qué artefacto los delata.

Timestomping

El clásico. Herramientas como SetMACE, timestomp, los conocidos scripts PowerShell Invoke-TimeStomp y cualquier número de ayudantes red team llaman a SetFileTime o escriben $STANDARD_INFORMATION directamente para hacer que un archivo parezca más viejo o más nuevo de lo que es. Variantes recientes también tocan $FILE_NAME renombrando el archivo (lo que fuerza a NTFS a actualizar FN) y luego renombrándolo de vuelta. El truco del "doble renombrado" es lo que separa a un operador competente de un script kiddie.

Qué lo delata:

  • Divergencia SI/FN. Un SetFileTime plano solo toca SI. Las marcas FN correspondientes siguen siendo las verdaderas horas de creación/renombrado. Mira las cuatro marcas de tiempo de la MFT. Cualquier registro donde SI created esté a más de unos segundos de FN created es sospechoso. Donde SI created precede a FN created, es imposible naturalmente: los archivos no pueden existir antes de ser nombrados.
  • Granularidad sub-segundo. NTFS guarda las marcas en ticks de 100 nanosegundos. Las operaciones nativas dejan ruido en los dígitos inferiores. La mayoría de las herramientas de timestomping redondean al segundo. Una columna de sufijos .0000000 alineados a través de varios archivos es una huella digital.
  • Verdad de $UsnJrnl. El diario USN registra la hora real de modificación cuando se escriben las entradas. Un DATA_OVERWRITE USN para el atributo $DATA de un registro con una marca de tiempo que no coincide con la hora SI modified de la MFT es timestomping pillado in fraganti.
  • Instantáneas VSS. Las Volume Shadow Copies más antiguas conservan los valores previos al stomp. Cruza la $MFT actual contra la $MFT de la instantánea para el mismo registro y el cambio será visible.

El truco del doble renombrado vence la divergencia SI/FN. No vence las entradas del diario USN ni los diffs VSS.

Alternate Data Streams como escondite de payloads

Un atributo $DATA con nombre (legit.docx:payload.exe) es invisible para Explorer, invisible para dir y se usa rutinariamente para esconder ejecutables, scripts o configuración codificada que el archivo visible no traiciona. Lanzado vía wmic process call create, rundll32 o Get-Content -Stream más Invoke-Expression.

Qué lo delata:

  • Los recorridos de MFT exponen todos los atributos $DATA. La enumeración por archivo pierde flujos en archivos que no pensaste comprobar. La MFT no. Mira alternate data streams.
  • Sysmon Event ID 15 (FileCreateStreamHash) es el único evento Sysmon que hashea la creación de ADS. Si Sysmon está desplegado y configurado, esto captura los drops de stream directamente.
  • Zone.Identifier. Las descargas desde un navegador llevan este ADS. Un binario en \Downloads\ sin él, o nunca vino de un navegador o se le quitó deliberadamente (Unblock-File).

Limpiar un único archivo

Los wipers sofisticados sobrescriben los clusters del archivo y luego eliminan el registro MFT. Los menos sofisticados (SDelete por defecto, cipher /w, del /f) sobrescriben los datos pero dejan el registro MFT en su sitio.

Qué lo delata:

  • El propio registro MFT. Un registro eliminado con $FILE_NAME y $STANDARD_INFORMATION intactos sigue nombrando el archivo, dando su directorio padre y mostrando las marcas de tiempo en el momento de la eliminación. Mira qué sobrevive a una eliminación.
  • Entradas de creación y eliminación en $UsnJrnl. Ambos eventos se registran independientemente de si los datos fueron limpiados.
  • $LogFile. Los registros de transacción de las operaciones de metadatos quedan ahí hasta rotar.
  • Instantáneas VSS. Si había una instantánea antes del wipe, el archivo está intacto en ella.

Limpiar el propio registro MFT

Un atacante más agresivo escribe nuevos archivos específicamente para forzar a NTFS a reutilizar el slot, sobrescribiendo el registro eliminado. Esto tiene éxito: el slot se va. La eliminación sigue siendo un evento.

Qué lo delata:

  • Incremento del número de secuencia. Una referencia desde $UsnJrnl o $LogFile al registro R secuencia S está ahora obsoleta; el registro actual es secuencia S+1. Un cotejo cruzado expone la reutilización.
  • Historial de $UsnJrnl. La creación, modificación y eliminación originales siguen registradas. También lo está la creación del nuevo archivo. La reutilización deja un rastro USN.
  • Instantáneas VSS. Las copias en instantánea de $MFT previas a la reutilización siguen conteniendo el registro original en la secuencia S.

Truncado de $UsnJrnl

El diario de cambios es finito. Un atacante ejecutando operaciones ruidosas (muchas escrituras de archivo) puede forzar a $UsnJrnl a envolverse, expulsando entradas antiguas. El tamaño por defecto es 32 MB en la mayoría de las instalaciones; mayor en Server.

Qué lo delata:

  • Un $UsnJrnl corto con un USN inicial alto. Si el primer registro del diario es de horas o minutos antes del incidente en un host que ha estado online semanas, se ha rotado de forma anormalmente rápida. Calcula la tasa esperada.
  • $LogFile no rota de la misma forma. Está dimensionado al volumen y sobrescribe con una política diferente. Operaciones que empujaron fuera al diario USN están a veces aún en $LogFile.
  • Las operaciones ruidosas mismas dejan miles de registros MFT. Los miles de archivos batidos necesarios para envolver el diario son visibles en $MFT. La técnica es ruidosa.

Eliminación de $UsnJrnl

fsutil usn deletejournal /D C: elimina el diario por completo. El diario recreado empieza con un contador USN fresco. El número de secuencia del registro MFT $Extend\$UsnJrnl se incrementa para reflejar la eliminación y recreación.

Qué lo delata:

  • Primer USN sospechosamente alto o primer registro sospechosamente reciente. Un $UsnJrnl recién creado cuyo primer registro es posterior al incidente es un indicio.
  • Número de secuencia de la entrada de directorio $Extend incrementado. El registro MFT de $UsnJrnl mismo tiene una secuencia más alta que la línea base.
  • Instantáneas VSS. Las instantáneas previas a la eliminación contienen el diario original completo. Móntalas con vshadowmount y extrae.

Renombrar malware con el nombre de un archivo de sistema

Esconder una herramienta como svchost.exe, lsass.exe, cmd.exe u otro binario familiar de Windows. No es estrictamente antiforense de MFT, pero es el truco más común que confunde a analistas en libertad.

Qué lo delata:

  • Referencia al directorio padre en $FILE_NAME. El svchost.exe legítimo vive en C:\Windows\System32. Un archivo con ese nombre en \Users\bob\AppData\Local\Temp\ no lo es. Comprueba la referencia padre, no solo el nombre.
  • Tamaño y hash de $DATA. El binario legítimo es bien conocido. Haz SHA-256 al impostor y compara. Las discrepancias son inmediatas.
  • ADS Zone.Identifier si fue descargado.
  • Firma de código. Los binarios de Microsoft están firmados. Comprueba la firma Authenticode en el archivo en disco; el impostor no tendrá ninguna o tendrá una no-Microsoft.

Menos común pero vale la pena conocer. Múltiples atributos $FILE_NAME en el mismo registro MFT permiten a un atacante hacer que el mismo payload aparezca en dos directorios a la vez. Eliminarlo de uno solo elimina un $FILE_NAME; el archivo vive hasta que el último link se quita.

Qué lo delata:

  • Campo hardlink_count en la cabecera del registro. Si un registro tiene contador > 1, cada $FILE_NAME es uno de los links. La MFT los muestra todos.
  • Motivo HARD_LINK_CHANGE en $UsnJrnl al crear y quitar hard links.

Manipulación de $LogFile

fsutil no ofrece una opción "borrar el archivo de log", pero el log rota por su cuenta y las operaciones que llenan el volumen pueden empujar fuera entradas. Operadores sofisticados intentan ocasionalmente fregar $LogFile para quitar registros de transacción alrededor de un incidente.

Qué lo delata:

  • $LogFile está bloqueado mientras Windows está en funcionamiento. Manipularlo requiere desmontar el volumen, lo cual es en sí un evento.
  • Instantáneas VSS anteriores a la manipulación conservan el log completo.

Garabateos del ransomware en la MFT

Algunas familias de ransomware (Petya, NotPetya, un puñado desde entonces) corrompen $MFT deliberadamente para hacer el volumen no montable. Es destructivo más que evasivo; el objetivo es denegación de servicio, no sigilo.

Qué lo delata:

  • Registros BAAD donde debería estar FILE. La lápida de chkdsk para registros irreparables es lo que NTFS deja tras el wipe. A veces el garabateador no escribe BAAD, en cuyo caso los registros son no parseables pero escaneables por firma.
  • Un sistema no arrancable, pero una imagen forenseamente valiosa. Los clusters de datos suelen estar intactos. Escanea por firma el volumen en busca de registros FILE y la mayor parte de la tabla es legible. Mira patrones de ransomware en MFT para los detalles.

El principio general

Cada técnica antiforense en NTFS deja un artefacto en alguna parte. La razón es estructural: $MFT, $UsnJrnl, $LogFile y VSS registran cada uno una vista diferente de los mismos eventos. El atacante que friega la MFT deja entradas USN. El atacante que borra el diario USN deja un bump fresco del número de secuencia de $Extend\$UsnJrnl y las instantáneas VSS intactas. El atacante que ejecuta vssadmin delete shadows deja entradas en el registro de eventos de Windows (System 8224, Application VSS 8194) y posiblemente Sysmon Event ID 1 para la invocación de vssadmin.exe.

Un triage que recorre los cuatro artefactos NTFS más los logs de eventos y VSS es lo que pilla a los operadores sofisticados. El triage de un solo artefacto los pierde.

Lecturas adicionales

Recursos externos