Coletar registros do CASB do Symantec CloudSOC

Compatível com:

Este documento explica como ingerir registros do Symantec CloudSOC no Google Security Operations usando o Bindplane. O analisador extrai registros do syslog ou de mensagens formatadas em JSON. Ele realiza várias operações importantes: analisar o campo de mensagem, converter a mensagem para JSON, se necessário, extrair campos, mapeá-los para o Modelo de Dados Unificado (UDM) e enriquecer o evento com contexto adicional, como carimbos de data/hora e detalhes do resultado de segurança. O analisador também processa vários formatos de registro e realiza ações específicas com base no campo activity_type para categorizar o evento corretamente.

Antes de começar

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

  • Instância do Google SecOps
  • Windows 2016 ou mais recente ou um host Linux com systemd
  • Se estiver executando por trás de um proxy, as portas do firewall estarão abertas.
  • Acesso privilegiado ao Symantec CloudSOC

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 do 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

Para mais opções de instalação, consulte o guia de instalação.

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

  1. 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, 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: '/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: 'SYMANTEC_CASB'
                    raw_log_field: body
    
        service:
            pipelines:
                logs/source0__chronicle_w_labels-0:
                    receivers:
                        - udplog
                    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 do 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 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 Syslog no CASB da Symantec

  1. Faça login no host do Symantec CloudSOC.
  2. Execute o comando a seguir para identificar qual registrador o sistema usa:

    ls –d /etc/*syslog*
    
  3. Acesse a seção correspondente, de acordo com a resposta do comando anterior:

    • syslog.conf: Syslog legado.
    • syslog-ng.conf: Syslog-ng.

Configuração legada do Syslog

  1. Abra o arquivo syslogd, normalmente localizado no diretório /etc/default, usando o editor vi.

    vi /etc/default/syslogd
    
  2. Verifique se o valor SYSLOGD contém a flag -r.

    SYSLOGD="-r"
    
  3. Salve o arquivo e saia do editor:

    • Mude para o modo de comando pressionando a tecla Esc.
    • Pressione : (dois-pontos) para abrir a barra de comandos.
    • Digite wq depois dos dois-pontos e pressione Enter.
  4. Abra o arquivo services, geralmente localizado no diretório /etc, usando o editor vi.

    vi /etc/services
    
  5. Edite o valor da porta do serviço syslog:

    syslog 514/udp
    
  6. Salve o arquivo e saia do editor:

    • Mude para o modo de comando pressionando a tecla Esc.
    • Pressione : (dois-pontos) para abrir a barra de comandos.
    • Digite wq depois dos dois-pontos e pressione Enter.
  7. Abra o arquivo syslog.conf, geralmente localizado no diretório /etc, usando o editor vi.

    vi /etc/syslog.conf
    
  8. Atualize a configuração para encaminhar todos os registros ao Google SecOps.

    *.* @bindplane_agent_host
    
  9. Salve o arquivo e saia do editor:

    • Mude para o modo de comando pressionando a tecla Esc.
    • Pressione : (dois-pontos) para abrir a barra de comandos.
    • Digite wq depois dos dois-pontos e pressione Enter.
  10. Abra o arquivo hosts, geralmente localizado no diretório /etc, usando o editor vi.

    vi /etc/hosts
    
  11. Crie uma entrada DNS local para bindplane_agent_host.

    0.0.0.0 bindplane_agent_host
    
  12. Salve o arquivo e saia do editor:

    • Mude para o modo de comando pressionando a tecla Esc.
    • Pressione : (dois-pontos) para abrir a barra de comandos.
    • Digite wq depois dos dois-pontos e pressione Enter.
  13. Reinicie o serviço de daemon syslog.

Configuração do Syslog-ng

  1. Abra o arquivo syslog-ng.conf, geralmente localizado no diretório /etc, usando o editor vi.

    vi /etc/syslog-ng.conf
    
  2. Adicione o seguinte código ao final do arquivo:

    destination d____ { udp("bindplane_agent_host" port(514));}; log {source(s_src);
    destination(d____);};
    
  3. Abra o arquivo hosts, geralmente localizado no diretório /etc, usando o editor vi.

    vi /etc/hosts
    
  4. Crie uma entrada DNS local para bindplane_agent_host.

    0.0.0.0 bindplane_agent_host
    
  5. Salve o arquivo e saia do editor:

    • Mude para o modo de comando pressionando a tecla Esc.
    • Pressione : (dois-pontos) para abrir a barra de comandos.
    • Digite wq depois dos dois-pontos e pressione Enter.
  6. Reinicie o serviço de daemon syslog-ng.

Tabela de mapeamento da UDM

Campo de registro Mapeamento do UDM Lógica
_domain target.hostname O valor do campo _domain
_domain target.asset.hostname O valor do campo _domain
_id metadata.product_log_id O valor do campo _id
actions_taken security_result.detection_fields[].value O valor do campo actions_taken. A chave é gerada dinamicamente como Action_ + índice.
activity_type metadata.product_event_type O valor do campo activity_type se product_data.activity_type estiver vazio ou o valor de product_data.activity_type se não estiver vazio.
collector_device_ip principal.ip O valor do campo collector_device_ip, se não for Unknown IP.
collector_device_ip principal.asset.ip O valor do campo collector_device_ip, se não for Unknown IP.
collector_device_name principal.hostname O valor do campo collector_device_name.
collector_device_name principal.asset.hostname O valor do campo collector_device_name.
content_checks.dlp.raw_response.contentdetails[].contentBlockId security_result.detection_fields[].value O valor de content_checks.dlp.raw_response.contentdetails[].contentBlockId. A chave é gerada dinamicamente como contentBlockId_ + índice.
content_checks.dlp.raw_response.contentdetails[].topLevelFileType security_result.detection_fields[].value O valor de content_checks.dlp.raw_response.contentdetails[].topLevelFileType. A chave é gerada dinamicamente como topLevelFileType_ + índice.
content_checks.dlp.raw_response.requestid security_result.detection_fields[].value O valor de content_checks.dlp.raw_response.requestid. A chave é Request ID.
content_checks.dlp.raw_response.responseaction security_result.detection_fields[].value O valor de content_checks.dlp.raw_response.responseaction. A chave é Response Action.
content_checks.dlp.raw_response.violation[].name security_result.detection_fields[].value O valor de content_checks.dlp.raw_response.violation[].name. A chave é gerada dinamicamente como Violation_Policy_Name_ + índice.
content_checks.dlp.raw_response.violation[].policyId security_result.detection_fields[].value O valor de content_checks.dlp.raw_response.violation[].policyId. A chave é gerada dinamicamente como Violation_Policy_ID_ + índice.
content_checks.dlp.updated_timestamp additional.fields[].value.string_value O valor de content_checks.dlp.updated_timestamp. A chave é Updated TimeStamp.
content_checks.filename target.file.full_path O valor de content_checks.filename.
content_checks.mimetype target.file.mime_type O valor de content_checks.mimetype.
content_checks.risktype_list[] security_result.detection_fields[].value O valor de content_checks.risktype_list[]. A chave é gerada dinamicamente como RiskType_ + índice.
content_checks.vba_macros.expressions[].values[].key security_result.detection_fields[].key O valor de content_checks.vba_macros.expressions[].values[].key concatenado com índices.
content_checks.vba_macros.expressions[].values[].value security_result.detection_fields[].value O valor de content_checks.vba_macros.expressions[].values[].value.
content_checks.vk_content_iq_violations[] security_result.detection_fields[].value O valor de content_checks.vk_content_iq_violations[]. A chave é gerada dinamicamente como content_violation_ + índice.
content_checks.vk_dlp_policy_violations[] security_result.detection_fields[].value O valor de content_checks.vk_dlp_policy_violations[]. A chave é gerada dinamicamente como dlp_policy_violation_ + índice.
content_checks.vk_encryption security_result.detection_fields[].value O valor de content_checks.vk_encryption. A chave é vk_encryption.
content_checks.vk_glba security_result.detection_fields[].value O valor de content_checks.vk_glba. A chave é vk_glba.
content_checks.vk_hipaa security_result.detection_fields[].value O valor de content_checks.vk_hipaa. A chave é vk_hipaa.
content_checks.vk_pci security_result.detection_fields[].value O valor de content_checks.vk_pci. A chave é vk_pci.
content_checks.vk_pii security_result.detection_fields[].value O valor de content_checks.vk_pii. A chave é vk_pii.
content_checks.vk_source_code security_result.detection_fields[].value O valor de content_checks.vk_source_code. A chave é vk_source_code.
content_checks.vk_vba_macros security_result.detection_fields[].value O valor de content_checks.vk_vba_macros. A chave é vk_vba_macros.
content_checks.vk_virus security_result.detection_fields[].value O valor de content_checks.vk_virus. A chave é vk_virus.
content_checks.violations security_result.detection_fields[].value O valor de content_checks.violations. A chave é violations.
created_timestamp additional.fields[].value.string_value O valor de created_timestamp. A chave é Created TimeStamp.
date metadata.event_timestamp.seconds Segundos da época extraídos do campo date.
device_ip target.ip O valor do campo device_ip, se não for Unknown IP.
device_ip target.asset.ip O valor do campo device_ip, se não for Unknown IP.
file_size target.file.size O valor de file_size ou product_data.file_size se o primeiro estiver vazio. Convertido para número inteiro sem sinal.
file_url target.file.full_path O valor de product_data.file_url.
group_name target.group.group_display_name O nome de exibição extraído do campo group_name.
hosts[] principal.ip Os valores do campo hosts, separados por vírgula.
inserted_timestamp additional.fields[].value.string_value O valor de inserted_timestamp. A chave é Inserted TimeStamp.
instance principal.hostname O primeiro valor do campo instance se for uma matriz ou o valor do campo instance se for uma string.
instance principal.asset.hostname O primeiro valor do campo instance se for uma matriz ou o valor do campo instance se for uma string.
ioi_code security_result.summary O valor do campo ioi_code.
_latency security_result.detection_fields[].value O valor do campo _latency. A chave é Latency.
locations security_result.detection_fields[].value O valor do campo locations. A chave é Locations.
log_name intermediary.asset.asset_id O ID do registro extraído do campo log_name, com o prefixo logid:.
mailbox_owner target.user.userid O valor de product_data.mailbox owner.
metadata.log_type metadata.log_type Fixado no código como SYMANTEC_CASB.
metadata.product_name metadata.product_name Fixado no código como SYMANTEC_CASB.
metadata.vendor_name metadata.vendor_name Fixado no código como SYMANTEC.
msg metadata.description O valor do campo msg ou do campo message se msg não estiver presente.
name security_result.detection_fields[].value O valor do campo name. A chave é Name.
object_name security_result.detection_fields[].value O valor do campo object_name. A chave é Object Name.
object_type target.resource.name O valor do campo object_type.
org_unit security_result.detection_fields[].value O valor do campo org_unit. A chave é org_unit ID.
policy_action security_result.action_details O valor do campo policy_action.
policy_type security_result.detection_fields[].value O valor do campo policy_type. A chave é policy_type.
policy_violated security_result.detection_fields[].value O valor do campo policy_violated. A chave é policy_violated.
product_data._domain target.hostname O valor de product_data._domain.
product_data._domain target.asset.hostname O valor de product_data._domain.
product_data.activity_type metadata.product_event_type O valor de product_data.activity_type.
product_data.file url target.file.full_path O valor de product_data.file url.
product_data.file_size target.file.size O valor de product_data.file_size.
product_data.group target.group.group_display_name O valor de product_data.group.
product_data.location principal.location.country_or_region O valor de product_data.location.
product_data.logon error security_result.summary O valor de product_data.logon error.
product_data.mailbox owner target.user.userid O valor de product_data.mailbox owner.
product_data.name target.file.full_path O valor de product_data.name.
product_data.object_name target.file.full_path O valor de product_data.object_name.
product_data.originatingserver product_data.service target.application O valor de product_data.service.
product_data.site url target.url O valor de product_data.site url.
product_data.target target.user.userid O valor de product_data.target.
product_data.useragent network.http.user_agent O valor de product_data.useragent.
product_name intermediary.application O valor do campo product_name.
product_uid metadata.product_name O valor do campo product_uid.
responsible_logs additional.fields[].value.string_value O valor do campo responsible_logs. A chave é responsible_logs.
resource_id target.resource.product_object_id O valor do campo resource_id.
risks security_result.detection_fields[].value O valor do campo risks. A chave é Risks.
security_result.action security_result.action Derivado de product_data.logon error. Defina como BLOCK se product_data.logon error for BlockedByConditionalAccess.
security_result.severity security_result.severity O valor em maiúsculas do campo severity, se for um dos níveis de gravidade aceitos.
security_result.severity_details security_result.severity_details O valor do campo severity, se não for um dos níveis de gravidade aceitos.
security_result.summary security_result.summary O valor do campo ioi_code ou product_data.logon error se ioi_code não estiver presente.
service target.application O valor do campo service se product_data.service estiver vazio.
site_url target.url O valor de product_data.site url.
source principal.resource.attribute.labels[].value O valor do campo source. A chave é Source.
sub_feature additional.fields[].value.string_value O valor do campo sub_feature. A chave é Sub Feature.
target.application target.application Derivada com base em product_data.activity_type e na presença da conta principal e do destino.
target.resource.name target.resource.name Derivada com base em product_data.activity_type e na presença da conta principal e do destino.
threat_score security_result.detection_fields[].value O valor do campo threat_score. A chave é Threat Score.
transaction_id security_result.detection_fields[].value O valor do campo transaction_id. A chave é Transaction ID.
updated_timestamp additional.fields[].value.string_value O valor de updated_timestamp ou content_checks.dlp.updated_timestamp se o primeiro estiver vazio. A chave é Updated TimeStamp.
user principal.user.userid O valor do campo user.
user_email target.user.userid O valor do campo user_email.
user_mail target.user.userid O valor do campo user_mail extraído do campo msg.
user_name principal.user.user_display_name O valor do campo user_name.
user_uid principal.user.userid ou target.user.userid O valor do campo user_uid. Mapeado para principal.user.userid se product_data.activity_type não for InvalidLogin ou Login. Caso contrário, será mapeado para target.user.userid.
uuid intermediary.asset.product_object_id O valor do campo uuid.
version metadata.product_version O valor do campo version.

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