Recopila registros de Microsoft SQL Server

Compatible con:

En este documento, se explica cómo transferir registros de Microsoft SQL Server a Google Security Operations con Bindplane. El analizador controla los registros de Microsoft SQL Server estructurados (JSON, pares clave-valor) y semiestructurados (syslog). Extrae campos, normaliza marcas de tiempo, controla diferentes formatos de registro según el contenido de SourceModuleType y Message (incluidos los eventos de auditoría, acceso y base de datos) y los asigna al UDM. También realiza una lógica de análisis específica para los registros de auditoría, los intentos de acceso y las operaciones de la base de datos, lo que enriquece los datos con información adicional sobre el contexto y la gravedad.Recopila los registros de auditoría y de errores de SQL Server del registro de eventos de Windows con un reenvío de syslog (NXLog) y los envía al agente de BindPlane para que se entreguen a Google SecOps.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Un host con Windows Server 2016 o una versión posterior que ejecute Microsoft SQL Server
  • Acceso administrativo para instalar y configurar el agente de BindPlane y NXLog
  • Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.

Obtén el archivo de autenticación de transferencia de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará BindPlane.

Obtén el ID de cliente de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Instala el agente de BindPlane

Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.

Instalación en Windows

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el siguiente comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Recursos de instalación adicionales

Para obtener más opciones de instalación, consulta la guía de instalación.

Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps

  1. Accede al archivo de configuración:
    • Ubica el archivo config.yaml. Por lo general, se encuentra en el directorio `C:\Program Files\observIQ\bindplane-agent` en Windows.
    • Abre el archivo con un editor de texto (por ejemplo, nano, vi o Bloc de notas).
  2. Edita el archivo config.yaml de la siguiente manera:

      receivers:
      udplog:
         # Replace the port and IP address as required
         listen_address: "0.0.0.0:1514"
    
      exporters:
      chronicle/chronicle_w_labels:
         compression: gzip
         # Adjust the path to the credentials file you downloaded in Step 1
         creds_file_path: '/path/to/ingestion-authentication-file.json'
         # Replace with your actual customer ID from Step 2
         customer_id: <YOUR_CUSTOMER_ID>
         endpoint: malachiteingestion-pa.googleapis.com
         # Add optional ingestion labels for better organization
         log_type: 'MICROSOFT_SQL'
         raw_log_field: body
         ingestion_labels:
    
      service:
      pipelines:
         logs/source0__chronicle_w_labels-0:
            receivers:
            - udplog
            exporters:
            - chronicle/chronicle_w_labels
    

Reinicia el agente de Bindplane para aplicar los cambios

  • Para reiniciar el agente de Bindplane en Windows, puedes usar la consola de Servicios o ingresar el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Habilita la auditoría de SQL Server en el registro de eventos de Windows

Puedes habilitar la auditoría de SQL Server con la GUI de SQL Server Management Studio (SSMS) o con comandos de T-SQL. Elige la opción que mejor se adapte a tu entorno.

Opción 1: Habilita la auditoría de SQL Server a través de la GUI de SSMS

Crea una auditoría del servidor en la IU de SQL Server Management Studio

  1. Abre SQL Server Management Studio (SSMS) y conéctate a tu instancia de SQL Server.
  2. En el Explorador de objetos, expande la instancia del servidor.
  3. Expande la carpeta Security.
  4. Haz clic con el botón derecho en Audits y selecciona New Audit.
  5. En el diálogo Crear auditoría, proporciona los siguientes detalles de configuración:
    • Nombre de la auditoría: Ingresa ChronicleAudit.
    • Demora en la cola (en milisegundos): Ingresa 1000.
    • En falla de registro de auditoría: Selecciona Continuar.
    • Destino de la auditoría: Selecciona Registro de aplicación.
  6. Haz clic en Aceptar para crear la auditoría.
  7. En el Explorador de objetos, haz clic con el botón derecho en el objeto ChronicleAudit recién creado y selecciona Habilitar auditoría.

