Coletar registros do Microsoft SQL Server

Compatível com:

Neste documento, explicamos como ingerir registros do Microsoft SQL Server no Google Security Operations usando o Bindplane. O analisador processa registros do servidor Microsoft SQL estruturados (JSON, pares de chave-valor) e semiestruturados (syslog). Ele extrai campos, normaliza carimbos de data/hora, processa diferentes formatos de registro com base no conteúdo de SourceModuleType e Message (incluindo eventos de auditoria, login e banco de dados) e os mapeia para o UDM. Ele também realiza uma lógica de análise específica para registros de auditoria, tentativas de login e operações de banco de dados, enriquecendo os dados com mais contexto e informações de gravidade.Coleta registros de auditoria e de erros do SQL Server do registro de eventos do Windows usando um encaminhador de syslog (NXLog) e os envia ao agente do BindPlane para entrega ao Google SecOps.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Um host do Windows Server 2016 ou mais recente que executa o Microsoft SQL Server
  • Acesso administrativo para instalar e configurar o agente do BindPlane e o NXLog
  • Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.

Receber credenciais do Google SecOps para o agente do Bindplane

Para autenticar o agente do Bindplane no Google SecOps, escolha um dos seguintes métodos:

  • Novas implantações: use a API Chronicle (opção 1).
  • Implantações legadas: continue usando o arquivo de autenticação de ingestão (opção 2) até que a API Ingestion seja descontinuada em 20 de julho de 2027.
  1. Faça login no consoleGoogle Cloud e selecione o projeto Google Cloud vinculado à sua instância do Google SecOps.
  2. Acesse IAM e administrador > Contas de serviço.
  3. Clique em Criar conta de serviço.
  4. Informe os seguintes detalhes de configuração:
    • Nome da conta de serviço: insira um nome para a conta (por exemplo, bindplane-ingest).
    • Descrição da conta de serviço: insira uma descrição (por exemplo, Bindplane agent log ingestion).
  5. Clique em Criar e continuar.
  6. Na seção Conceder a essa conta de serviço acesso ao projeto, clique em Selecionar um papel e escolha Editor do Chronicle.
  7. Clique em Continuar e depois em Concluído.
  8. Clique na conta de serviço que você criou e acesse a guia Chaves.
  9. Clique em Adicionar chave > Criar nova chave.
  10. Selecione JSON e clique em Criar. O download do arquivo de chave é feito no seu computador.
  11. Salve o arquivo de chave como ingestion-auth.json no diretório do coletor do BindPlane (/opt/observiq-otel-collector/ingestion-auth.json no Linux ou C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json no Windows) ou atualize creds_file_path em config.yaml para corresponder ao caminho em que você o salvou.
  12. Acesse IAM e administrador > Configurações e copie o Número do projeto. Você vai precisar dele para a configuração do exportador.

Opção 2: baixar o arquivo de autenticação de ingestão (legado)

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Faça o download do arquivo de autenticação de ingestão.
  4. Salve o arquivo com segurança no sistema em que o agente do Bindplane será instalado.

Receber o ID de cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID de cliente na seção Detalhes da organização.

Instalar o agente do Bindplane

Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.

Instalação do Windows

  1. Abra o prompt de comando ou o PowerShell como administrador.
  2. Execute este comando:

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

Outros recursos de instalação

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

Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse o arquivo de configuração:
    • Localize o arquivo config.yaml. Normalmente, ele está no diretório `C:\Program Files\observIQ\bindplane-agent` no Windows.
    • Abra o arquivo usando um editor de texto (por exemplo, nano, vi ou Bloco de Notas).
  2. Edite o arquivo 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:
          protocol: https
          # Region of your instance, for example us, europe, asia-southeast1
          location: <LOCATION>
          # Project number of the Google Cloud project linked to the instance
          project: '<PROJECT_NUMBER>'
          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: chronicle.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
    
    • Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
    • Substitua <LOCATION> pela região da sua instância do Google SecOps (por exemplo, us, europe ou asia-southeast1). O exportador prefixa chronicle.googleapis.com com esse valor.
    • Substitua <PROJECT_NUMBER> pelo número do projeto em IAM e administrador > Configurações.
    • Substitua <customer_id> pelo ID do cliente real.
    • Atualize /path/to/ingestion-authentication-file.json para o caminho em que o arquivo de chave da conta de serviço (opção 1) foi salvo na seção Receber credenciais do Google SecOps para o agente do Bindplane.

