Coletar registros do banco de dados Imperva

Compatível com:

Este documento explica como ingerir registros do banco de dados da Imperva no Google Security Operations usando o agente do Bindplane.

O analisador extrai campos de registros formatados do syslog do banco de dados Imperva. Ele usa grok e/ou kv para analisar a mensagem de registro em log e mapeia esses valores para o modelo de dados unificado (UDM). Ele também define valores padrão de metadados para a origem e o tipo do evento. A segurança de banco de dados da Imperva oferece recursos abrangentes de monitoramento, auditoria e proteção de atividades de banco de dados.

Antes de começar

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

  • Uma instância do Google SecOps
  • Um host do Windows 2016 ou posterior ou do Linux com systemd
  • 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.
  • Acesso privilegiado ao console de gerenciamento do Imperva SecureSphere

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 desativada 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 uma função 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: fazer o download do 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 seu 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
    

Instalação do Linux

  1. Abra um terminal com privilégios de root ou sudo.
  2. Execute este comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Outros recursos de instalação

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

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 fica no diretório /opt/observiq-otel-collector/ no Linux ou no diretório de instalação 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:514"
    
    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: <CUSTOMER_ID>
        endpoint: chronicle.googleapis.com
        # Add optional ingestion labels for better organization
        log_type: 'IMPERVA_DB'
        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 de cliente real.
    • Atualize /path/to/ingestion-authentication-file.json para o caminho do arquivo em que o arquivo de chave da conta de serviço (Opção 1) foi salvo na Etapa 1.

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: <CUSTOMER_ID>
        endpoint: malachiteingestion-pa.googleapis.com
        # Add optional ingestion labels for better organization
        log_type: 'IMPERVA_DB'
        raw_log_field: body
        ingestion_labels:
    

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

  1. Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:

    sudo systemctl restart observiq-otel-collector
    
  2. Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou digite o seguinte comando:

    net stop observiq-otel-collector && net start observiq-otel-collector
    

Configurar o encaminhamento do Syslog no banco de dados Imperva

  1. Faça login no console de gerenciamento do Imperva SecureSphere.
  2. Acesse Configuração > Conjuntos de ações.
  3. Clique em Adicionar para criar ou editar um conjunto de ações.
  4. Clique em Adicionar ação e forneça os seguintes detalhes de configuração:
    • Nome: insira um nome descritivo, por exemplo, Google SecOps Syslog.
    • Tipo de ação: selecione Syslog do GW.
    • Host: insira o endereço IP do agente do Bindplane.
    • Porta: digite o número da porta do agente Bindplane (padrão 514).
    • Protocolo: selecione UDP ou TCP, dependendo da configuração do agente do BindPlane.
    • Nível de registro do Syslog: selecione DEBUG para um registro abrangente.
    • Recurso do Syslog: selecione LOCAL0 ou o recurso apropriado.
    • Interface de ação: selecione Registro do gateway - Ocorrência de segurança - Registro do sistema (syslog) - Formato JSON (estendido) para o formato SYSLOG+JSON ou Registro do gateway - Ocorrência de segurança - Registro do sistema (syslog) para o formato SYSLOG padrão.
  5. Salve a configuração da ação.
  6. Acesse Políticas > Políticas de segurança ou Políticas > Políticas de auditoria de banco de dados.
  7. Edite as políticas relevantes e adicione o conjunto de ações que contém sua ação de syslog para garantir que os eventos sejam encaminhados ao Google SecOps.

Tabela de mapeamento de UDM

