Recolha registos do Microsoft SQL Server

Compatível com:

Este documento explica como carregar registos do Microsoft SQL Server para o Google Security Operations através do Bindplane. O analisador processa registos do Microsoft SQL Server estruturados (JSON, pares de chave/valor) e semiestruturados (syslog). Extrai campos, normaliza datas/horas, processa diferentes formatos de registo com base no conteúdo de SourceModuleType e Message (incluindo eventos de auditoria, início de sessão e base de dados) e mapeia-os para o UDM. Também executa uma lógica de análise específica para registos de auditoria, tentativas de início de sessão e operações de base de dados, enriquecendo os dados com contexto adicional e informações de gravidade.Recolhe registos de auditoria e de erros do SQL Server a partir do registo de eventos do Windows através de um encaminhador syslog (NXLog) e envia-os para o agente BindPlane para entrega ao Google SecOps.

Antes de começar

Certifique-se de que cumpre os seguintes pré-requisitos:

  • Uma instância do Google SecOps
  • Um anfitrião com o Windows Server 2016 ou posterior a executar o Microsoft SQL Server
  • Acesso administrativo para instalar e configurar o agente BindPlane e o NXLog
  • Se estiver a executar o agente através de um proxy, certifique-se de que as portas da firewall estão abertas de acordo com os requisitos do agente Bindplane

Obtenha o ficheiro de autenticação de carregamento do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.

Obtenha o ID de cliente do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane

Instale o agente do Bindplane no seu sistema operativo Windows ou Linux de acordo com as seguintes instruções.

Instalação do Windows

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte comando:

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

Recursos de instalação adicionais

Para ver opções de instalação adicionais, consulte o guia de instalação.

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

  1. Aceda ao ficheiro de configuração:
    • Localize o ficheiro config.yaml. Normalmente, encontra-se no diretório `C:\Program Files\observIQ\bindplane-agent` no Windows.
    • Abra o ficheiro com um editor de texto (por exemplo, nano, vi ou Bloco de notas).
  2. Edite o ficheiro config.yaml da seguinte forma:

      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
    

Reinicie o agente do Bindplane para aplicar as alterações

  • Para reiniciar o agente Bindplane no Windows, pode usar a consola Serviços ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Ative a auditoria do SQL Server no registo de eventos do Windows

Pode ativar a auditoria do SQL Server através da IU do SQL Server Management Studio (SSMS) ou de comandos T-SQL. Escolha a opção que melhor se adequa ao seu ambiente.

Opção 1: ative a auditoria do SQL Server através da GUI do SSMS

Crie uma auditoria do servidor na IU do SQL Server Management Studio

  1. Abra o SQL Server Management Studio (SSMS) e estabeleça ligação à sua instância do SQL Server.
  2. No Object Explorer, expanda a instância do servidor.
  3. Expanda a pasta Segurança.
  4. Clique com o botão direito do rato em Auditorias e selecione Nova auditoria.
  5. Na caixa de diálogo Criar auditoria, indique os seguintes detalhes de configuração:
    • Nome da auditoria: introduza ChronicleAudit.
    • Atraso da fila (em milissegundos): introduza 1000.
    • Em caso de falha do registo de auditoria: selecione Continuar.
    • Destino da auditoria: selecione Registo de aplicações.
  6. Clique em OK para criar a auditoria.
  7. No Object Explorer, clique com o botão direito do rato em ChronicleAudit recém-criado e selecione Enable Audit.

Crie uma especificação de auditoria do servidor através da GUI do SSMS

  1. No Explorador de objetos, expanda Segurança.
  2. Clique com o botão direito do rato em Server Audit Specifications e selecione New Server Audit Specification.
  3. Na caixa de diálogo Criar especificação de auditoria do servidor, indique os seguintes detalhes de configuração:
    • Nome: introduza ChronicleAuditSpec.
    • Auditoria: selecione ChronicleAudit no menu.
  4. Na secção Tipo de ação de auditoria, clique em Adicionar e selecione os seguintes grupos de ações de auditoria (adicione cada um individualmente clicando em Adicionar após selecionar cada um):
    • 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. Clique em OK para criar a especificação de auditoria.
  6. No Object Explorer, clique com o botão direito do rato no ChronicleAuditSpec recém-criado e selecione Enable Server Audit Specification.

