Recolha registos do Symantec CloudSOC CASB
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
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- 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
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- Copie e guarde o ID do cliente da secção Detalhes da organização.
Instale o agente do Bindplane
Instalação do Windows
- Abra a Linha de comandos ou o PowerShell como administrador.
Execute o seguinte 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 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
- 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).
- Localize o ficheiro
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
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 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
- Inicie sessão no anfitrião do Symantec CloudSOC.
Execute o seguinte comando para identificar que registador o sistema usa:
ls –d /etc/*syslog*
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
Abra o ficheiro
syslogd
, normalmente localizado no diretório/etc/default
, através do editorvi
.vi /etc/default/syslogd
Certifique-se de que o valor
SYSLOGD
contém a flag-r
.SYSLOGD="-r"
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.
Abra o ficheiro
services
, normalmente localizado no diretório/etc
, através do editorvi
.vi /etc/services
Edite o valor da porta para o serviço syslog:
syslog 514/udp
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.
Abra o ficheiro
syslog.conf
, normalmente localizado no diretório/etc
, através do editorvi
.vi /etc/syslog.conf
Atualize a configuração para encaminhar todos os registos para o Google SecOps.
*.* @bindplane_agent_host
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.
Abra o ficheiro
hosts
, normalmente localizado no diretório/etc
, através do editorvi
.vi /etc/hosts
Crie uma entrada DNS local para
bindplane_agent_host
.0.0.0.0 bindplane_agent_host
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.
Reinicie o serviço de daemon syslog.
Configuração do Syslog-ng
Abra o ficheiro
syslog-ng.conf
, normalmente localizado no diretório/etc
, através do editorvi
.vi /etc/syslog-ng.conf
Adicione o seguinte código ao final do ficheiro:
destination d____ { udp("bindplane_agent_host" port(514));}; log {source(s_src); destination(d____);};
Abra o ficheiro
hosts
, normalmente localizado no diretório/etc
, através do editorvi
.vi /etc/hosts
Crie uma entrada DNS local para
bindplane_agent_host
.0.0.0.0 bindplane_agent_host
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.
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.