Exportador da API de ingestão legada

  • Se você usar o arquivo de autenticação de ingestão da Opção 2, substitua o bloco exporters pelo seguinte. Defina creds_file_path como o caminho para o arquivo de autenticação de ingestão e, se a instância estiver fora dos EUA, substitua malachiteingestion-pa.googleapis.com pelo endpoint regional (por exemplo, europe-malachiteingestion-pa.googleapis.com).

    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:
    

Reinicie o agente do Bindplane para aplicar as mudanças:

  • Para reiniciar o agente do Bindplane em Windows, use o console Serviços ou insira o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Ativar a auditoria do SQL Server no log de eventos do Windows

É possível ativar a auditoria do SQL Server usando a GUI do SQL Server Management Studio (SSMS) ou os comandos T-SQL. Escolha a opção mais adequada ao seu ambiente.

Opção 1: ativar a auditoria do SQL Server pela GUI do SSMS

Criar auditoria de servidor na interface do SQL Server Management Studio

  1. Abra o SQL Server Management Studio (SSMS) e conecte-se à instância do SQL Server.
  2. No Pesquisador de objetos, expanda a instância do servidor.
  3. Abra a pasta Segurança.
  4. Clique com o botão direito do mouse em Auditorias e selecione Nova auditoria.
  5. Na caixa de diálogo Criar auditoria, forneça os seguintes detalhes de configuração:
    • Nome da auditoria: insira ChronicleAudit.
    • Atraso da fila (em milissegundos): insira 1000.
    • Em caso de falha no registro de auditoria: selecione Continuar.
    • Destino da auditoria: selecione Registro de aplicativo.
  6. Clique em OK para criar a auditoria.
  7. No Pesquisador de Objetos, clique com o botão direito do mouse no ChronicleAudit recém-criado e selecione Ativar auditoria.

Criar especificação de auditoria do servidor usando a GUI do SSMS

  1. No Pesquisador de objetos, expanda Segurança.
  2. Clique com o botão direito do mouse em Especificações de auditoria do servidor e selecione Nova especificação de auditoria do servidor.
  3. Na caixa de diálogo Criar especificação de auditoria do servidor, forneça os seguintes detalhes de configuração:
    • Nome: insira ChronicleAuditSpec.
    • Auditoria: selecione ChronicleAudit no menu.
  4. Na seçã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 depois de 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 Pesquisador de objetos, clique com o botão direito do mouse no ChronicleAuditSpec recém-criado e selecione Ativar especificação de auditoria do servidor.

Verificar a configuração de auditoria

  1. No Pesquisador de Objetos, expanda Segurança > Auditorias.
  2. Clique com o botão direito em ChronicleAudit e selecione Propriedades.
  3. Verifique se o Status aparece como Iniciado ou Ativado.
  4. Expanda Segurança > Especificações de auditoria do servidor.
  5. Clique com o botão direito 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: ativar a auditoria do SQL Server usando T-SQL

  1. Abra o SQL Server Management Studio (SSMS) e conecte-se à instância do SQL Server.
  2. Execute os seguintes comandos T-SQL para criar uma auditoria do servidor que grava no log de aplicativos 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
    

Essa configuração garante que os eventos de autenticação, as mudanças de permissão e as modificações de objetos sejam registrados no log de eventos do Windows.

Instalar e configurar o NXLog para encaminhar eventos ao Bindplane

  1. Faça o download do NXLog Community Edition em nxlog.co/downloads.
  2. Execute o instalador e conclua o assistente de instalação.
  3. Abra o arquivo 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 127.0.0.1 de Host pelo endereço IP do agente do Bindplane.
    • Verifique se o valor de Port corresponde à porta do receptor do Bindplane udplog configurada anteriormente.
  5. Salve o arquivo e reinicie o serviço NXLog:

    net stop nxlog && net start nxlog
    

Tabela de mapeamento de UDM

