Coletar registros do banco de dados da Imperva

Compatível com:

Este documento explica como ingerir registros do banco de dados do Imperva no Google Security Operations usando o Bindplane. Primeiro, o analisador tenta extrair campos de vários formatos de registro estruturados, como CEF, LEEF e JSON. Se esses formatos não forem encontrados, ele usará padrões grok para extrair campos de mensagens syslog não estruturadas, mapeando os dados extraídos para um modelo de dados unificado (UDM). A segurança de banco de dados da Imperva oferece recursos abrangentes de monitoramento, auditoria e proteção de atividades do banco de dados.

Antes de começar

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

  • Uma instância do Google SecOps
  • Windows 2016 ou mais recente ou um host 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 Bindplane.
  • Acesso privilegiado ao console de gerenciamento do Imperva SecureSphere

Receber o arquivo de autenticação de ingestão do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o 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 do cliente na seção Detalhes da organização.

Instalar o agente do Bindplane

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

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

  1. Acesse o arquivo de configuração:

    1. Localize o arquivo config.yaml. Normalmente, ele fica no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    2. 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:
        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:
    
    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 <customer_id> pelo ID do cliente real.
    • Atualize /path/to/ingestion-authentication-file.json para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.

Reinicie o agente do Bindplane para aplicar as mudanças

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

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurar o encaminhamento do Syslog no banco de dados da 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: insira o número da porta do agente do 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.
    • Facilidade do Syslog: selecione LOCAL0 ou a facilidade apropriada.
    • Interface de ação: selecione Registro do gateway - Evento de segurança - Registro do sistema (syslog) - Formato JSON (estendido) para o formato SYSLOG+JSON ou Registro do gateway - Evento 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 do UDM

Campo de registro Mapeamento do 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 do mapeamento.
ação security_result.action_details Valor do campo action do registro bruto
alertSev security_result.severity Se alertSev for "Informativo", mapeie como "INFORMATIVO". Caso contrário, mapeie como maiúscula 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 "FSS audit", mapeie como "FSS audit". Caso contrário, mapeie como o 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 o 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, na 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 o 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} na 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 o campo os-user do registro bruto. Caso contrário, mapeie como o 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} na 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
a 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" ou "check pass; user unknown" ou "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". Codificado 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", "authentication failure" ou "invalid".descriptiondescription Codificado como "USER_LOGIN" se description contiver "authentication failure" ou "check pass; user unknown" ou "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". Codificado 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" ou "check pass; user unknown" ou "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 para security_result.rule_id.

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