Crea la especificación de auditoría del servidor a través de la GUI de SSMS

  1. En Explorador de objetos, expande Seguridad.
  2. Haz clic con el botón derecho en Especificaciones de auditoría del servidor y selecciona Nueva especificación de auditoría del servidor.
  3. En el diálogo Crear especificación de auditoría del servidor, proporciona los siguientes detalles de configuración:
    • Nombre: Ingresa ChronicleAuditSpec.
    • Auditoría: Selecciona ChronicleAudit en el menú.
  4. En la sección Audit Action Type, haz clic en Agregar y selecciona los siguientes grupos de acciones de auditoría (agrega cada uno de forma individual haciendo clic en Agregar después de seleccionar cada uno):
    • FAILED_LOGIN_GROUP
    • SUCCESSFUL_LOGIN_GROUP
    • LOGOUT_GROUP
    • SERVER_ROLE_MEMBER_CHANGE_GROUP
    • DATABASE_OBJECT_CHANGE_GROUP
    • DATABASE_PRINCIPAL_CHANGE_GROUP
    • SCHEMA_OBJECT_CHANGE_GROUP
    • DATABASE_PERMISSION_CHANGE_GROUP
  5. Haz clic en Aceptar para crear la especificación de auditoría.
  6. En el Explorador de objetos, haz clic con el botón derecho en el objeto ChronicleAuditSpec recién creado y selecciona Habilitar especificación de auditoría del servidor.

Verifica la configuración de auditoría

  1. En el Explorador de objetos, expande Seguridad > Auditorías.
  2. Haz clic con el botón derecho en ChronicleAudit y selecciona Propiedades.
  3. Verifica que el Estado se muestre como Iniciado o Habilitado.
  4. Expande Seguridad > Especificaciones de auditoría del servidor.
  5. Haz clic con el botón derecho en ChronicleAuditSpec y selecciona Propiedades.
  6. Verifica que se muestren los ocho grupos de acciones de auditoría y que la especificación esté habilitada.

Opción 2: Habilita la auditoría de SQL Server con T-SQL

  1. Abre SQL Server Management Studio (SSMS) y conéctate a tu instancia de SQL Server.
  2. Ejecuta los siguientes comandos de T-SQL para crear una auditoría del servidor que escriba en el registro de aplicaciones de Windows:

    USE master;
    GO
    
    CREATE SERVER AUDIT ChronicleAudit
    TO APPLICATION_LOG
    WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
    GO
    
    ALTER SERVER AUDIT ChronicleAudit WITH (STATE = ON);
    GO
    
  3. Crea una especificación de auditoría para capturar los eventos de seguridad pertinentes:

    CREATE SERVER AUDIT SPECIFICATION ChronicleAuditSpec
    FOR SERVER AUDIT ChronicleAudit
    ADD (FAILED_LOGIN_GROUP),
    ADD (SUCCESSFUL_LOGIN_GROUP),
    ADD (LOGOUT_GROUP),
    ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
    ADD (DATABASE_OBJECT_CHANGE_GROUP),
    ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
    ADD (SCHEMA_OBJECT_CHANGE_GROUP),
    ADD (DATABASE_PERMISSION_CHANGE_GROUP);
    GO
    
    ALTER SERVER AUDIT SPECIFICATION ChronicleAuditSpec WITH (STATE = ON);
    GO
    

Esta configuración garantiza que los eventos de autenticación, los cambios de permisos y las modificaciones de objetos se registren en el registro de eventos de Windows.