Campo de registro Mapeamento de UDM Lógica
AccountName principal.user.userid Usado para principal.user.userid se estiver presente em registros como "Iniciando o banco de dados" ou "O registro foi armazenado em backup".
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 host 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 Mapeia para a versão da plataforma do observador.
ApplicationName principal.application Mapeia para o aplicativo principal.
application_name target.application Mapeia para o aplicativo de destino.
client_address principal.ip Usado para o IP principal se for diferente do host e não for local ou um pipe nomeado.
client_ip principal.ip Corresponde ao IP principal.
computer_name about.hostname Corresponde ao nome do host "Sobre".
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 o carimbo de data/hora do evento.
database_name target.resource_ancestors.name Usado para o nome do ancestral do recurso de destino, se presente nos registros de auditoria.
durationMs network.session_duration.seconds Convertido de milissegundos para segundos e mapeado.
ecs.version metadata.product_version Corresponde à 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 do produto se outros campos não estiverem disponíveis, com o prefixo "EventID: ".
event.action Source Usado como fonte, se 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 carimbo de data/hora de ingestão.
event_time metadata.event_timestamp Analisado e usado como carimbo de data/hora do evento.
file_name principal.process.file.full_path Mapeia para o caminho completo do arquivo do processo principal.
file_path target.file.full_path Usado para o caminho completo do arquivo de destino, se encontrado nos registros de backup.
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 host principal ou do observador, se não for um IP. Também usado para o nome do host ou IP de destino, dependendo se é um IP ou não.
host.ip principal.ip Unido ao IP principal.
host.name host Usado como host, se presente.
Hostname principal.hostname, target.hostname Usado para o nome do host principal ou de destino, se houver.
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 Mapeia 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 letras 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 "Informativo", define security_result.severity como "INFORMATIONAL".
log.level security_result.severity_details Mapeia para detalhes de gravidade do resultado de segurança.
LoginName principal.user.userid Usado para o ID do usuário principal, se presente nos registros de chave-valor.
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 usuário principal, se estiver presente nos registros de login.
logstash.process.host intermediary.hostname Mapeia para o nome do host intermediário.
Message metadata.description, security_result.description Usado para descrição de eventos ou resultados de segurança, dependendo do tipo de registro.
msg metadata.description Usado para a descrição do evento, se houver.
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 presente nos registros de auditoria.
ObjectType target.resource.type Associa ao 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 Corresponde à 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 IP e mesclado em IP principal e IP do recurso principal.
properties.location principal.location.name Mapeia para o nome do local 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 Corresponde ao ID do registro 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 em um número inteiro sem sinal e mapeado.
properties.responseStatusCode network.http.response_code Convertido para 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 usuário 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 É mapeado para o ID de implantaçã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 user agent HTTP da rede.
properties.userId principal.user.userid Usado para o ID do usuário principal, se houver.
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 login.
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 ancestral do recurso de destino, se presente nos registros de auditoria.
security_result.description metadata.description Usado para descrição de eventos se não for um evento de auditoria.
security_result.severity security_result.severity Mapeia diretamente, se presente. Defina como "LOW" para registros de chave-valor, "INFORMATIONAL" para determinadas mensagens de erro e derivado dos campos level ou Severity.
security_result.severity_details security_result.severity_details Mapeia diretamente, se presente.
security_result.summary security_result.summary Mapeia diretamente, se houver. Defina como "Conexão feita usando a autenticação do Windows" ou motivos específicos de eventos de login ou "Registro de auditoria do SQL Server" para eventos de auditoria.
security_result_action security_result.action Mesclado com security_result.action. Definido como "ALLOW" para a maioria dos eventos e derivado de login_result para eventos de login.
server_instance_name target.hostname Usado para o nome do host de destino, se presente nos registros de auditoria.
server_principal_name principal.user.userid Usado para o ID do usuário principal, se presente nos registros de auditoria.
server_principal_sid principal.asset_id Usado para construir o código do recurso principal, com o prefixo "server SID:".
session_id network.session_id Usado para o ID da sessão de rede, se presente nos registros 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 Mapeia para o aplicativo observador.
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 Mapeia para o aplicativo observador.
SPID network.session_id É mapeado para o ID da sessão de rede.
statement target.process.command_line Usado para a linha de comando do processo de destino, se presente nos registros de auditoria.
TextData security_result.description, metadata.description Usado para descrição do resultado de segurança se não for um evento de login ou descrição do evento se for.
time metadata.event_timestamp Analisado e usado como carimbo de data/hora do evento.
Time metadata.event_timestamp Combinado com Date para criar o carimbo de 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 usuário principal, se presente e no formato correto.
user_id principal.user.userid Usado para o ID do usuário principal, se presente.
metadata.log_type metadata.log_type Fixado no código como "MICROSOFT_SQL".
metadata.vendor_name metadata.vendor_name Fixado no código como "Microsoft".
metadata.product_name metadata.product_name Codificado como "SQL Server".
metadata.event_type metadata.event_type Definido como vários valores dependendo do conteúdo do registro, incluindo "USER_LOGIN", "USER_LOGOUT", "STATUS_STARTUP", "STATUS_SHUTDOWN", "NETWORK_HTTP", "GENERIC_EVENT" e "STATUS_UNCATEGORIZED" como padrão.
extensions.auth.type extensions.auth.type Defina como "MACHINE" para eventos de login e logout.

Registro de alterações

Confira o registro de alterações deste analisador

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