Campo de registro mapeamento de UDM Lógica
acct principal.user.userid Se acct for "admin", mapeie para target.user.userid. Caso contrário, mapeie para principal.user.userid. Remova as aspas e os espaços de acct antes de fazer o mapeamento.
ação security_result.action_details Valor do campo action do registro bruto
alertSev security_result.severity Se alertSev for "Informativo", mapeie como "INFORMATIONAL". Caso contrário, mapeie como maiúsculas de alertSev.
aplicativo principal.application Se application for "pam_unix(sudo:session)" ou description contiver "pam_unix", mapeie como "pam_unix". Se message contiver "run-parts", mapeie como "run-parts". Se message contiver "audispd", mapeie como "audispd". Se message contiver "Auditoria do FSS", mapeie como "Auditoria do FSS". Caso contrário, mapeie como campo application do registro bruto
application-name target.application Valor do campo application-name do registro bruto
audit-policy security_result.category_details Valor do campo audit-policy do registro bruto
bind-variables additional.fields.bind_variables_label.value.string_value Valor do campo bind-variables do registro bruto
categoria security_result.category_details Valor do campo category do registro bruto
COMMAND target.process.command_line Se exe não estiver vazio, mapeie como o campo exe do registro bruto. Caso contrário, mapeie como campo COMMAND do registro bruto
createTime Não mapeado
db-schema-pair additional.fields.DB Name_{index}.value.string_value, additional.fields.Schema Name_{index}.value.string_value Para cada objeto db-schema-pair no registro bruto, extraia os campos db-name e schema-name e mapeie-os para DB Name_{index} e Schema Name_{index}, respectivamente, no UDM, em que index é o índice do objeto na matriz.
db-user principal.user.userid Se db-user não estiver vazio, mapeie como o campo db-user do registro bruto. Caso contrário, se os-user não estiver vazio e db-user estiver vazio, mapeie como o campo os-user do registro bruto.
dbName target.resource.name Valor do campo dbName do registro bruto
dest-ip target.ip, target.asset.ip Valor do campo dest-ip do registro bruto
dest-port target.port Valor do campo dest-port do registro bruto
descrição metadata.description Se description contiver "user:", extraia o userid de description e mapeie para userid. Se userid não estiver vazio e description contiver "Invalid" ou "invalid", substitua "Invalid user" por "Invalid". Se application for "sshd", remova " de" e " por" de description. Caso contrário, mapeie como campo description do registro bruto
dst target.ip, target.asset.ip Valor do campo dst do registro bruto
dstIP target.ip, target.asset.ip Valor do campo dstIP do registro bruto
dstPort target.port Valor do campo dstPort do registro bruto
event-type metadata.product_event_type Valor do campo event-type do registro bruto
eventType metadata.product_event_type, metadata.event_type Se eventType não estiver vazio e srcIP e dstIP não estiverem vazios, mapeie eventType para metadata.product_event_type e "NETWORK_CONNECTION" para metadata.event_type.
evntDesc security_result.description Valor do campo evntDesc do registro bruto
exe target.process.command_line Valor do campo exe do registro bruto
de network.email.from Remova "<" e ">" de from e mapeie para network.email.from
grupo target.user.group_identifiers Valor do campo group do registro bruto
gw-ip intermediary.ip, intermediary.asset.ip Valor do campo gw-ip do registro bruto
host target.hostname, target.asset.hostname Valor do campo host do registro bruto
host-name principal.hostname, principal.asset.hostname Valor do campo host-name do registro bruto
nome do host principal.hostname, principal.asset.hostname Valor do campo hostname do registro bruto
ip target.ip, target.asset.ip Valor do campo ip do registro bruto
mx-ip intermediary.ip, intermediary.asset.ip Valor do campo mx-ip do registro bruto
objects-list additional.fields.Object_{index}.value.string_value Para cada objeto objects-list no registro bruto, extraia o objeto e mapeie-o para Object_{index} no UDM, em que index é o índice do objeto na matriz.
Operação about.labels.Operation.value Valor do campo Operation do registro bruto
Operation type about.labels.Operation Type.value Valor do campo Operation type do registro bruto
os-user principal.user.userid, additional.fields.OS User.value.string_value Se os-user não estiver vazio e db-user estiver vazio, mapeie como campo os-user do registro bruto. Caso contrário, mapeie como campo OS User do registro bruto
Consulta analisada target.process.command_line Valor do campo Parsed Query do registro bruto
parsed-query additional.fields.Parsed Query.value.string_value Valor do campo parsed-query do registro bruto
pid target.process.pid Valor do campo pid do registro bruto
policy-id security_result.detection_fields.Policy_ID_{index}.value Para cada objeto policy-id no registro bruto, extraia a política e mapeie-a para Policy_ID_{index} no UDM, em que index é o índice do objeto na matriz.
policyName security_result.detection_fields.policyName_label.value Valor do campo policyName do registro bruto
porta target.port Valor do campo port do registro bruto
Privilegiado about.labels.Privileged.value Se Privileged for verdadeiro, mapeie como "True". Caso contrário, mapeie como "False".
proto network.ip_protocol Valor do campo proto do registro bruto
protocolo network.ip_protocol Se protocol for "TCP" ou "UDP", mapeie como o campo protocol do registro bruto.
PWD target.file.full_path Valor do campo PWD do registro bruto
Raw Data target.resource.attribute.labels.raw_Data.value Valor do campo Raw Data do registro bruto
raw-query additional.fields.Raw Query.value.string_value Valor do campo raw-query do registro bruto
ruleName security_result.rule_name Valor do campo ruleName do registro bruto
server-group additional.fields.serve_group_label.value.string_value Valor do campo server-group do registro bruto
service-name additional.fields.service_name_label.value.string_value Valor do campo service-name do registro bruto
Service Type additional.fields.Service Type.value.string_value Valor do campo Service Type do registro bruto
tamanho network.received_bytes Valor do campo size do registro bruto
Stored Proc about.labels.Stored_Proc.value Se Stored Proc for verdadeiro, mapeie como "True". Caso contrário, mapeie como "False".
Table Group target.group.group_display_name Valor do campo Table Group do registro bruto
timestamp metadata.event_timestamp Valor do campo timestamp do registro bruto
para network.email.to Remova "<" e ">" de to e mapeie para network.email.to.
USUÁRIO principal.user.userid, target.user.userid Se USER não estiver vazio e USER for "admin", mapeie como o campo USER do registro bruto para target.user.userid. Caso contrário, se USER não estiver vazio, mapeie como o campo USER do registro bruto para principal.user.userid.
autenticado pelo usuário security_result.detection_fields.user_authenticated.value Valor do campo user-authenticated do registro bruto
user-group additional.fields.user_group_label.value.string_value Valor do campo user-group do registro bruto
nome de usuário principal.user.user_display_name Valor do campo username do registro bruto
usrName principal.user.userid Valor do campo usrName do registro bruto
extensions.auth.mechanism Codificado como "USERNAME_PASSWORD" se description contiver "authentication failure", "check pass; user unknown", "Invalid user" ou "invalid user" ou se error não estiver vazio
extensions.auth.type Codificado como "AUTHTYPE_UNSPECIFIED" se has_principal for "true", has_target for "true" e event-type for "Login"
metadata.event_type Fixado no código como "PROCESS_OPEN" se PWD não estiver vazio. Codificado como "PROCESS_OPEN" se message contiver "starting" ou application for "pman", "CROND" ou "run-parts" e event_type estiver vazio. Codificado como "NETWORK_CONNECTION" se description for "Syslog connection established", "Syslog connection broken" ou "Syslog connection failed". Codificado como "EMAIL_UNCATEGORIZED" se application for "postfix/qmgr", "postfix/local" ou "postfix/pickup". Fixado no código como "EMAIL_TRANSACTION" se application for "postfix/local" ou "postfix/pickup" e status for "sent (delivered to mailbox)". Codificado como "NETWORK_HTTP" se application for "sshd" e description não contiver "check pass; user unknown", description "authentication failure" ou description "invalid". Codificado como "USER_LOGIN" se description contiver "authentication failure", "check pass; user unknown", "Invalid user" ou "invalid user" ou se error não estiver vazio. Codificado como "FILE_SYNC" se file_path não estiver vazio. Codificado como "PROCESS_UNCATEGORIZED" se message contiver "reconfigure" e application for "pman". Codificado como "PROCESS_TERMINATION" se message contiver "exit code 1" e application for "pman". Codificado como "NETWORK_CONNECTION" se eventType, srcIP e dstIP não estiverem vazios. Codificado como "USER_LOGIN" se has_principal for "true", has_target for "true" e event-type for "Login". Fixado no código como "NETWORK_CONNECTION" se has_principal for "true", has_target for "true" e protocol não estiver vazio. Fixado no código como "STATUS_UPDATE" se has_principal for "true". Codificado como "GENERIC_EVENT" se event_type estiver vazio ou for "GENERIC_EVENT"
metadata.log_type Fixado no código como "IMPERVA_DB".
metadata.product_name Fixado no código como "IMPERVA DB".
metadata.vendor_name Fixado no código como "IMPERVA DB"
security_result.action Codificado como "ALLOW" se description não contiver "authentication failure", "check pass; user unknown", "Invalid user" ou "invalid user" e error estiver vazio. Codificado como "BLOCK" se description contiver "authentication failure" ou "check pass; user unknown" ou "Invalid user" ou "invalid user" ou se error não estiver vazio
security_result.rule_id Se description contiver "alert_score" ou "new_alert_score", extraia o ruleid de description e mapeie-o para security_result.rule_id
version metadata.product_version Mapeado do registro de mudanças
source-ip principal.ip Mapeado do registro de alterações
source-port principal.port Mapeado do registro de alterações
server-group", "service-name", "user-group", "raw-query", "parsed-query", "bind-variables", "sql-error", "db-schema-pair.db-name", "db-schema-pair.schema-name", and "objects-list additional.fields Mapeado do registro de alterações
source-application principal.application Mapeado do registro de alterações
event-id metadata.product_log_id Mapeado do registro de alterações
application-user principal.user.user_display_name Mapeado do registro de alterações
mx-ip", "gw-ip intermediary.ip Mapeado do registro de alterações
policy-id" and "user-authenticated security_result.detection_fields Mapeado do registro de alterações
srcPort principal.port Mapeado do registro de alterações
srcIP principal.ip Mapeado do registro de alterações
event_name metadata.product_event_type Mapeado do registro de mudanças

Registro de alterações

Ver o registro de alterações deste analisador

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