Instala y configura NXLog para reenviar eventos a BindPlane

  1. Descarga NXLog Community Edition desde nxlog.co/downloads.
  2. Ejecuta el instalador y completa el asistente de instalación.
  3. Abre el archivo de configuración de NXLog ubicado en:

    C:\Program Files\nxlog\conf\nxlog.conf
    
  4. Reemplaza el contenido con la siguiente configuración:

    define ROOT C:\Program Files\nxlog
    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    Pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    LogFile %ROOT%\data\nxlog.log
    
    <Extension _json>
       Module      xm_json
    </Extension>
    
    <Input in_eventlog>
       Module      im_msvistalog
       Query       <QueryList>\
                      <Query Id="0">\
                            <Select Path="Application">*[System[Provider[@Name='MSSQLSERVER']]]</Select>\
                      </Query>\
                   </QueryList>
    </Input>
    
    <Output out_syslog>
       Module      om_udp
       Host        127.0.0.1
       Port        1514
       Exec        to_json();
    </Output>
    
    <Route r1>
       Path        in_eventlog => out_syslog
    </Route>
    
    • Reemplaza el valor actual de Host 127.0.0.1 por la dirección IP del agente de Bindplane.
    • Asegúrate de que el valor de Puerto coincida con el puerto del receptor udplog de Bindplane que configuraste anteriormente.
  5. Guarda el archivo y reinicia el servicio de NXLog:

    net stop nxlog && net start nxlog
    

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
AccountName principal.user.userid Se usa para principal.user.userid si está presente en registros como Starting up database o Log was backed up.
AgentDevice additional.fields Se agregó como un par clave-valor a additional.fields con la clave "AgentDevice".
AgentLogFile additional.fields Se agregó como un par clave-valor a additional.fields con la clave "AgentLogFile".
agent.hostname observer.asset.hostname Se asigna al nombre de host del observador.
agent.id observer.asset_id Se concatenó con agent.type para formar observer.asset_id.
agent.type observer.asset_id Se concatenó con agent.id para formar observer.asset_id.
agent.version observer.platform_version Se asigna a la versión de la plataforma del observador.
ApplicationName principal.application Se asigna a la aplicación principal.
application_name target.application Es el mapa de la aplicación de destino.
client_address principal.ip Se usa para la IP principal si es diferente del host y no es una canalización local o con nombre.
client_ip principal.ip Se asigna a la IP principal.
computer_name about.hostname Se asigna al nombre de host de About.
correlationId security_result.detection_fields Se agregó como un par clave-valor a security_result.detection_fields con la clave "correlationId".
Date metadata.event_timestamp Se combina con Time para crear la marca de tiempo del evento.
database_name target.resource_ancestors.name Se usa para el nombre del recurso superior de destino si está presente en los registros de auditoría.
durationMs network.session_duration.seconds Se convierte de milisegundos a segundos y se asigna.
ecs.version metadata.product_version Asigna la versión del producto.
error security_result.detection_fields Se agregó como un par clave-valor a security_result.detection_fields con la clave "error".
err_msg security_result.description Se asigna a la descripción del resultado de seguridad.
EventID metadata.product_event_type Se usa para construir el tipo de evento del producto si no hay otros campos disponibles. Tiene el prefijo "EventID: ".
event.action Source Se usa como fuente si está presente.
event.code metadata.product_event_type Se combinó con event.provider para formar metadata.product_event_type.
event.provider metadata.product_event_type Se combinó con event.code para formar metadata.product_event_type.
EventReceivedTime metadata.ingested_timestamp Se analiza y se usa como marca de tiempo transferida.
event_time metadata.event_timestamp Se analiza y se usa como marca de tiempo del evento.
file_name principal.process.file.full_path Asigna el proceso principal a la ruta de acceso completa del archivo.
file_path target.file.full_path Se usa para la ruta de acceso completa del archivo de destino si se encuentra en los registros de copias de seguridad.
first_lsn target.resource.attribute.labels Se agregó como un par clave-valor a target.resource.attribute.labels con la clave "First LSN".
host principal.hostname, observer.hostname Se usa para el nombre de host de la principal o del observador si no es una IP. También se usa para el nombre de host o la IP de destino, según si se trata de una IP o no.
host.ip principal.ip Se combinó con la IP principal.
host.name host Se usa como host si está presente.
Hostname principal.hostname, target.hostname Se usa para el nombre de host principal o de destino si está presente.
hostinfo.architecture principal.asset.hardware.cpu_platform Se asigna a la plataforma de CPU de hardware del activo principal.
hostinfo.os.build additional.fields Se agregó como un par clave-valor a additional.fields con la clave "os_build".
hostinfo.os.kernel principal.platform_patch_level Se asigna al nivel de parche de la plataforma principal.
hostinfo.os.name additional.fields Se agrega como un par clave-valor a additional.fields con la clave "os_name".
hostinfo.os.platform principal.platform Se escribe en mayúsculas y se asigna a la plataforma principal.
hostinfo.os.version principal.platform_version Se asigna a la versión principal de la plataforma.
last_lsn target.resource.attribute.labels Se agregó como un par clave-valor a target.resource.attribute.labels con la clave "Last LSN".
level security_result.severity Si es "Informativo", establece security_result.severity como "INFORMATIONAL".
log.level security_result.severity_details Es un mapa que asigna la gravedad a los detalles del resultado de seguridad.
LoginName principal.user.userid Se usa para el ID de usuario principal si está presente en los registros de KV.
login_result security_result.action Determina la acción del resultado de seguridad (ALLOW o BLOCK).
logon_user principal.user.userid Se usa para el ID de usuario principal si está presente en los registros de acceso.
logstash.process.host intermediary.hostname Se asigna al nombre de host intermedio.
Message metadata.description, security_result.description Se usa para la descripción del evento o la descripción del resultado de seguridad, según el tipo de registro.
msg metadata.description Se usa para la descripción del evento si está presente.
ObjectName target.resource.name Se asigna al nombre del recurso de destino.
object_name target.resource.name Se usa para el nombre del recurso de destino si está presente en los registros de auditoría.
ObjectType target.resource.type Se asigna al tipo de recurso de destino.
operationId security_result.detection_fields Se agregó como un par clave-valor a security_result.detection_fields con la clave "operationId".
operationName metadata.product_event_type Se asigna al tipo de evento del producto.
operationVersion additional.fields Se agrega como un par clave-valor a additional.fields con la clave "operationVersion".
ProcessInfo additional.fields Se agrega como un par clave-valor a additional.fields con la clave "ProcessInfo".
properties.apiVersion metadata.product_version Asigna la versión del producto.
properties.appId target.resource.product_object_id Se asigna al ID del objeto del producto del recurso de destino.
properties.clientAuthMethod extensions.auth.auth_details Se usa para determinar los detalles de autenticación.
properties.clientRequestId additional.fields Se agrega como un par clave-valor a additional.fields con la clave "clientRequestId".
properties.durationMs network.session_duration.seconds Se convierte a segundos y se asigna.
properties.identityProvider security_result.detection_fields Se agregó como un par clave-valor a security_result.detection_fields con la clave "identityProvider".
properties.ipAddress principal.ip, principal.asset.ip Se analizó para obtener la IP y se combinó con la IP principal y la IP del activo principal.
properties.location principal.location.name Se asigna al nombre de la ubicación principal.
properties.operationId security_result.detection_fields Se agregó como un par clave-valor a security_result.detection_fields con la clave "operationId".
properties.requestId metadata.product_log_id Es el ID del registro del producto.
properties.requestMethod network.http.method Se asigna al método HTTP de la red.
properties.requestUri target.url Es el mapa de la URL de segmentación.
properties.responseSizeBytes network.received_bytes Se convirtió a un número entero sin signo y se asignó.
properties.responseStatusCode network.http.response_code Se convierte en un número entero y se asigna.
properties.roles additional.fields Se agrega como un par clave-valor a additional.fields con la clave "roles".
properties.servicePrincipalId principal.user.userid Se usa para el ID de usuario principal si no está presente properties.userId.
properties.signInActivityId network.session_id Se asigna al ID de sesión de la red.
properties.tenantId metadata.product_deployment_id Se asigna al ID de implementación del producto.
properties.tokenIssuedAt additional.fields Se agrega como un par clave-valor a additional.fields con la clave "tokenIssuedAt".
properties.userAgent network.http.user_agent Se asigna al usuario-agente HTTP de la red.
properties.userId principal.user.userid Se usa para el ID de usuario principal si está presente.
properties.wids security_result.detection_fields Se agrega como un par clave-valor a security_result.detection_fields con la clave "wids".
reason security_result.summary Se usa para el resumen de resultados de seguridad en eventos de acceso.
resourceId target.resource.attribute.labels Se agregó como un par clave-valor a target.resource.attribute.labels con la clave "ID de recurso".
schema_name target.resource_ancestors.resource_subtype Se usa para el subtipo de recurso superior de destino si está presente en los registros de auditoría.
security_result.description metadata.description Se usa para la descripción del evento si no es un evento de auditoría.
security_result.severity security_result.severity Se asigna directamente si está presente. Se establece en "LOW" para los registros de KV, en "INFORMATIONAL" para ciertos mensajes de error y se deriva de los campos level o Severity.
security_result.severity_details security_result.severity_details Se asigna directamente si está presente.
security_result.summary security_result.summary Se asigna directamente si está presente. Se establece en "Conexión realizada con autenticación de Windows" o en motivos específicos de los eventos de acceso, o bien en "Registro de auditoría de SQL Server" para los eventos de auditoría.
security_result_action security_result.action Se combinó con security_result.action. Se establece en "ALLOW" para la mayoría de los eventos y se deriva de login_result para los eventos de acceso.
server_instance_name target.hostname Se usa para el nombre de host de destino si está presente en los registros de auditoría.
server_principal_name principal.user.userid Se usa para el ID de usuario principal si está presente en los registros de auditoría.
server_principal_sid principal.asset_id Se usa para construir el ID del activo principal, con el prefijo "server SID:".
session_id network.session_id Se usa para el ID de sesión de red si está presente en los registros de auditoría.
sev security_result.severity Se usa para determinar la gravedad del resultado de seguridad.
Severity security_result.severity Se usa para determinar la gravedad del resultado de seguridad.
Source additional.fields Se agregó como un par clave-valor a additional.fields con la clave "Source".
source principal.resource.attribute.labels Se agrega como un par clave-valor a principal.resource.attribute.labels con la clave "source".
SourceModuleType observer.application Es el mapa de la aplicación del observador.
SourceModuleName additional.fields Se agrega como un par clave-valor a additional.fields con la clave "SourceModuleName".
source_module_name observer.labels Se agrega como un par clave-valor a observer.labels con la clave "SourceModuleName".
source_module_type observer.application Es el mapa de la aplicación del observador.
SPID network.session_id Se asigna al ID de sesión de la red.
statement target.process.command_line Se usa para la línea de comandos del proceso de destino si está presente en los registros de auditoría.
TextData security_result.description, metadata.description Se usa para la descripción del resultado de seguridad si no es un evento de acceso o para la descripción del evento si lo es.
time metadata.event_timestamp Se analiza y se usa como marca de tiempo del evento.
Time metadata.event_timestamp Se combina con Date para crear la marca de tiempo del evento.
transaction_id target.resource.attribute.labels Se agrega como un par clave-valor a target.resource.attribute.labels con la clave "transaction_id".
UserID principal.user.windows_sid Se usa para el SID de Windows del usuario principal si está presente y en el formato correcto.
user_id principal.user.userid Se usa para el ID de usuario principal si está presente.
metadata.log_type metadata.log_type Se codifica de forma rígida como "MICROSOFT_SQL".
metadata.vendor_name metadata.vendor_name Se codifica de forma rígida como "Microsoft".
metadata.product_name metadata.product_name Está codificado como "SQL Server".
metadata.event_type metadata.event_type Se establece en varios valores según el contenido del registro, incluidos "USER_LOGIN", "USER_LOGOUT", "STATUS_STARTUP", "STATUS_SHUTDOWN", "NETWORK_HTTP", "GENERIC_EVENT" y "STATUS_UNCATEGORIZED" como valor predeterminado.
extensions.auth.type extensions.auth.type Se establece en "MACHINE" para los eventos de acceso y salida.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.