Coletar registros de alerta do agente de segurança de acesso à nuvem (CASB) do Zscaler
Este documento descreve como coletar os registros de alerta do Zscaler Cloud Access Security Broker (CASB). Esse analisador extrai campos de registros formatados em JSON, processando possíveis inconsistências de formatação. Ele mapeia os campos extraídos para o UDM, criando ou mesclando campos nos objetos principal
, metadata
, additional
e security_result
e, por fim, mesclando tudo em um campo @output
unificado. O analisador também realiza várias transformações de dados, incluindo manipulação de strings e análise de datas.
Antes de começar
- Verifique se você tem uma instância do Google Security Operations.
- Verifique se você está usando o Windows 2016 ou uma versão mais recente ou um host Linux com
systemd
. - Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
- Verifique se você tem acesso administrativo ao ZScaler.
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.
- Faça o download do arquivo de autenticação de transferência. Salve o arquivo com segurança no sistema em que o BindPlane será instalado.
Receber o ID de 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 raiz 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 BindPlane para ingerir o Syslog e enviar ao Google SecOps
Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele está 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
,vi
ou Notepad).
- Localize o arquivo
Edite o arquivo
config.yaml
da seguinte forma:receivers: tcplog: # Replace the below port <54525> and IP <0.0.0.0> with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: vmware_nsx raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog 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 em que o arquivo de autenticação foi salvo na seção Receber o arquivo de autenticação de ingestão do Google SecOps.
Reinicie o agente BindPlane para aplicar as mudanças.
No Linux, para reiniciar o agente BindPlane, execute o seguinte comando:
sudo systemctl restart bindplane-agent
No Windows, para reiniciar o agente BindPlane, use o console Services ou digite o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar a Zscaler Cloud Web Security
- Faça login no Admin Console do Zscaler Analytics.
- Selecione Administração > Configurações > Serviço de streaming Nanolog (NSS).
- Selecione Feeds do NSS.
- Clique em Adicionar.
Na janela Adicionar feed de NSS que aparece, faça o seguinte:
- Nome do feed: insira o nome do feed.
- Tipo de NSS: selecione NSS para Web ou NSS para firewall, dependendo dos seus requisitos.
- Nome do NSS: selecione a máquina virtual (VM) do NSS que coleta registros da nuvem. Apenas uma VM do NSS pode ser mapeada para um feed.
- Status: selecione Ativado para ativar o feed.
- Endereço IP do SIEM: insira o endereço IP do servidor syslog/Bindplane.
- Porta TCP do SIEM: digite o número da porta do servidor syslog/Bindplane para comunicação TCP. O Zscaler oferece suporte apenas à conexão TCP.
- Tipo de registro: selecione Registro da Web ou Registros de firewall com base no tipo de NSS selecionado.
- Tipo de saída do feed: selecione Personalizado.
- Formato de saída do feed: especifique o registro da Web ou do firewall.
- Ofuscação de usuário: selecione Desativado para mostrar os nomes de usuário de login na saída. Para valores aleatórios, selecione Ativado.
- Fuso horário: selecione o fuso horário apropriado (o padrão é GMT).
- Registros duplicados: insira o número de minutos que o NSS leva para enviar os registros duplicados. Você pode selecionar o tempo com base nos seus requisitos.
- Filtros de transações: há vários parâmetros disponíveis com base nos quais é possível filtrar os registros enviados pela máquina virtual do NSS.
Para mais informações sobre diferentes conjuntos de filtros, consulte a seção de documentos do NSS no portal de ajuda.
Use o Policy Admin Console ou o Analytics Admin Console:
- Para usar o Policy Admin Console, clique em Concluído.
- Para usar o Admin Console do Google Analytics, clique em Salvar. Depois que a janela Adicionar feed de NSS for fechada, volte para a janela anterior. Os detalhes do feed adicionado vão aparecer na seção Configurar feeds.
Use o Policy Admin Console ou o Analytics Admin Console:
- Para usar o Policy Admin Console, faça o seguinte:
- Na seção Configurar feeds, clique em Salvar.
- Clique em Ativar agora. O status do resultado aparece em uma nova janela.
- Clique em Concluído.
- Para usar o Admin Console do Google Analytics, clique em Ativar agora. O status do resultado aparece na parte de cima da janela.
- Para usar o Policy Admin Console, faça o seguinte:
Configurar o feed de registros da Web e do firewall
No campo Formato de saída do feed, use os seguintes feeds:
Se o coletor oferecer suporte ao formato personalizado, especifique o seguinte feed de registro da Web:
|ZSCALER|DATE|%s{mon} %d{dd} %02d{hh}:%02d{mm}:%02d{ss}|NSSFEEDIP|%s{nsssvcip}|CLIENTINTIP|%s{cintip}|RECORDID|%d{recordid}|LOGINNAME|%s{login}|PROTOCOL|%s{proto}|URL|%s{url}|HOST|%s{host}|ACTION|%s{action}|REASON|%s{reason}|RISKSCORE|%d{riskscore}|APPNAME|%s{appname}|APPCLASS|%s{appclass}|REQSIZE|%d{reqsize}|RESPSIZE|%d{respsize}|CTIME|%d{ctime}|URLCLASS|%s{urlclass}|SUPERCAT|%s{urlsupercat}|URLCAT|%s{urlcat}|MALWARECAT|%s{malwarecat}|MALWARECLASS|%s{malwareclass}|THREATNAME|%s{threatname}|FILETYPE|%s{filetype}|FILECLASS|%s{fileclass}|DLPENGINE|%s{dlpeng}|DLPDICT|%s{dlpdict}|BWTHROTTLE|%s{bwthrottle}|LOCATION|%s{location}|DEPARTMENT|%s{dept}|CLIENTIP|%s{cip}|DESTINATIONIP|%s{sip}|REQMETHOD|%s{reqmethod}|RESPCODE|%s{respcode}|USERAGENT|%s{ua}|REFERER|%s{referer}|MD5HASH|%s{bamd5}|DLPRULENAME|%s{dlprulename}|DLPMD5|%s{dlpmd5}|DLPIDENTIFIER|%d{dlpidentifier}|DLPDICTHITCOUNT|%s{dlpdicthitcount}|\n ```
Se o coletor oferecer suporte à assinatura do feed de firewall, especifique o seguinte feed de firewall:
|ZSCALERFIREWALL|DATE|%s{mon}%d{dd} %02d{hh}:%02d{mm}:%02d{ss}|CLIENTIP|%s{csip}|RECORDID|%d{recordid}|LOGINNAME|%s{login}|PROTOCOL|%s{ipproto}|ACTION|%s{action}|DESTINATIONIP|%s{cdip}|SOURCEPORT|%d{csport}|DESTINATIONPORT|%d{cdport}|CLIENTTUNIP|%s{tsip}|CLIENTTUNPORT|%d{tsport}|LOCATION|%s{location}|DEPARTMENT|%s{dept}|DESTINATIONCOUNTRY|%s{destcountry}|INCOMINGBYTES|%ld{inbytes}|NETWORKAPP|%s{nwapp}|NETWORKSVC|%s{nwsvc}|RULELABEL|%s{rulelabel}|NATTING|%s{dnat}|SESSIONDURATION|%d{duration}|AGGREGATEDSESSION|%d{numsessions}|AVERAGEDURATION|%d{avgduration}|TUNNELTYPE|%s{ttype}|SERVERDESTPORT|%d{sdport}|SERVERSOURCEIP|%s{ssip}|SERVERSOURCEPORT|%d{ssport}|IPCAT|%s{ipcat}|\n
Configurar o acesso particular do Zscaler
- Atividade do usuário: selecione Tipo de registro.
- Modelo de registro: selecione CSV.
Fluxo de registro: execute o seguinte comando:
*%s{LogTimestamp:time} User Activity zpa-lss: %s{Username},%d{ServicePort},%s{ClientPublicIP},%s{ClientCountryCode},%s{ConnectionStatus},%d{IPProtocol},%s{ClientZEN},%s{Policy},%s{Connector},%s{ConnectorZEN},%s{ConnectorIP},%s{Host},%s{ServerIP},%s{TimestampConnectionStart:iso8601},%d{ServerPort}\n*
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
applicationname |
principal.application |
O valor de applicationname do registro bruto é atribuído a esse campo do UDM. |
company |
principal.user.company_name |
O valor de company do registro bruto é atribuído a esse campo do UDM. |
datetime |
metadata.event_timestamp |
O valor de datetime do registro bruto é analisado e convertido em um carimbo de data/hora, que é atribuído a esse campo do UDM. O analisador usa vários formatos de data para processar variações no registro bruto. |
dept |
principal.user.department |
O valor de dept do registro bruto é atribuído a esse campo do UDM. |
dlpdictcount |
additional.fields |
Se dlpdictcount estiver presente e não for "None" ou vazio no registro bruto, um novo campo com a chave "dlpdictcount" e um valor de string de dlpdictcount será adicionado à matriz additional.fields . |
dlpdictnames |
additional.fields |
Se dlpdictnames estiver presente e não for "None" ou vazio no registro bruto, um novo campo com a chave "dlpdictnames" e um valor de string de dlpdictnames será adicionado à matriz additional.fields . |
dlpenginenames |
additional.fields |
Se dlpenginenames estiver presente e não for "Nenhum" ou vazio no registro bruto, um novo campo com a chave "dlpenginenames" e um valor de string de dlpenginenames será adicionado à matriz additional.fields . |
event.extcollabnames |
additional.fields |
Se extcollabnames estiver presente no registro bruto, ele será dividido pelo " |
event.extownername |
additional.fields |
Se extownername estiver presente no registro bruto, um novo campo com a chave "extownername" e um valor de string de extownername será adicionado à matriz additional.fields . |
filedownloadtimems |
additional.fields |
Se filedownloadtimems estiver presente no registro bruto, um novo campo com a chave "Tempo de download do arquivo" e um valor de string de filedownloadtimems será adicionado à matriz additional.fields . |
fileid |
additional.fields |
Se fileid estiver presente no registro bruto, um novo campo com a chave "fileid" e um valor de string de fileid será adicionado à matriz additional.fields . |
filename |
principal.process.file.full_path |
O valor de filename do registro bruto é atribuído a esse campo do UDM. O analisador processa caracteres com escape e casos especiais no nome do arquivo. |
filemd5 |
principal.process.file.md5 |
Se filemd5 estiver presente e não for "Nenhum" ou vazio no registro bruto, o valor será atribuído a esse campo do UDM. |
filescantimems |
additional.fields |
Se filescantimems estiver presente no registro bruto, um novo campo com a chave "Tempo de verificação de arquivo" e um valor de string de filescantimems será adicionado à matriz additional.fields . |
filesource |
additional.fields |
Se filesource estiver presente no registro bruto, um novo campo com a chave "Origem do arquivo" e um valor de string de filesource será adicionado à matriz additional.fields . O analisador processa caracteres com escape e casos especiais no arquivo de origem. |
fullurl |
principal.url |
Se fullurl estiver presente e não for "URL desconhecido" ou vazio no registro bruto, o valor será atribuído a esse campo do UDM. |
intcollabnames |
additional.fields |
Se intcollabnames estiver presente no registro bruto, ele será dividido pelo " |
lastmodtime |
metadata.event_timestamp |
Se lastmodtime estiver presente no registro bruto, ele será analisado e convertido em um carimbo de data/hora, que será atribuído a esse campo do UDM. O analisador usa vários formatos de data para processar variações no registro bruto. |
login |
principal.user.email_addresses , principal.user.userid |
Se login estiver presente e corresponder a um formato de endereço de e-mail, o valor será atribuído a principal.user.email_addresses e principal.user.userid . Se login estiver presente, mas não corresponder a um formato de endereço de e-mail, o valor será atribuído apenas a principal.user.userid . Se login não estiver presente, principal.user.userid será definido como "n/a". |
policy |
security_result.rule_name |
Se policy estiver presente e não for "Nenhum" ou vazio no registro bruto, o valor será atribuído a esse campo do UDM. |
recordid |
metadata.product_log_id |
Se recordid estiver presente no registro bruto, o valor dele será atribuído a esse campo do UDM. |
tenant |
additional.fields |
Se tenant estiver presente no registro bruto, um novo campo com a chave "Tenant" e um valor de string de tenant será adicionado à matriz additional.fields . |
threatname |
security_result.threat_name |
Se threatname estiver presente e não for "Nenhum" ou vazio no registro bruto, o valor será atribuído a esse campo do UDM. |
(Parser Logic) | metadata.event_type |
O analisador define esse campo como "USER_UNCATEGORIZED". |
(Parser Logic) | metadata.log_type |
O analisador define esse campo como "ZSCALER_CASB". |
(Parser Logic) | metadata.product_name |
O analisador define esse campo como "Zscaler CASB". |
(Parser Logic) | metadata.vendor_name |
O analisador define esse campo como "Zscaler". |
Alterações
2024-06-04
- A função "gsub" foi adicionada para processar caracteres de escape inválidos nos seguintes campos: "filename", "fileid", "filemd5" e "filesource".
2024-03-27
- A função "gsub" foi adicionada para processar o caractere de escape inválido em "filename".
2024-03-05
- "event.fileid", "event.intcollabnames", "event.extownername" e "event.extcollabnames" foram mapeados para "additional.fields".
2024-01-29
- A função "gsubs" foi adicionada para processar o caractere de escape inválido "," em "filesource".
- A função "gsubs" foi adicionada para processar o caractere de escape inválido em "filename".
2023-12-21
- Foram adicionadas gsubs para processar caracteres inválidos em registros JSON não analisados.
2023-09-30
- "event.login" foi associado a "principal.user.userid". Se não estiver disponível, defina "principal.user.userid" como "n/a".
- Adição da verificação "on_error" para o filtro "date" como "event.lastmodtime", que é um parâmetro opcional.
2022-08-16
- Parser recém-criado