29 mayo, 2025

Auditando Archivos en Windows: Eliminación y Atributos de archivos

Este dolor de cabeza se repite cada tanto en mi vida, por suerte con el tiempo la cosa va mejorando en Windows pero siempre nos falta 10 para el peso 😑.

Supuestos para que funcione

  • Auditoria activa sobre la carpeta (everyone) [SACL (System Access Control List)]

    • Navega a las carpetas compartidas donde los archivos se están ocultando.
    • Haz clic derecho -> Propiedades -> Pestaña Seguridad -> Opciones avanzadas -> Pestaña Auditoría.
    • Haz clic en "Agregar".
    • Selecciona la entidad de seguridad "Everyone" o un grupo de usuarios/cuentas de servicio relevantes.
    • Asegúrate de que "Tipo" sea "Todos" (All).
    • En "Permisos básicos", marca la casilla "Escribir atributos" (Write attributes) y "Escribir atributos extendidos" (Write extended attributes). Esto generará un Event ID 4663 cuando se modifique un atributo del archivo.
    • Asegúrate de que la auditoría se aplique a "Esta carpeta, subcarpetas y archivos".

  • Auditoria activa de objetos en la política de seguridad (Fail and Success)

    • Por si no te acordas 😏, abrir la Directiva de Seguridad Local (secpol.msc) o la GPO aplicada
    • Ir a Configuración de seguridad -> Directivas locales -> Directiva de auditoría.
    • Habilitar "Auditar acceso a objetos" (Audit object access) para "Correcto" (Success) y "Erróneo" (Fail).
    • Ir a Configuración avanzada de directivas de auditoria -> Directivas de auditoría -> Acceso a objetos:
      • Habilitar "Auditar sistema de archivos" (Audit File System) para "Correcto" y "Erróneo".
      • Habilitar "Auditar manipulación del identificador" (Audit Handle Manipulation) para "Correcto" y "Erróneo".


Primera pregunta: Como determino por auditoria si un file se elimino de una carpeta?

Rapidamente, con el Event ID 4663 dentro del campo Access que contenga DELETED (ó %%1537)

Ejemplo:

Esto es mejor que utilizar los Event ID "4656 (open) + 4660 (delete)" ya que el 4663 no requiere correlación para obtener el nombre del archivo.


Secuencia completa de Acceso a un Objeto

A grandes rasgos tenemos




Entre los Event ID 4656 y 4658, pueden existir otros eventos más pero por lo general vamos a tener un 4663 de Access. En caso que el archivo no pueda ser abierto/accedido, el evento 4656 da Fail y se termina el proceso.


Entendiendo los campos

  • Handle ID : es un numero semi-unico (unico entre reboots del sistema) que permite correlacionar al objeto desde que se abre (open) hasta que se cierra (close)
  • Process ID : es el proceso que realizo la acción, para mas detalle hay que buscar el Event ID 4688 (correlacionado por el Process ID)
  • Resource Attributes: se incorporo a partir de Windows Server 2012/ Windows 8, proporciona información adicional sobre las propiedades de recursos del objeto al que se está accediendo, son metadatos que se pueden asignar a archivos y carpetas en Windows para propósitos de clasificación y control de acceso dinámico (DAC).  DAC permite a las organizaciones aplicar permisos basados en atributos de usuario y atributos de recursos, lo que proporciona una forma más flexible y granular de controlar el acceso a los datos.
  • Access: son los permisos que fueron ejercidos, los mas comunes son

    • DELETE: eliminación
    • WriteData: modificación de datos
    • WriteDAC: modificación de permisos

  • Access Mask: es el equivalente en bits del campo Access (ver tabla mas abajo)


Tabla de Access 

Código

Nombre

Descripción

0x1

ReadData / ListDirectory

ReadData: Para un objeto de archivo, el derecho a leer los datos de archivo correspondientes. Para un objeto de directorio, el permiso a leer los datos de directorio correspondientes.
ListDirectory: Para un directorio, el permiso a enumerar el contenido del directorio.

0x2

WriteData / AddFile

WriteData: para un objeto de archivo, el permiso a escribir datos en el archivo. Para un objeto de directorio, el permiso a crear un archivo en el directorio (FILE_ADD_FILE).
AddFile: Para un directorio, el permiso a crear un archivo en el directorio.

0x4

AppendData / AddSubdirectory / CreatePipeInstance

AppendData: para un objeto de archivo, el derecho a anexar datos al archivo. (En el caso de los archivos locales, las operaciones de escritura no sobrescribirán los datos existentes si el flag es especificado sin FILE_WRITE_DATA). Para un objeto de directorio, el permiso a crear un subdirectorio (FILE_ADD_SUBDIRECTORY).
AddSubdirectory: Para un directorio, el permiso a crear un subdirectorio.

CreatePipeInstance: para un named pipe, el permiso a crear un pipe.

0x8

ReadEA

El permiso a leer atributos extendidos de archivo.

0x20

Execute / Traverse

