Coletar registros do OpenCanary
Visão geral
Esse analisador extrai campos dos registros SYSLOG e JSON do OpenCanary, normaliza-os no formato UDM e enriquece os dados com campos derivados, como metadata.event_type
e security_result.severity
. Ele processa vários formatos de registro, realiza a validação de endereços IP e mapeia campos para objetos UDM adequados, como principal
, target
e network
.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Instância do Google SecOps.
- Acesso privilegiado ao OpenCanary.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds
- Central de conteúdo > Pacotes de conteúdo
Configure feeds em "Configurações do SIEM" > "Feeds".
Para configurar um feed, siga estas etapas:
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed, por exemplo, Registros do OpenCanary.
- Selecione Webhook como o Tipo de origem.
- Selecione OpenCanary como o Tipo de registro.
- Clique em Próxima.
- Opcional: especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
\n
.
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
- Clique em Próxima.
- Revise a configuração do feed na tela Finalizar e clique em Enviar.
- Clique em Gerar chave secreta para autenticar o feed.
- Copie e armazene a chave secreta. Não é possível ver essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas isso torna a anterior obsoleta.
- Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
- Clique em Concluído.
Configurar feeds na Central de conteúdo
Especifique valores para os seguintes campos:
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
\n
.
Opções avançadas
- Nome do feed:um valor pré-preenchido que identifica o feed.
- Tipo de origem:método usado para coletar registros no Google SecOps.
- Namespace do recurso:namespace associado ao feed.
Rótulos de ingestão:rótulos aplicados a todos os eventos deste feed.
Clique em Gerar chave secreta para autenticar o feed.
Copie e armazene a chave secreta. Não é possível ver essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas isso torna a anterior obsoleta.
Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
Criar uma chave de API para o feed de webhook
Acesse console doGoogle Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especifique o URL do endpoint
- No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed do webhook.
Ative a autenticação especificando a chave de API e a chave secreta como parte do cabeçalho personalizado no seguinte formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendação: especifique a chave de API como um cabeçalho em vez de no URL.
Se o cliente de webhook não aceitar cabeçalhos personalizados, especifique a chave de API e a chave secreta usando parâmetros de consulta no seguinte formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Substitua:
ENDPOINT_URL
: o URL do endpoint do feed.API_KEY
: a chave de API para autenticar no Google Security Operations.SECRET
: a chave secreta gerada para autenticar o feed.
Como configurar um webhook do OpenCanary para o Google SecOps
Encontre o arquivo de configuração do OpenCanary,
config.json
.Abra o arquivo
config.json
com um editor de texto.Localize a seção alerters no arquivo de configuração.
Se já houver um alerta
webhook
, modifique-o. Caso contrário, adicione uma nova entrada para o alertawebhook
.Use a seguinte configuração (substitua ENDPOINT_URL, SECRET e API_KEY pelos seus valores):
"handlers": {
"Webhook": {
"class": "opencanary.logger.WebhookHandler",
"url": "<ENDPOINT_URL>",
"method": "POST",
"data": {"message": "%(message)s"},
"status_code": 200,
"headers": {
"X-Webhook-Access-Key": "<SECRET>",
"X-goog-api-key": "<API_KEY>"
}
}
}
- Salve o arquivo
config.json
. - Reinicie o serviço OpenCanary para aplicar as mudanças. (por exemplo,
sudo systemctl restart opencanary
).
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
dst_host |
target.asset.ip |
O campo dst_host do registro bruto é mapeado para o UDM. Também mapeado para target.ip . |
dst_host |
target.ip |
O campo dst_host do registro bruto é mapeado para o UDM. Também mapeado para target.asset.ip . |
dst_port |
target.port |
O campo dst_port do registro bruto é convertido em uma string e depois em um número inteiro e mapeado para o UDM. |
local_time |
metadata.event_timestamp |
O campo local_time do registro bruto é usado para preencher o metadata.event_timestamp na UDM. O analisador usa o create_time do objeto de lote se o campo local_time não estiver presente. |
local_time_adjusted |
security_result.detection_fields |
O campo local_time_adjusted do registro bruto é adicionado como um par de chave-valor à matriz security_result.detection_fields na UDM. |
logdata.COMMUNITY_STRING |
security_result.detection_fields |
O campo logdata.COMMUNITY_STRING do registro bruto é adicionado como um par de chave-valor à matriz security_result.detection_fields na UDM. |
logdata.DOMAIN |
principal.administrative_domain |
O campo logdata.DOMAIN do registro bruto é mapeado para o UDM. |
logdata.FILENAME |
target.file.full_path |
O campo logdata.FILENAME do registro bruto é mapeado para o UDM. |
logdata.HOSTNAME |
principal.asset.hostname |
Se o campo logdata.HOSTNAME não for um endereço IP, ele será mapeado para a UDM. Também mapeado para principal.hostname . |
logdata.HOSTNAME |
principal.asset.ip |
Se o campo logdata.HOSTNAME for um endereço IP, ele será mapeado para a UDM. Também mapeado para principal.ip . |
logdata.HOSTNAME |
principal.hostname |
Se o campo logdata.HOSTNAME não for um endereço IP, ele será mapeado para a UDM. Também mapeado para principal.asset.hostname . |
logdata.HOSTNAME |
principal.ip |
Se o campo logdata.HOSTNAME for um endereço IP, ele será mapeado para a UDM. Também mapeado para principal.asset.ip . |
logdata.LOCALNAME |
principal.asset.hostname |
O campo logdata.LOCALNAME do registro bruto é mapeado para o UDM. Também mapeado para principal.hostname . |
logdata.LOCALNAME |
principal.hostname |
O campo logdata.LOCALNAME do registro bruto é mapeado para o UDM. Também mapeado para principal.asset.hostname . |
logdata.LOCALVERSION |
principal.platform_version |
O campo logdata.LOCALVERSION do registro bruto é mapeado para o UDM. |
logdata.PASSWORD |
extensions.auth.mechanism |
A presença do campo logdata.PASSWORD faz com que o analisador defina extensions.auth.mechanism como USERNAME_PASSWORD na UDM. |
logdata.PATH |
network.http.referral_url |
O campo logdata.PATH do registro bruto é mapeado para o UDM. |
logdata.REMOTENAME |
target.asset.hostname |
O campo logdata.REMOTENAME do registro bruto é mapeado para o UDM. Também mapeado para target.hostname . |
logdata.REMOTENAME |
target.hostname |
O campo logdata.REMOTENAME do registro bruto é mapeado para o UDM. Também mapeado para target.asset.hostname . |
logdata.REMOTEVERSION |
target.platform_version |
O campo logdata.REMOTEVERSION do registro bruto é mapeado para o UDM. |
logdata.SMBVER |
network.application_protocol |
A presença do campo logdata.SMBVER faz com que o analisador defina network.application_protocol como SMB na UDM. |
logdata.USERAGENT |
network.http.parsed_user_agent |
O campo logdata.USERAGENT do registro bruto é convertido em um user agent analisado e mapeado para a UDM. |
logdata.USERAGENT |
network.http.user_agent |
O campo logdata.USERAGENT do registro bruto é mapeado para o UDM. |
logdata.USERNAME |
target.user.userid |
O campo logdata.USERNAME do registro bruto é mapeado para o UDM. |
loglevel |
security_result.severity |
O campo loglevel do registro bruto determina o security_result.severity no UDM. WARNING é mapeado para HIGH , INFO /INFORMATION é mapeado para LOW . |
logtype |
security_result.detection_fields |
O campo logtype do registro bruto é adicionado como um par de chave-valor à matriz security_result.detection_fields na UDM. |
node_id |
principal.asset.asset_id |
O campo node_id do registro bruto recebe o prefixo "id:" e é mapeado para o UDM. |
src_host |
principal.asset.ip |
O campo src_host do registro bruto é mapeado para o UDM. Também mapeado para principal.ip . |
src_host |
principal.ip |
O campo src_host do registro bruto é mapeado para o UDM. Também mapeado para principal.asset.ip . |
src_port |
principal.port |
O campo src_port do registro bruto é convertido em um número inteiro e mapeado para o UDM. |
utc_time |
security_result.detection_fields |
O campo utc_time do registro bruto é adicionado como um par de chave-valor à matriz security_result.detection_fields na UDM. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.