Problema

En entornos de oficina pequeña sin dominio, los administradores deben saber quién creó, modificó o eliminó un archivo en un recurso compartido. Windows 11 incluye auditoría de acceso a objetos, pero genera miles de eventos (ID 4663) que mezclan operaciones legítimas con ruido, como los archivos temporales que crean Word o Excel. Filtrar esos eventos a mano es impracticable y las soluciones comerciales suelen requerir licencias. El reto es disponer de un registro fiable, con los campos “who‑what‑when”, que pueda consultarse desde la línea de comandos o scripts y que sea completamente libre.

Causa

  1. Auditoría de objetos nativa: registra cada intento de acceso, incluyendo lecturas, consultas de atributos y operaciones de bloqueo. En un share activo, eso equivale a cientos de eventos por minuto.
  2. Falta de controlador de dominio: sin AD no hay políticas de grupo centralizadas para limitar el ruido ni para consolidar logs.
  3. Reglas NTFS de “deny delete”: los programas de Office crean y borran archivos temporales (~$filename.docx). Cuando se niega el borrado, el proceso genera errores que aparecen como eventos de eliminación fallida, aumentando la confusión.
  4. Ausencia de un motor de consulta: los logs quedan en el Visor de eventos, dificultando la extracción de “solo los cambios reales”.

Solución

Una arquitectura ligera basada en Sysmon + Osquery cubre los cuatro puntos críticos:

Componente Qué hace Por qué FOSS
Sysmon (parte de Sysinternals) Registra en el log de eventos del sistema (ID 26 para cambios de archivo, ID 11 para creación de procesos) con información de usuario, ruta y hash. Binario gratuito, sin dependencias externas.
Osquery Ejecuta consultas SQL contra la tabla file_events (alimentada por el plugin eventlog) y contra process_events. Permite filtrar por usuario, ruta, tipo de operación y tiempo. Cliente multiplataforma, CLI y API.
Log forwarder opcional (por ejemplo, Vector o Loki) Centraliza los logs en un archivo plano o en un servidor de búsqueda para reportes históricos. Todo el stack sigue siendo FOSS; la elección depende del nivel de retención.
Scripts PowerShell/Bash Automatizan la activación de la auditoría y la generación de reportes periódicos. Nativo en Windows.

Paso 1: Instalar y configurar Sysmon

  1. Descargar la última versión de Sysmon desde la página oficial de Microsoft.
  2. Crear un archivo de configuración XML que limite la captura a creación, escritura y eliminación en la ruta del share (por ejemplo D:\DataShare\). Un ejemplo mínimo:
# Guardar como sysmon-config.xml
<Sysmon schemaversion="4.70">
  <EventFiltering>
    <FileCreate onmatch="include">
      <TargetFilename condition="contains">D:\DataShare\</TargetFilename>
    </FileCreate>
    <FileDelete onmatch="include">
      <TargetFilename condition="contains">D:\DataShare\</TargetFilename>
    </FileDelete>
    <FileWrite onmatch="include">
      <TargetFilename condition="contains">D:\DataShare\</TargetFilename>
    </FileWrite>
    <!-- Ignorar archivos temporales de Office -->
    <FileCreate onmatch="exclude">
      <TargetFilename condition="endswith">.tmp</TargetFilename>
    </FileCreate>
    <FileDelete onmatch="exclude">
      <TargetFilename condition="endswith">.tmp</TargetFilename>
    </FileDelete>
  </EventFiltering>
</Sysmon>
  1. Instalar con la configuración:
sysmon -i sysmon-config.xml

Con esta política, Sysmon escribe en el canal Microsoft-Windows-Sysmon/Operational solo los eventos relevantes, reduciendo drásticamente el ruido.

Paso 2: Desplegar Osquery y habilitar el plugin de eventos

  1. Descargar el instalador de Osquery para Windows y ejecutar la instalación silenciosa:
osqueryi.exe --install
  1. Editar osquery.conf (ubicado en C:\Program Files\osquery\osquery.conf) para habilitar el eventlog y la tabla file_events:
{
  "options": {
    "logger_plugin": "filesystem",
    "logger_path": "C:\\ProgramData\\osquery\\log"
  },
  "schedule": {
    "file_audit": {
      "query": "SELECT datetime, action, target_path, uid, gid FROM file_events WHERE target_path LIKE 'D:\\\\DataShare\\\\%';",
      "interval": 60,
      "description": "Auditar cambios en el share cada minuto"
    }
  },
  "decorators": {
    "always": [
      "SELECT uuid AS host_uuid FROM system_info;"
    ]
  }
}
  1. Reiniciar el servicio osqueryd para que la nueva tabla empiece a recolectar datos.

