Coletar registros de alerta do agente de segurança de acesso à nuvem (CASB) do Zscaler

Compatível com:

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

  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 transferência. Salve o arquivo com segurança 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 raiz 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 BindPlane para ingerir o Syslog e enviar ao Google SecOps

  1. 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).
  2. 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
    
  3. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  4. Substitua <customer_id> pelo ID de cliente real.

  5. 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

  1. Faça login no Admin Console do Zscaler Analytics.
  2. Selecione Administração > Configurações > Serviço de streaming Nanolog (NSS).
  3. Selecione Feeds do NSS.
  4. Clique em Adicionar.
  5. Na janela Adicionar feed de NSS que aparece, faça o seguinte:

    1. Nome do feed: insira o nome do feed.
    2. Tipo de NSS: selecione NSS para Web ou NSS para firewall, dependendo dos seus requisitos.
    3. 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.
    4. Status: selecione Ativado para ativar o feed.
    5. Endereço IP do SIEM: insira o endereço IP do servidor syslog/Bindplane.
    6. 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.
    7. Tipo de registro: selecione Registro da Web ou Registros de firewall com base no tipo de NSS selecionado.
    8. Tipo de saída do feed: selecione Personalizado.
    9. Formato de saída do feed: especifique o registro da Web ou do firewall.
    10. 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.
    11. Fuso horário: selecione o fuso horário apropriado (o padrão é GMT).
    12. 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.
    13. 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.

  6. Use o Policy Admin Console ou o Analytics Admin Console:

    1. Para usar o Policy Admin Console, clique em Concluído.
    2. 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.
  7. Use o Policy Admin Console ou o Analytics Admin Console:

    1. 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.
    2. Para usar o Admin Console do Google Analytics, clique em Ativar agora. O status do resultado aparece na parte de cima da janela.

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

  1. Atividade do usuário: selecione Tipo de registro.
  2. Modelo de registro: selecione CSV.
  3. 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