Valide a configuração de auditoria

  1. No Explorador de objetos, expanda Segurança > Auditorias.
  2. Clique com o botão direito do rato em ChronicleAudit e selecione Propriedades.
  3. Verifique se o Estado é apresentado como Iniciado ou Ativado.
  4. Expanda Segurança > Especificações de auditoria do servidor.
  5. Clique com o botão direito do rato em ChronicleAuditSpec e selecione Propriedades.
  6. Verifique se todos os oito grupos de ações de auditoria estão listados e se a especificação está ativada.

Opção 2: ative a auditoria do SQL Server com o T-SQL

  1. Abra o SQL Server Management Studio (SSMS) e estabeleça ligação à sua instância do SQL Server.
  2. Execute os seguintes comandos T-SQL para criar uma auditoria do servidor que escreve no registo de aplicações do 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. Crie uma especificação de auditoria para capturar eventos de segurança relevantes:

    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 configuração garante que os eventos de autenticação, as alterações de autorizações e as modificações de objetos são registados no registo de eventos do Windows.

Instale e configure o NXLog para encaminhar eventos para o Bindplane

  1. Transfira o NXLog Community Edition a partir de nxlog.co/downloads.
  2. Execute o instalador e conclua o assistente de instalação.
  3. Abra o ficheiro de configuração do NXLog localizado em:

    C:\Program Files\nxlog\conf\nxlog.conf
    
  4. Substitua o conteúdo pela seguinte configuração:

    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>
    
    • Substitua o valor atual do Anfitrião 127.0.0.1 pelo endereço IP do agente Bindplane.
    • Certifique-se de que o valor de Port corresponde à porta do recetor do Bindplane udplog configurada anteriormente.
  5. Guarde o ficheiro e reinicie o serviço NXLog:

    net stop nxlog && net start nxlog
    

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
AccountName principal.user.userid Usado para principal.user.userid se estiver presente em registos como Starting up database ou Log was backed up.
AgentDevice additional.fields Adicionado como um par de chave-valor a additional.fields com a chave "AgentDevice".
AgentLogFile additional.fields Adicionado como um par de chave-valor a additional.fields com a chave "AgentLogFile".
agent.hostname observer.asset.hostname Mapeia para o nome do anfitrião do observador.
agent.id observer.asset_id Concatenado com agent.type para formar observer.asset_id.
agent.type observer.asset_id Concatenado com agent.id para formar observer.asset_id.
agent.version observer.platform_version Mapeamentos para a versão da plataforma do observador.
ApplicationName principal.application Mapeia para a aplicação principal.
application_name target.application Mapeia a aplicação de destino.
client_address principal.ip Usado para o IP principal, se for diferente do anfitrião e não for um canal local ou denominado.
client_ip principal.ip Mapeia para o IP principal.
computer_name about.hostname Mapeia para o nome do anfitrião.
correlationId security_result.detection_fields Adicionado como um par de chave-valor a security_result.detection_fields com a chave "correlationId".
Date metadata.event_timestamp Combinado com Time para criar a data/hora do evento.
database_name target.resource_ancestors.name Usado para o nome do recurso principal de destino, se estiver presente nos registos de auditoria.
durationMs network.session_duration.seconds Convertido de milissegundos para segundos e mapeado.
ecs.version metadata.product_version Mapeamento para a versão do produto.
error security_result.detection_fields Adicionado como um par de chave-valor a security_result.detection_fields com a chave "error".
err_msg security_result.description Mapeia para a descrição do resultado de segurança.
EventID metadata.product_event_type Usado para criar o tipo de evento de produto se outros campos não estiverem disponíveis, com o prefixo "EventID: ".
event.action Source Usado como origem, se estiver presente.
event.code metadata.product_event_type Combinado com event.provider para formar metadata.product_event_type.
event.provider metadata.product_event_type Combinado com event.code para formar metadata.product_event_type.
EventReceivedTime metadata.ingested_timestamp Analisado e usado como data/hora carregada.
event_time metadata.event_timestamp Analisado e usado como data/hora do evento.
file_name principal.process.file.full_path Mapeia o caminho completo do ficheiro do processo principal.
file_path target.file.full_path Usado para o caminho completo do ficheiro de destino, se encontrado nos registos de cópias de segurança.
first_lsn target.resource.attribute.labels Adicionado como um par de chave-valor a target.resource.attribute.labels com a chave "First LSN".
host principal.hostname, observer.hostname Usado para o nome do anfitrião principal ou observador, se não for um IP. Também usado para o nome de anfitrião ou o IP de destino, consoante se for um IP ou não.
host.ip principal.ip Unido ao IP principal.
host.name host Usado como anfitrião, se estiver presente.
Hostname principal.hostname, target.hostname Usado para o nome de anfitrião principal ou de destino, se presente.
hostinfo.architecture principal.asset.hardware.cpu_platform Mapeia para a plataforma de CPU do hardware do recurso principal.
hostinfo.os.build additional.fields Adicionado como um par de chave-valor a additional.fields com a chave "os_build".
hostinfo.os.kernel principal.platform_patch_level Mapeamentos para o nível de patch da plataforma principal.
hostinfo.os.name additional.fields Adicionado como um par de chave-valor a additional.fields com a chave "os_name".
hostinfo.os.platform principal.platform Em maiúsculas e mapeado para a plataforma principal.
hostinfo.os.version principal.platform_version Mapeia para a versão principal da plataforma.
last_lsn target.resource.attribute.labels Adicionado como um par de chave-valor a target.resource.attribute.labels com a chave "Last LSN".
level security_result.severity Se for "Informacional", define security_result.severity como "INFORMATIONAL".
log.level security_result.severity_details Mapeia os detalhes da gravidade do resultado de segurança.
LoginName principal.user.userid Usado para o ID do utilizador principal, se estiver presente nos registos de KV.
login_result security_result.action Determina a ação do resultado de segurança (ALLOW ou BLOCK).
logon_user principal.user.userid Usado para o ID do utilizador principal, se estiver presente nos registos de início de sessão.
logstash.process.host intermediary.hostname Mapeia para o nome do anfitrião intermediário.
Message metadata.description, security_result.description Usado para a descrição do evento ou a descrição do resultado de segurança, consoante o tipo de registo.
msg metadata.description Usado para a descrição do evento, se estiver presente.
ObjectName target.resource.name Mapeia para o nome do recurso de destino.
object_name target.resource.name Usado para o nome do recurso de destino, se estiver presente nos registos de auditoria.
ObjectType target.resource.type Mapeia o tipo de recurso de destino.
operationId security_result.detection_fields Adicionado como um par de chave-valor a security_result.detection_fields com a chave "operationId".
operationName metadata.product_event_type Mapeia para o tipo de evento do produto.
operationVersion additional.fields Adicionado como um par de chave-valor a additional.fields com a chave "operationVersion".
ProcessInfo additional.fields Adicionado como um par de chave-valor a additional.fields com a chave "ProcessInfo".
properties.apiVersion metadata.product_version Mapeamento para a versão do produto.
properties.appId target.resource.product_object_id Mapeia para o ID do objeto do produto do recurso de destino.
properties.clientAuthMethod extensions.auth.auth_details Usado para determinar os detalhes de autenticação.
properties.clientRequestId additional.fields Adicionado como um par de chave-valor a additional.fields com a chave "clientRequestId".
properties.durationMs network.session_duration.seconds Convertido em segundos e mapeado.
properties.identityProvider security_result.detection_fields Adicionado como um par de chave-valor a security_result.detection_fields com a chave "identityProvider".
properties.ipAddress principal.ip, principal.asset.ip Analisado para PI e unido à PI principal e à PI do recurso principal.
properties.location principal.location.name Mapeia para o nome da localização principal.
properties.operationId security_result.detection_fields Adicionado como um par de chave-valor a security_result.detection_fields com a chave "operationId".
properties.requestId metadata.product_log_id Mapeia para o ID do registo do produto.
properties.requestMethod network.http.method Mapeia para o método HTTP de rede.
properties.requestUri target.url Mapeia para o URL de destino.
properties.responseSizeBytes network.received_bytes Convertido para número inteiro sem sinal e mapeado.
properties.responseStatusCode network.http.response_code Convertido em número inteiro e mapeado.
properties.roles additional.fields Adicionado como um par de chave-valor a additional.fields com a chave "roles".
properties.servicePrincipalId principal.user.userid Usado para o ID do utilizador principal se properties.userId não estiver presente.
properties.signInActivityId network.session_id Mapeia para o ID da sessão de rede.
properties.tenantId metadata.product_deployment_id Mapeia para o ID de implementação do produto.
properties.tokenIssuedAt additional.fields Adicionado como um par de chave-valor a additional.fields com a chave "tokenIssuedAt".
properties.userAgent network.http.user_agent Mapeia para o agente do utilizador HTTP de rede.
properties.userId principal.user.userid Usado para o ID do utilizador principal, se estiver presente.
properties.wids security_result.detection_fields Adicionado como um par de chave-valor a security_result.detection_fields com a chave "wids".
reason security_result.summary Usado para o resumo dos resultados de segurança em eventos de início de sessão.
resourceId target.resource.attribute.labels Adicionado como um par de chave-valor a target.resource.attribute.labels com a chave "ID do recurso".
schema_name target.resource_ancestors.resource_subtype Usado para o subtipo de ancestral do recurso de destino, se estiver presente nos registos de auditoria.
security_result.description metadata.description Usado para a descrição do evento se não for um evento de auditoria.
security_result.severity security_result.severity Mapeia diretamente, se estiver presente. Definido como "LOW" para registos KV, "INFORMATIONAL" para determinadas mensagens de erro e derivado dos campos level ou Severity.
security_result.severity_details security_result.severity_details Mapeia diretamente, se estiver presente.
security_result.summary security_result.summary Mapeia diretamente, se estiver presente. Definido como "Ligação estabelecida através da autenticação do Windows" ou motivos específicos de eventos de início de sessão, ou "Registo de auditoria do SQL Server" para eventos de auditoria.
security_result_action security_result.action Unido a security_result.action. Definido como "ALLOW" para a maioria dos eventos e derivado de login_result para eventos de início de sessão.
server_instance_name target.hostname Usado para o nome de anfitrião de destino, se estiver presente nos registos de auditoria.
server_principal_name principal.user.userid Usado para o ID do utilizador principal, se estiver presente nos registos de auditoria.
server_principal_sid principal.asset_id Usado para criar o ID do recurso principal, com o prefixo "server SID:".
session_id network.session_id Usado para o ID da sessão de rede, se estiver presente nos registos de auditoria.
sev security_result.severity Usado para determinar a gravidade do resultado de segurança.
Severity security_result.severity Usado para determinar a gravidade do resultado de segurança.
Source additional.fields Adicionado como um par de chave-valor a additional.fields com a chave "Source".
source principal.resource.attribute.labels Adicionado como um par de chave-valor a principal.resource.attribute.labels com a chave "source".
SourceModuleType observer.application Mapeamentos para a aplicação observadora.
SourceModuleName additional.fields Adicionado como um par de chave-valor a additional.fields com a chave "SourceModuleName".
source_module_name observer.labels Adicionado como um par de chave-valor a observer.labels com a chave "SourceModuleName".
source_module_type observer.application Mapeamentos para a aplicação observadora.
SPID network.session_id Mapeia para o ID da sessão de rede.
statement target.process.command_line Usado para a linha de comandos do processo de destino, se estiver presente nos registos de auditoria.
TextData security_result.description, metadata.description Usado para a descrição do resultado de segurança se não for um evento de início de sessão ou a descrição do evento se for.
time metadata.event_timestamp Analisado e usado como data/hora do evento.
Time metadata.event_timestamp Combinado com Date para criar a data/hora do evento.
transaction_id target.resource.attribute.labels Adicionado como um par de chave-valor a target.resource.attribute.labels com a chave "transaction_id".
UserID principal.user.windows_sid Usado para o SID do Windows do utilizador principal, se estiver presente e no formato correto.
user_id principal.user.userid Usado para o ID do utilizador principal, se estiver presente.
metadata.log_type metadata.log_type Codificado de forma rígida como "MICROSOFT_SQL".
metadata.vendor_name metadata.vendor_name Codificado de forma rígida para "Microsoft".
metadata.product_name metadata.product_name Codificado de forma rígida para "SQL Server".
metadata.event_type metadata.event_type Definido para vários valores consoante o conteúdo do registo, incluindo "USER_LOGIN", "USER_LOGOUT", "STATUS_STARTUP", "STATUS_SHUTDOWN", "NETWORK_HTTP", "GENERIC_EVENT" e "STATUS_UNCATEGORIZED" como predefinição.
extensions.auth.type extensions.auth.type Definido como "MACHINE" para eventos de início e fim de sessão.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.