Paso 3: Generar reportes “who‑what‑when”

Una consulta típica para obtener los últimos 100 cambios:

osqueryi "SELECT datetime, action, target_path, username FROM file_events WHERE target_path LIKE 'D:\\DataShare\\%' ORDER BY datetime DESC LIMIT 100;"

Para exportar a CSV (útil para auditorías mensuales):

osqueryi --json "SELECT datetime, action, target_path, username FROM file_events WHERE target_path LIKE 'D:\\DataShare\\%';" > share_audit_$(date +%F).json

Paso 4 (opcional): Centralizar con Vector

Si se desea conservar los logs más allá de la retención local, instalar Vector y configurarlo para leer los archivos de log de Osquery (C:\ProgramData\osquery\log\) y enviarlos a un bucket S3 o a Loki. La configuración es mínima y mantiene todo bajo licencia Apache 2.0.

Cuándo aplicar esta solución

  • Entornos workgroup sin AD donde la auditoría basada en políticas de dominio no es viable.
  • Número de usuarios ≤ 20 y un share de datos centralizado (una o pocas carpetas).
  • Necesidad de reportes automáticos (diarios, semanales) sin depender de herramientas propietarias.
  • Cuando el ruido de la auditoría nativa supera la capacidad de filtrado manual.

No aplica cuando:

  • Se requiere auditoría a nivel de capa SMB (por ejemplo, capturar credenciales de autenticación) sin acceso a los hosts.
  • El número de máquinas y shares es tan alto que una solución de SIEM comercial es más rentable.
  • Se necesita cumplimiento estricto de normas que exijan certificación de herramientas específicas.

Código

# 1. Instalar Sysmon con política mínima
sysmon -i sysmon-config.xml

# 2. Instalar Osquery (modo silencioso)
msiexec /i osquery-5.13.2.msi /quiet

# 3. Configurar Osquery para audit de share
type NUL > "C:\Program Files\osquery\osquery.conf"
# (pegar el JSON del paso 2 en el archivo)

# 4. Reiniciar servicio
net stop osqueryd
net start osqueryd

# 5. Consulta rápida de cambios
osqueryi "SELECT datetime, action, target_path, username FROM file_events WHERE target_path LIKE 'D:\\DataShare\\%' ORDER BY datetime DESC LIMIT 50;"

Verificación

  1. Crear un archivo de prueba en D:\DataShare\test.txt con la cuenta de un interno.
  2. Ejecutar la consulta de Osquery y confirmar que aparece una fila con action = "CREATED" y el nombre de usuario correcto.
  3. Eliminar el archivo y volver a consultar; debe aparecer action = "DELETED".
  4. Revisar el visor de eventos (Applications and Services Logs → Microsoft → Windows → Sysmon → Operational) y buscar el Event ID 26 correspondiente; el Image debe coincidir con explorer.exe o la aplicación que realizó la operación.
  5. Si los archivos temporales de Office siguen generando eventos, añadir una regla de exclusión en sysmon-config.xml (como se muestra) y volver a cargar con sysmon -c sysmon-config.xml.

Notas adicionales

  • Hash de archivo: Sysmon permite añadir hashes="SHA256" en la configuración para que cada creación incluya el hash del contenido. Es útil cuando se necesita validar integridad después de una restauración.
  • Permisos NTFS: la regla “deny delete” sigue siendo necesaria, pero combinarla con la exclusión de archivos .tmp evita que Office genere eventos de error que saturen el log.
  • Retención: Osquery escribe logs en formato JSON rotativo. Configura logger_max_size y logger_rotate en osquery.conf para evitar que el disco se llene.
  • Escalabilidad: si el número de hosts crece, considera desplegar un agente de recolección (Vector, Fluent Bit) y un motor de búsqueda como OpenSearch o Grafana Loki; la arquitectura sigue siendo 100 % FOSS.
  • Seguridad del agente: protege la carpeta de logs (C:\ProgramData\osquery\log) con ACL que solo permitan lectura al administrador y al servicio de recolección, evitando que usuarios con acceso al share alteren los registros.

Con Sysmon y Osquery se obtiene un registro preciso de “quién, qué y cuándo” en shares de Windows 11 Workgroup sin el ruido abrumador de la auditoría estándar y sin depender de licencias propietarias. La solución es modular, fácil de desplegar y suficientemente flexible para adaptarse a oficinas pequeñas o medianas que buscan una postura de auditoría robusta y totalmente libre.