Recolha registos do Symantec CloudSOC CASB

Compatível com:

Este documento explica como carregar registos do Symantec CloudSOC para o Google Security Operations através do Bindplane. O analisador extrai registos de mensagens formatadas em syslog ou JSON. Executa várias operações importantes: analisar o campo de mensagem, converter a mensagem em JSON, se necessário, extrair campos, mapeá-los para o modelo de dados unificado (UDM) e enriquecer o evento com contexto adicional, como indicações de tempo e detalhes dos resultados de segurança. O analisador também processa vários formatos de registo e executa ações específicas com base no campo activity_type para categorizar o evento corretamente.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps
  • Windows 2016 ou posterior, ou um anfitrião Linux com systemd
  • Se estiver a ser executado através de um proxy, as portas da firewall estão abertas
  • Acesso privilegiado ao Symantec CloudSOC

Obtenha o ficheiro de autenticação de carregamento do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. 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

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane

Instalação do Windows

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte 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 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 o guia de instalação.

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

  1. 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).
  2. 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: '/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 de cliente real.

  5. 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 Services ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configure o Syslog no Symantec CASB

  1. Inicie sessão no anfitrião do Symantec CloudSOC.
  2. Execute o seguinte comando para identificar que registador o sistema usa:

    ls –d /etc/*syslog*
    
  3. Aceda à secção correspondente, de acordo com a resposta ao comando anterior:

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

Configuração do Syslog antigo

  1. Abra o ficheiro syslogd, normalmente localizado no diretório /etc/default, através do editor vi.

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

    SYSLOGD="-r"
    
  3. Guarde o ficheiro e saia do editor:

    • Mude para o modo de comando premindo a tecla Esc.
    • Prima : (dois pontos) para abrir a barra de comandos.
    • Escreva wq depois dos dois pontos e prima Enter.
  4. Abra o ficheiro services, normalmente localizado no diretório /etc, através do editor vi.

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

    syslog 514/udp
    
  6. Guarde o ficheiro e saia do editor:

    • Mude para o modo de comando premindo a tecla Esc.
    • Prima : (dois pontos) para abrir a barra de comandos.
    • Escreva wq depois dos dois pontos e prima Enter.
  7. Abra o ficheiro syslog.conf, normalmente localizado no diretório /etc, através do editor vi.

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

    *.* @bindplane_agent_host
    
  9. Guarde o ficheiro e saia do editor:

    • Mude para o modo de comando premindo a tecla Esc.
    • Prima : (dois pontos) para abrir a barra de comandos.
    • Escreva wq depois dos dois pontos e prima Enter.
  10. Abra o ficheiro hosts, normalmente localizado no diretório /etc, através do editor vi.

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

    0.0.0.0 bindplane_agent_host
    
  12. Guarde o ficheiro e saia do editor:

    • Mude para o modo de comando premindo a tecla Esc.
    • Prima : (dois pontos) para abrir a barra de comandos.
    • Escreva wq depois dos dois pontos e prima Enter.
  13. Reinicie o serviço de daemon syslog.

Configuração do Syslog-ng

  1. Abra o ficheiro syslog-ng.conf, normalmente localizado no diretório /etc, através do editor vi.

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

    destination d____ { udp("bindplane_agent_host" port(514));}; log {source(s_src);
    destination(d____);};
    
  3. Abra o ficheiro hosts, normalmente localizado no diretório /etc, através do editor vi.

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

    0.0.0.0 bindplane_agent_host
    
  5. Guarde o ficheiro e saia do editor:

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

Tabela de mapeamento do UDM

Campo de registo Mapeamento de 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 os í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 em 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 a apresentar 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 registo 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 Codificado para SYMANTEC_CASB.
metadata.product_name metadata.product_name Codificado para SYMANTEC_CASB.
metadata.vendor_name metadata.vendor_name Codificado para 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. Definido 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 suportados.
security_result.severity_details security_result.severity_details O valor do campo severity, se não for um dos níveis de gravidade suportados.
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 do principal e do alvo.
target.resource.name target.resource.name Derivada com base em product_data.activity_type e na presença do principal e do alvo.
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 nem Login. Caso contrário, é 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 da Google SecOps.