Recolha registos da base de dados do Imperva
Este documento explica como carregar registos da base de dados do Imperva para o Google Security Operations através do Bindplane. O analisador tenta primeiro extrair campos de vários formatos de registos estruturados, como CEF, LEEF e JSON. Se esses formatos não forem encontrados, usa padrões grok para extrair campos de mensagens syslog não estruturadas, mapeando, em última análise, os dados extraídos para um modelo de dados unificado (UDM). A segurança de bases de dados da Imperva oferece capacidades abrangentes de monitorização, auditoria e proteção da atividade da base de dados.
Antes de começar
Certifique-se de que cumpre os seguintes pré-requisitos:
- Uma instância do Google SecOps
- Windows 2016 ou posterior, ou um anfitrião Linux com
systemd
- 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
- Acesso privilegiado à consola de gestão do Imperva SecureSphere
Obtenha o ficheiro de autenticação de carregamento do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- 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
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- Copie e guarde o ID do cliente da secção Detalhes da organização.
Instale o agente do Bindplane
Instalação do Windows
- Abra a Linha de comandos ou o PowerShell como administrador.
Execute o seguinte comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalação do Linux
- Abra um terminal com privilégios de raiz ou sudo.
Execute o seguinte comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Recursos de instalação adicionais
- Para ver opções de instalação adicionais, consulte este guia de instalação.
Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps
Aceda ao ficheiro de configuração:
- Localize o ficheiro
config.yaml
. Normalmente, encontra-se no diretório/etc/bindplane-agent/
no Linux ou no diretório de instalação no Windows. - Abra o ficheiro com um editor de texto (por exemplo,
nano
,vi
ou Bloco de notas).
- Localize o ficheiro
Edite o ficheiro
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 de cliente real. - Atualize
/path/to/ingestion-authentication-file.json
para o caminho onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps.
Reinicie o agente do Bindplane para aplicar as alterações
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, pode usar a consola Serviços ou introduzir o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configure o encaminhamento de Syslog na base de dados do Imperva
- Inicie sessão na Imperva SecureSphere Management Console.
- Aceda a Configuração > Conjuntos de ações.
- Clique em Adicionar para criar um novo conjunto de ações ou editar um existente.
- Clique em Adicionar ação e faculte os seguintes detalhes de configuração:
- Nome: introduza um nome descritivo (por exemplo,
Google SecOps Syslog
). - Tipo de ação: selecione GW Syslog.
- Anfitrião: introduza o endereço IP do agente BindPlane.
- Porta: introduza o número da porta do agente BindPlane (predefinição:
514
). - Protocolo: selecione UDP ou TCP, consoante a configuração do agente BindPlane.
- Nível do registo Syslog: selecione DEBUG para um registo abrangente.
- Syslog Facility: selecione LOCAL0 ou a funcionalidade adequada.
- Interface de ação: selecione Registo de gateway – Evento de segurança – Registo do sistema (syslog) – Formato JSON (extenso) para o formato SYSLOG+JSON ou Registo de gateway – Evento de segurança – Registo do sistema (syslog) para o formato SYSLOG padrão.
- Nome: introduza um nome descritivo (por exemplo,
- Guarde a configuração da ação.
- Aceda a Políticas > Políticas de segurança ou Políticas > Políticas de auditoria de bases de dados.
- Edite as políticas relevantes e adicione o conjunto de ações que contém a sua ação de syslog para garantir que os eventos são encaminhados para o Google SecOps.
Tabela de mapeamento da UDM
Campo de registo | 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 registo não processado |
alertSev | security_result.severity | Se alertSev for "Informative", mapeie como "INFORMATIONAL". Caso contrário, mapeie como a versão em maiúsculas de alertSev |
aplicação | 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 campo application do registo não processado |
application-name | target.application | Valor do campo application-name do registo não processado |
audit-policy | security_result.category_details | Valor do campo audit-policy do registo não processado |
bind-variables | additional.fields.bind_variables_label.value.string_value | Valor do campo bind-variables do registo não processado |
categoria | security_result.category_details | Valor do campo category do registo não processado |
COMMAND | target.process.command_line | Se exe não estiver vazio, mapeie-o como o campo exe do registo não processado. Caso contrário, mapeie como campo COMMAND do registo não processado |
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 registo não processado, extraia os campos db-name e schema-name e mapeie-os para DB Name_{index} e Schema Name_{index} , respetivamente, no UDM, onde index é o índice do objeto na matriz. |
db-user | principal.user.userid | Se db-user não estiver vazio, mapeie-o como o campo db-user do registo não processado. Caso contrário, se os-user não estiver vazio e db-user estiver vazio, mapeie como o campo os-user do registo não processado |
dbName | target.resource.name | Valor do campo dbName do registo não processado |
dest-ip | target.ip, target.asset.ip | Valor do campo dest-ip do registo não processado |
dest-port | target.port | Valor do campo dest-port do registo não processado |
descrição | metadata.description | Se description contiver "user:", extraia o ID do utilizador de description e mapeie-o para userid . Se userid não estiver vazio e description contiver "Invalid" ou "invalid", substitua "Invalid user" por "Invalid". Se application for "sshd", remova " from" e " by" de description . Caso contrário, mapeie como campo description do registo não processado |
dst | target.ip, target.asset.ip | Valor do campo dst do registo não processado |
dstIP | target.ip, target.asset.ip | Valor do campo dstIP do registo não processado |
dstPort | target.port | Valor do campo dstPort do registo não processado |
event-type | metadata.product_event_type | Valor do campo event-type do registo não processado |
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 mapeie "NETWORK_CONNECTION" para metadata.event_type |
evntDesc | security_result.description | Valor do campo evntDesc do registo não processado |
exe | target.process.command_line | Valor do campo exe do registo não processado |
de | network.email.from | Remova "<" e ">" de from e mapeie-o para network.email.from |
grupo | target.user.group_identifiers | Valor do campo group do registo não processado |
gw-ip | intermediary.ip, intermediary.asset.ip | Valor do campo gw-ip do registo não processado |
anfitrião | target.hostname, target.asset.hostname | Valor do campo host do registo não processado |
host-name | principal.hostname, principal.asset.hostname | Valor do campo host-name do registo não processado |
hostname | principal.hostname, principal.asset.hostname | Valor do campo hostname do registo não processado |
ip | target.ip, target.asset.ip | Valor do campo ip do registo não processado |
mx-ip | intermediary.ip, intermediary.asset.ip | Valor do campo mx-ip do registo não processado |
objects-list | additional.fields.Object_{index} .value.string_value |
Para cada objeto objects-list no registo não processado, extraia o objeto e mapeie-o para Object_{index} no UDM, onde index é o índice do objeto na matriz. |
Operação | about.labels.Operation.value | Valor do campo Operation do registo não processado |
Operation type |
about.labels.Operation Type .value |
Valor do campo Operation type do registo não processado |
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 registo não processado. Caso contrário, mapeie como campo OS User do registo não processado |
Consulta analisada | target.process.command_line | Valor do campo Parsed Query do registo não processado |
parsed-query | additional.fields.Parsed Query .value.string_value |
Valor do campo parsed-query do registo não processado |
pid | target.process.pid | Valor do campo pid do registo não processado |
policy-id | security_result.detection_fields.Policy_ID_{index} .value |
Para cada objeto policy-id no registo não processado, extraia a política e mapeie-a para Policy_ID_{index} no UDM, onde index é o índice do objeto na matriz. |
policyName | security_result.detection_fields.policyName_label.value | Valor do campo policyName do registo não processado |
porta | target.port | Valor do campo port do registo não processado |
Privilegiado | about.labels.Privileged.value | Se Privileged for verdadeiro, mapeie como "Verdadeiro", caso contrário, mapeie como "Falso" |
proto | network.ip_protocol | Valor do campo proto do registo não processado |
protocolo | network.ip_protocol | Se protocol for "TCP" ou "UDP", mapeie como campo protocol do registo não processado |
PWD | target.file.full_path | Valor do campo PWD do registo não processado |
Raw Data |
target.resource.attribute.labels.raw_Data.value | Valor do campo Raw Data do registo não processado |
raw-query | additional.fields.Raw Query .value.string_value |
Valor do campo raw-query do registo não processado |
ruleName | security_result.rule_name | Valor do campo ruleName do registo não processado |
server-group | additional.fields.serve_group_label.value.string_value | Valor do campo server-group do registo não processado |
service-name | additional.fields.service_name_label.value.string_value | Valor do campo service-name do registo não processado |
Service Type |
additional.fields.Service Type .value.string_value |
Valor do campo Service Type do registo não processado |
tamanho | network.received_bytes | Valor do campo size do registo não processado |
Stored Proc |
about.labels.Stored_Proc.value | Se Stored Proc for verdadeiro, mapeie como "Verdadeiro", caso contrário, mapeie como "Falso" |
Table Group |
target.group.group_display_name | Valor do campo Table Group do registo não processado |
timestamp | metadata.event_timestamp | Valor do campo timestamp do registo não processado |
a | network.email.to | Remova "<" e ">" de to e mapeie-o para network.email.to |
UTILIZADOR | principal.user.userid, target.user.userid | Se USER não estiver vazio e USER for "admin", mapeie como o campo USER do registo não processado para target.user.userid . Caso contrário, se USER não estiver vazio, mapeie-o como o campo USER do registo não processado para principal.user.userid |
autenticado pelo utilizador | security_result.detection_fields.user_authenticated.value | Valor do campo user-authenticated do registo não processado |
grupo de utilizadores | additional.fields.user_group_label.value.string_value | Valor do campo user-group do registo não processado |
nome de utilizador | principal.user.user_display_name | Valor do campo username do registo não processado |
usrName | principal.user.userid | Valor do campo usrName do registo não processado |
extensions.auth.mechanism | Codificado de forma rígida como "USERNAME_PASSWORD" se description contiver "authentication failure" ou "check pass; user unknown" ou "Invalid user" ou "invalid user" ou 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 | Codificado de forma rígida como "PROCESS_OPEN" se PWD não estiver vazio. Codificado como "PROCESS_OPEN" se message contiver "starting" ou application for "pman" ou "CROND" ou "run-parts" e event_type estiver vazio. Codificado como "NETWORK_CONNECTION" se description for "Syslog connection established" (Ligação Syslog estabelecida), "Syslog connection broken" (Ligação Syslog interrompida) ou "Syslog connection failed" (Ligação Syslog falhou). Codificado de forma rígida 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" e description não contiver "authentication failure" e description não contiver "invalid". Codificado de forma rígida como "USER_LOGIN" se description contiver "authentication failure" ou "check pass; user unknown" ou "Invalid user" ou "invalid user" ou error não estiver vazio. Codificado como "FILE_SYNC" se file_path não estiver vazio. Codificado de forma rígida como "PROCESS_UNCATEGORIZED" se message contiver "reconfigure" e application for "pman". Codificado de forma rígida como "PROCESS_TERMINATION" se message contiver "exit code 1" e application for "pman". Codificado como "NETWORK_CONNECTION" se eventType não estiver vazio e 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. Codificado como "STATUS_UPDATE" se has_principal for "true". Codificado de forma rígida como "GENERIC_EVENT" se event_type estiver vazio ou for "GENERIC_EVENT" |
|
metadata.log_type | Codificado como "IMPERVA_DB" | |
metadata.product_name | Codificado como "IMPERVA DB" | |
metadata.vendor_name | Codificado 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 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 |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.