Coletar registros do Secure Access Service Edge (SASE) da Versa Networks
Neste documento, descrevemos como coletar os registros do Secure Access Service Edge (SASE) da Versa Networks. O analisador extrai pares de chave-valor após um filtro grok inicial. Em seguida, ele mapeia esses valores para o Modelo Unificado de Dados (UDM, na sigla em inglês), processando vários formatos de registro, como eventos de firewall, registros de aplicativos e registros de alarmes, e realiza conversões e enriquecimentos para campos específicos, como protocolo IP e pontuação de risco.
Antes de começar
- Verifique se você tem uma instância do Google Security Operations.
- Use o Windows 2016 ou uma versão 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.
- Verifique se você tem acesso privilegiado ao Versa SASE.
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Baixe o arquivo de autenticação de ingestão. Salve o arquivo com segurança no sistema em que o agente do Bindplane será instalado.
Receber o ID do cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do BindPlane
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este 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 root ou sudo.
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 este guia de instalação.
Configurar o agente do Bindplane para ingerir Syslog e enviar ao Google SecOps
Acesse o arquivo de configuração:
- 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. - Abra o arquivo usando um editor de texto (por exemplo,
nano,viou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
config.yamlda seguinte forma:receivers: tcplog: # Replace the port and IP address as required listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: `/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 ingestion_labels: log_type: SYSLOG namespace: versa_networks_sase raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labelsSubstitua 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.jsonpara 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
No Linux, para reiniciar o agente do Bindplane, execute o seguinte comando:
sudo systemctl restart bindplane-agentNo Windows, para reiniciar o Bindplane Agent, use o console Serviços ou insira o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o SASE da Versa Networks
Os administradores precisam configurar coletores remotos em cada nó do Versa Analytics para encaminhar registros a sistemas de terceiros.
Para configurar os nós de análise do Versa, faça o seguinte:
- Ativar o encaminhamento de registros
- Ativar o registro do ID da sessão
Ativar o encaminhamento de registros
- Faça login no servidor de análise do Versa.
- Acesse a CLI executando o comando
cli. - Mude para o Modo de configuração executando o comando
configuree insiraload merge terminal. Copie e cole os comandos a seguir para configurar o encaminhamento de registros:
- Substitua
<collector_ip>e<collector_port>pelo endereço IP e pela porta do seu coletor syslog (Bindplane).
set system analytics log-collector-exporter destination-address <collector_ip> set system analytics log-collector-exporter destination-port <collector_port> set system analytics log-collector-exporter transport tcp set system analytics log-collector-exporter log-types firewall-log set system analytics log-collector-exporter log-types threat-log commit- Substitua
Salve a configuração:
save
Ativar o registro do ID da sessão
Para registrar informações relacionadas ao IP, ative o registro do ID da sessão.
- Faça login no Versa Director.
- Mude para a Visualização do diretor.
- Acesse Configuração > Dispositivos > Inquilino > Dispositivo para acessar a Visualização de dispositivos.
- Selecione Configuração > Outros > Sistema > Configuração > Configuração.
- No painel Parâmetros, clique em Editar.
- Na janela Editar parâmetros, selecione LEF.
Na seção Firewall, marque a caixa de seleção Incluir geração de registros de ID da sessão.
Clique em OK.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
accCkt |
additional.fields[].key: "accCkt"additional.fields[].value.string_value: accCkt |
Valor extraído diretamente do campo accCkt. |
accCktId |
additional.fields[].key: "accCktId"additional.fields[].value.string_value: accCktId |
Valor extraído diretamente do campo accCktId. |
accCktName |
additional.fields[].key: "accCktName"additional.fields[].value.string_value: accCktName |
Valor extraído diretamente do campo accCktName. |
accessType |
additional.fields[].key: "accessType"additional.fields[].value.string_value: accessType |
Valor extraído diretamente do campo accessType. |
action |
security_result.action: action |
Se action, type, idpAction, avAction ou urlAction forem "permitir", então ALLOW. Se action, type, idpAction, avAction ou urlAction forem "reject", "drop", "block", "deny", então BLOCK. Se idpAction for qualquer outra coisa, UNKNOWN_ACTION. |
alarmCause |
security_result.detection_fields[].key: "alarmCause"security_result.detection_fields[].value: alarmCause |
Valor extraído diretamente do campo alarmCause. |
alarmClass |
security_result.detection_fields[].key: "alarmClass"security_result.detection_fields[].value: alarmClass |
Valor extraído diretamente do campo alarmClass. |
alarmClearable |
security_result.detection_fields[].key: "alarmClearable"security_result.detection_fields[].value: alarmClearable |
Valor extraído diretamente do campo alarmClearable. |
alarmEventType |
metadata.product_event_type: alarmEventType |
Valor extraído diretamente do campo alarmEventType. |
alarmKey |
security_result.detection_fields[].key: "alarmKey"security_result.detection_fields[].value: alarmKey |
Valor extraído diretamente do campo alarmKey. |
alarmKind |
security_result.detection_fields[].key: "alarmKind"security_result.detection_fields[].value: alarmKind |
Valor extraído diretamente do campo alarmKind. |
alarmOwner |
security_result.detection_fields[].key: "alarmOwner"security_result.detection_fields[].value: alarmOwner |
Valor extraído diretamente do campo alarmOwner. |
alarmSeqNo |
security_result.detection_fields[].key: "alarmSeqNo"security_result.detection_fields[].value: alarmSeqNo |
Valor extraído diretamente do campo alarmSeqNo. |
alarmSeverity |
security_result.severity_details: alarmSeverity |
Valor extraído diretamente do campo alarmSeverity. |
alarmText |
security_result.summary: alarmText |
Valor extraído diretamente do campo alarmText, com aspas duplas removidas. |
alarmType |
security_result.description: alarmType |
Valor extraído diretamente do campo alarmType. |
appFamily |
metadata.product_event_type: appFamilysecurity_result.detection_fields[].key: "appFamily"security_result.detection_fields[].value: appFamily |
Valor extraído diretamente do campo appFamily. |
appId |
security_result.detection_fields[].key: "Application ID"security_result.detection_fields[].value: appId |
Valor extraído diretamente do campo appId. |
appIdStr |
security_result.detection_fields[].key: "appIdStr"security_result.detection_fields[].value: appIdStr |
Valor extraído diretamente do campo appIdStr. |
applianceName |
principal.hostname: applianceName |
Valor extraído diretamente do campo applianceName, siteName ou site. |
appProductivity |
security_result.detection_fields[].key: "appProductivity"security_result.detection_fields[].value: appProductivity |
Valor extraído diretamente do campo appProductivity. |
appRisk |
security_result.severity_details: appRisk |
Valor extraído diretamente do campo appRisk. |
appSubFamily |
security_result.detection_fields[].key: "appSubFamily"security_result.detection_fields[].value: appSubFamily |
Valor extraído diretamente do campo appSubFamily. |
avAccuracy |
additional.fields[].key: "avAccuracy"additional.fields[].value.string_value: avAccuracy |
Valor extraído diretamente do campo avAccuracy. |
avAction |
security_result.action: avAction |
Consulte action para ver a lógica. |
avMalwareName |
security_result.threat_name: avMalwareName |
Valor extraído diretamente do campo avMalwareName. |
avMalwareType |
security_result.category_details: avMalwareType |
Valor extraído diretamente do campo avMalwareType. |
classMsg |
security_result.description: classMsg |
Valor extraído diretamente do campo classMsg, com aspas duplas removidas. |
clientIPv4Address |
target.ip: clientIPv4Address |
Valor extraído diretamente do campo clientIPv4Address. |
destIp |
target.ip: destIpdestinationIPv4Address: destIp |
Valor extraído diretamente do campo destIp. |
destinationIPv4Address |
target.ip: destinationIPv4Address |
Valor extraído diretamente do campo destinationIPv4Address ou derivado do campo networkPrefix. |
destinationIPv6Address |
target.ip: destinationIPv6Address |
Valor extraído diretamente do campo destinationIPv6Address. |
destinationPort |
target.port: destinationPort |
Valor extraído diretamente do campo destinationPort e convertido em número inteiro. |
destinationTransportPort |
target.port: destinationTransportPort |
Valor extraído diretamente do campo destinationTransportPort e convertido em número inteiro. |
deviceKey |
about.resource.attribute.labels[].key: "deviceKey"about.resource.attribute.labels[].value: deviceKey |
Valor extraído diretamente do campo deviceKey, se não for "Desconhecido". |
deviceName |
about.resource.attribute.labels[].key: "deviceName"about.resource.attribute.labels[].value: deviceName |
Valor extraído diretamente do campo deviceName, se não for "Desconhecido". |
duration |
network.session_duration.seconds: duration |
Valor extraído diretamente do campo duration e convertido em número inteiro. |
egressInterfaceName |
additional.fields[].key: "egressInterfaceName"additional.fields[].value.string_value: egressInterfaceName |
Valor extraído diretamente do campo egressInterfaceName. |
event.type |
metadata.event_type: event.type |
Se applianceName (ou sourceIPv4Address ou user ou sourceIPv6Address) e destinationIPv4Address (ou remoteSite ou destinationIPv6Address ou clientIPv4Address ou hostname) estiverem presentes, NETWORK_CONNECTION. Caso contrário, STATUS_UPDATE. Se applianceName estiver vazio, GENERIC_EVENT. |
eventType |
principal.resource.attribute.labels[].key: "eventType"principal.resource.attribute.labels[].value: eventType |
Valor extraído diretamente do campo eventType. |
family |
security_result.detection_fields[].key: "family"security_result.detection_fields[].value: family |
Valor extraído diretamente do campo family. |
fc |
security_result.detection_fields[].key: "ForwardingClass"security_result.detection_fields[].value: fc |
Valor extraído diretamente do campo fc. |
fileTransDir |
additional.fields[].key: "fileTransDir"additional.fields[].value.string_value: fileTransDir |
Valor extraído diretamente do campo fileTransDir. |
filename |
target.file.names: filename |
Valor extraído diretamente do campo filename. |
flowCookie |
metadata.collected_timestamp: flowCookie |
Valor extraído diretamente do campo flowCookie e convertido em carimbo de data/hora usando o formato UNIX. |
flowId |
principal.resource.product_object_id: flowId |
Valor extraído diretamente do campo flowId. |
forwardForwardingClass |
security_result.detection_fields[].key: "forwardForwardingClass"security_result.detection_fields[].value: forwardForwardingClass |
Valor extraído diretamente do campo forwardForwardingClass. |
fromCountry |
principal.location.country_or_region: fromCountrytarget.location.country_or_region: fromCountry |
Valor extraído diretamente do campo fromCountry. |
fromUser |
principal.user.userid: fromUser |
Valor extraído diretamente do campo fromUser se não estiver vazio, "unknown" ou "Unknown". |
fromZone |
additional.fields[].key: "fromZone"additional.fields[].value.string_value: fromZone |
Valor extraído diretamente do campo fromZone. |
generateTime |
metadata.collected_timestamp: generateTime |
Valor extraído diretamente do campo generateTime e convertido em carimbo de data/hora usando o formato UNIX. |
hostname |
target.hostname: hostname |
Valor extraído diretamente do campo hostname. |
httpUrl |
target.url: httpUrl |
Valor extraído diretamente do campo httpUrl. |
icmpTypeIPv4 |
additional.fields[].key: "icmpTypeIPv4"additional.fields[].value.string_value: icmpTypeIPv4 |
Valor extraído diretamente do campo icmpTypeIPv4. |
idpAction |
security_result.action: idpAction |
Consulte action para ver a lógica. |
ingressInterfaceName |
additional.fields[].key: "ingressInterfaceName"additional.fields[].value.string_value: ingressInterfaceName |
Valor extraído diretamente do campo ingressInterfaceName. |
ipsApplication |
additional.fields[].key: "ipsApplication"additional.fields[].value.string_value: ipsApplication |
Valor extraído diretamente do campo ipsApplication. |
ipsDirection |
security_result.detection_fields[].key: "ipsDirection"security_result.detection_fields[].value: ipsDirection |
Valor extraído diretamente do campo ipsDirection. |
ipsProfile |
security_result.detection_fields[].key: "ipsProfile"security_result.detection_fields[].value: ipsProfile |
Valor extraído diretamente do campo ipsProfile. |
ipsProfileRule |
security_result.rule_name: ipsProfileRule |
Valor extraído diretamente do campo ipsProfileRule. |
ipsProtocol |
network.ip_protocol: ipsProtocol |
Valor extraído diretamente do campo ipsProtocol. |
log_type |
metadata.description: log_typemetadata.log_type: log_type |
Valor extraído diretamente do campo log_type. |
mstatsTimeBlock |
metadata.collected_timestamp: mstatsTimeBlock |
Valor extraído diretamente do campo mstatsTimeBlock e convertido em carimbo de data/hora usando o formato UNIX. |
mstatsTotRecvdOctets |
network.received_bytes: mstatsTotRecvdOctets |
Valor extraído diretamente do campo mstatsTotRecvdOctets e convertido em um número inteiro sem sinal. |
mstatsTotSentOctets |
network.sent_bytes: mstatsTotSentOctets |
Valor extraído diretamente do campo mstatsTotSentOctets e convertido em um número inteiro sem sinal. |
mstatsTotSessCount |
additional.fields[].key: "mstatsTotSessCount"additional.fields[].value.string_value: mstatsTotSessCount |
Valor extraído diretamente do campo mstatsTotSessCount. |
mstatsTotSessDuration |
network.session_duration.seconds: mstatsTotSessDuration |
Valor extraído diretamente do campo mstatsTotSessDuration e convertido em número inteiro. |
mstatsType |
security_result.category_details: mstatsType |
Valor extraído diretamente do campo mstatsType. |
networkPrefix |
target.ip: networkPrefixtarget.port: networkPrefix |
Endereço IP extraído do campo networkPrefix. Porta extraída do campo networkPrefix e convertida em número inteiro. |
protocolIdentifier |
network.ip_protocol: protocolIdentifier |
Valor extraído diretamente do campo protocolIdentifier, convertido em número inteiro e mapeado para o nome do protocolo IP usando uma pesquisa. |
recvdOctets |
network.received_bytes: recvdOctets |
Valor extraído diretamente do campo recvdOctets e convertido em um número inteiro sem sinal. |
recvdPackets |
network.received_packets: recvdPackets |
Valor extraído diretamente do campo recvdPackets e convertido em número inteiro. |
remoteSite |
target.hostname: remoteSite |
Valor extraído diretamente do campo remoteSite. |
reverseForwardingClass |
security_result.detection_fields[].key: "reverseForwardingClass"security_result.detection_fields[].value: reverseForwardingClass |
Valor extraído diretamente do campo reverseForwardingClass. |
risk |
security_result.risk_score: risk |
Valor extraído diretamente do campo risk e convertido em ponto flutuante. |
rule |
security_result.rule_name: rule |
Valor extraído diretamente do campo rule. |
sentOctets |
network.sent_bytes: sentOctets |
Valor extraído diretamente do campo sentOctets e convertido em um número inteiro sem sinal. |
sentPackets |
network.sent_packets: sentPackets |
Valor extraído diretamente do campo sentPackets e convertido em número inteiro. |
serialNum |
security_result.detection_fields[].key: "serialNum"security_result.detection_fields[].value: serialNum |
Valor extraído diretamente do campo serialNum. |
signatureId |
security_result.detection_fields[].key: "signatureID"security_result.detection_fields[].value: signatureId |
Valor extraído diretamente do campo signatureId. |
signatureMsg |
security_result.detection_fields[].key: "signatureMsg"security_result.detection_fields[].value: signatureMsg |
Valor extraído diretamente do campo signatureMsg. |
signaturePriority |
security_result.severity: signaturePriority |
Se signaturePriority for "low" (não diferencia maiúsculas de minúsculas), então LOW. Se signaturePriority for "medium" (não diferencia maiúsculas e minúsculas), então MEDIUM. Se signaturePriority for "high" (sem diferenciar maiúsculas de minúsculas), então HIGH. |
site |
principal.hostname: siteapplianceName: site |
Valor extraído diretamente do campo site. |
siteId |
additional.fields[].key: "siteId"additional.fields[].value.string_value: siteId |
Valor extraído diretamente do campo siteId. |
siteName |
principal.hostname: siteNameapplianceName: siteName |
Valor extraído diretamente do campo siteName. |
sourceIPv4Address |
principal.ip: sourceIPv4Address |
Valor extraído diretamente do campo sourceIPv4Address. |
sourceIPv6Address |
principal.ip: sourceIPv6Address |
Valor extraído diretamente do campo sourceIPv6Address. |
sourcePort |
principal.port: sourcePort |
Valor extraído diretamente do campo sourcePort e convertido em número inteiro. |
sourceTransportPort |
principal.port: sourceTransportPort |
Valor extraído diretamente do campo sourceTransportPort e convertido em número inteiro. |
subFamily |
security_result.detection_fields[].key: "subFamily"security_result.detection_fields[].value: subFamily |
Valor extraído diretamente do campo subFamily. |
tcpConnAborted |
additional.fields[].key: "tcpConnAborted"additional.fields[].value.string_value: tcpConnAborted |
Valor extraído diretamente do campo tcpConnAborted se não estiver vazio ou for "0". |
tcpConnRefused |
additional.fields[].key: "tcpConnRefused"additional.fields[].value.string_value: tcpConnRefused |
Valor extraído diretamente do campo tcpConnRefused se não estiver vazio ou for "0". |
tcpPktsFwd |
network.sent_packets: tcpPktsFwd |
Valor extraído diretamente do campo tcpPktsFwd e convertido em número inteiro. |
tcpPktsRev |
network.received_packets: tcpPktsRev |
Valor extraído diretamente do campo tcpPktsRev e convertido em número inteiro. |
tcpReXmitFwd |
additional.fields[].key: "tcpReXmitFwd"additional.fields[].value.string_value: tcpReXmitFwd |
Valor extraído diretamente do campo tcpReXmitFwd se não estiver vazio ou for "0". |
tcpReXmitRev |
additional.fields[].key: "tcpReXmitRev"additional.fields[].value.string_value: tcpReXmitRev |
Valor extraído diretamente do campo tcpReXmitRev se não estiver vazio ou for "0". |
tcpSAA |
additional.fields[].key: "tcpSAA"additional.fields[].value.string_value: tcpSAA |
Valor extraído diretamente do campo tcpSAA se não estiver vazio ou for "0". |
tcpSSA |
additional.fields[].key: "tcpSSA"additional.fields[].value.string_value: tcpSSA |
Valor extraído diretamente do campo tcpSSA se não estiver vazio ou for "0". |
tcpSessCnt |
additional.fields[].key: "tcpSessCnt"additional.fields[].value.string_value: tcpSessCnt |
Valor extraído diretamente do campo tcpSessCnt. |
tcpSessDur |
network.session_duration.seconds: tcpSessDur |
Valor extraído diretamente do campo tcpSessDur e convertido em número inteiro. |
tcpSynAckReXmit |
additional.fields[].key: "tcpSynAckReXmit"additional.fields[].value.string_value: tcpSynAckReXmit |
Valor extraído diretamente do campo tcpSynAckReXmit se não estiver vazio ou for "0". |
tcpSynReXmit |
additional.fields[].key: "tcpSynReXmit"additional.fields[].value.string_value: tcpSynReXmit |
Valor extraído diretamente do campo tcpSynReXmit se não estiver vazio ou for "0". |
tcpTWHS |
additional.fields[].key: "tcpTWHS"additional.fields[].value.string_value: tcpTWHS |
Valor extraído diretamente do campo tcpTWHS se não estiver vazio ou for "0". |
tenantId |
principal.resource.attribute.labels[].key: "tenantId"principal.resource.attribute.labels[].value: tenantId |
Valor extraído diretamente do campo tenantId. |
tenantName |
observer.hostname: tenantName |
Valor extraído diretamente do campo tenantName. |
threatType |
security_result.detection_fields[].key: "threatType"security_result.detection_fields[].value: threatType |
Valor extraído diretamente do campo threatType. |
toCountry |
target.location.country_or_region: toCountry |
Valor extraído diretamente do campo toCountry. |
toZone |
additional.fields[].key: "toZone"additional.fields[].value.string_value: toZone |
Valor extraído diretamente do campo toZone. |
traffType |
additional.fields[].key: "traffType"additional.fields[].value.string_value: traffType |
Valor extraído diretamente do campo traffType. |
ts |
metadata.event_timestamp: ts |
Valor extraído diretamente do campo ts e convertido em carimbo de data/hora. |
type |
security_result.action: type |
Consulte action para ver a lógica. |
urlAction |
security_result.action: urlAction |
Consulte action para ver a lógica. |
urlActionMessage |
security_result.summary: urlActionMessage |
Valor extraído diretamente do campo urlActionMessage. |
urlCategory |
principal.resource.attribute.labels[].key: "urlCategory"principal.resource.attribute.labels[].value: urlCategory |
Valor extraído diretamente do campo urlCategory. |
urlProfile |
additional.fields[].key: "urlProfile"additional.fields[].value.string_value: urlProfile |
Valor extraído diretamente do campo urlProfile. |
urlReputation |
security_result.severity_details: urlReputation |
Valor extraído diretamente do campo urlReputation. |
user |
principal.ip: user |
Valor extraído diretamente do campo user. |
vsnId |
principal.resource.attribute.labels[].key: "vsnId"principal.resource.attribute.labels[].value: vsnId |
Valor extraído diretamente do campo vsnId. Valor codificado. Valor codificado. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.