Ejecutar: para un archivo de código nativo, el permiso a ejecutar el archivo. Este derecho de acceso otorgado a los scripts puede hacer que el script sea ejecutable, dependiendo del intérprete de scripts.
Traverse: Para un directorio, el derecho a recorrer el directorio. De forma predeterminada, a los usuarios se les asigna el privilegio
BYPASS_TRAVERSE_CHECKING, que ignora el derecho de acceso FILE_TRAVERSE. Consulte File Security y Access Right para más información.

0x40

DeleteChild

En el caso de un directorio, el derecho a eliminar un directorio y todos los archivos que contiene, incluidos los archivos de solo lectura.

0x80

ReadAttributes

El derecho a leer los atributos del archivo.

0x100

WriteAttributes

El derecho a escribir atributos de archivo.

0x10000

DELETE

El derecho a eliminar el objeto.

0x20000

READ_CONTROL

El derecho a leer la información en el descriptor de seguridad del objeto, sin incluir la información en la lista de control de acceso al sistema (SACL).

0x40000

WRITE_DAC

El derecho a modificar la lista de control de acceso discrecional (DACL) en el descriptor de seguridad del objeto.

0x80000

WRITE_OWNER

El permiso a cambiar el propietario en el descriptor de seguridad del objeto

0x100000

SYNCHRONIZE

El derecho a utilizar el objeto para la sincronización. Esto permite que un subproceso espere hasta que el objeto esté en el estado señalizado. Algunos tipos de objetos no admiten este derecho de acceso.

0x1000000

ACCESS_SYS_SEC

El derecho de acceso ACCESS_SYS_SEC controla la capacidad de obtener o establecer la SACL en el descriptor de seguridad de un objeto.



Como cuernos se lee el Resource Attributes?

El formato del campo Resource Attributes suele ser una cadena con el siguiente patrón (o similar):

S:AI(RA;ID;;;;WD;("NombreAtributo",TI,0xValorHex,ValorEntero))

 

Descifremos esto 😐:

  • S: Indica que es una cadena de seguridad.
  • AI: Auditoría de "Information" (información).
  • RA: Atributo de recurso.
  • ID: Indica que el atributo ha sido heredado.
  • WD: "Well-known SID" (SID bien conocido), relacionado con "Everyone" o un grupo específico.
  • ("NombreAtributo",TI,0xValorHex,ValorEntero): Esta es la parte más importante y repetible, que define cada atributo de recurso individual.

    • "NombreAtributo": El nombre amigable del atributo de recurso. Por ejemplo, "ClasificacionDatos", "Departamento", "ImpactoNegocio".
    • TI: Tipo de atributo (por ejemplo, "TI" puede significar "Texto").
    • 0xValorHex: Un valor hexadecimal asociado al atributo.
    • ValorEntero: El valor real del atributo. Este valor puede ser una cadena, un número, etc., dependiendo de cómo se haya definido el atributo de recurso.


Otros Event-ID de borrado

Existen dos eventos mas, pocos útiles pero estan y prestan confusión

  • 4656: Intención de borrar
  • 4660: Eliminacion definitiva (real)
El 4660 solo ocurre si 4656 es exitoso


Pero quiero ver los archivos que se cambio el atributo de System y/o Hidden?

Aca la cosa cambia, ya que Windows no considera como algo de seguridad estos cambios de atributos de NTFS por lo que no se vera reflejado en el log (de seguridad) explicitamente el evento 😕.

Mientras que el 4663 puede mostrar que se ejerció el permiso WriteAttributes (escribir atributos), no te dice que atributos específicos del archivo (solo lectura, oculto, sistema, etc.) fueron modificados ni a qué valor. Sólo indica que la capacidad de escribir atributos fue utilizada.

Para saber cuáles atributos específicos (solo lectura, oculto, etc) cambiaron y a qué estado, es mucho más efectivo utilizar Sysmon con su Event ID 26 ... si, como pasa de costumbre se requiere complementos adicionales para solventar las deficiencias 🙄


Sysmon (Event ID 26: File Attribute Change):

  • Para una auditoría más granular, para mostrar los cambios de atributos de archivo (entre otras cosas), la herramienta Sysmon de Sysinternals es la recomendada.
  • Sysmon tiene un Event ID 26: File Attribute Change que está específicamente diseñado para registrar estos cambios. Este evento suele proporcionar:
    • TargetFilename: El archivo afectado.
    • User: El usuario que realizó el cambio.
    • OldFileAttributes: Los atributos del archivo antes del cambio.
    • NewFileAttributes: Los atributos del archivo después del cambio.

  • Se requiere instalar y configurar Sysmon, se puede crear una regla para monitorear los cambios de atributos en las rutas relevantes (para evitar una inundación de eventos).


Referencias

  • https://system32.eventsentry.com/security/event/4663
  • https://system32.eventsentry.com/codes/field/File%20System%20Objects%20Access%20Rights
  • https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventID=4663
  • https://www.ultimatewindowssecurity.com/blog/default.aspx?p=5aea7883-80c4-40cb-b182-01240cc86070
  • https://michaelfirsov.wordpress.com/windows-audit-part-5-problems-in-tracing-file-deletions/

0 comments:

Publicar un comentario