Coletar registros do Auth0
Visão geral
Esse analisador extrai eventos de registro do Auth0 de mensagens formatadas em JSON. Ele inicializa campos da UDM, analisa o payload JSON, mapeia campos relevantes para o esquema da UDM e categoriza eventos com base no campo type, definindo ações de segurança e tipos de eventos adequados.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Instância do Google SecOps.
- Conta do Auth0 com as permissões necessárias.
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 Auth0).
- Selecione Webhook como o Tipo de origem.
- Selecione AUTH_ZERO 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
. - Namespace do recurso: o namespace do recurso.
- Rótulos de ingestão: o rótulo aplicado aos eventos deste feed.
- 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 o console doGoogle Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Chronicle.
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.
Configurar o webhook do Auth0 para o Google SecOps
- Acesse o painel do Auth0.
- Acesse Monitoring > Streams.
- Clique em Criar fluxo de registros.
- Clique no botão Webhook personalizado e dê a ele um nome de sua escolha. Por exemplo: Webhook do Google SecOps.
- Configure o seguinte:
- URL de payload: insira o URL do endpoint de API Google SecOps.
- Content-Type: defina o cabeçalho Content-Type como application/json. Isso informa ao Google SecOps o formato dos dados enviados.
- Opcional: Token de autorização: configure um secret para aumentar a segurança. Isso será usado para verificar a autenticidade das solicitações de webhook.
Personalizar o payload: é possível personalizar o payload enviado ao Google SecOps modificando a categoria do evento. Isso permite selecionar pontos de dados específicos do evento do Auth0 e formatá-los conforme necessário para o Google SecOps. Consulte a documentação do Auth0 para mais detalhes sobre as variáveis de contexto e opções de script disponíveis. Verifique se o payload final está em conformidade com o formato UDM esperado do Google SecOps.
- Clique em Salvar para criar o webhook.
- Acione o evento associado ao hook (por exemplo, registrar um novo usuário, fazer login).
- Verifique se os registros estão sendo enviados para o Google SecOps conferindo o feed no console do Google SecOps.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
client_id |
principal.asset.product_object_id |
Mapeado diretamente do campo client_id . |
client_name |
principal.hostname |
Mapeado diretamente do campo client_name . |
connection |
security_result.description |
Mapeado diretamente do campo connection . |
connection_id |
security_result.rule_id |
Mapeado diretamente do campo connection_id . |
date |
metadata.event_timestamp |
Analisado do campo date usando o formato ISO8601. |
description |
metadata.description |
Mapeado diretamente do campo description . |
details.error |
security_result.detection_fields |
Mapeado do campo details.error . A chave é "Error". |
details.error.oauthError |
security_result.detection_fields |
Mapeado do campo details.error.oauthError . A chave é "oauthError". |
details.error.type |
security_result.detection_fields |
Mapeado do campo details.error.type . A chave é "oauth_error_type". |
details.ipOnAllowlist |
security_result.detection_fields |
Mapeado do campo details.ipOnAllowlist . A chave é "ipOnAllowlist". |
details.link |
target.url |
Mapeado diretamente do campo details.link , se presente. Caso contrário, derivado de outros campos (consulte abaixo). |
details.request.auth.strategy |
security_result.detection_fields |
Mapeado do campo details.request.auth.strategy . A chave é "strategy". |
details.request.body.app_metadata.blockedReason |
security_result.detection_fields |
Mapeado do campo details.request.body.app_metadata.blockedReason . A chave é "blockedReason". |
details.request.body.app_metadata.customer_id |
target.user.product_object_id |
Mapeado diretamente do campo details.request.body.app_metadata.customer_id . |
details.request.body.app_metadata.migrated |
security_result.detection_fields |
Mapeado do campo details.request.body.app_metadata.migrated . A chave é "migrated". |
details.request.channel |
security_result.detection_fields |
Mapeado do campo details.request.channel . A chave é "channel". |
details.request.method |
network.http.method |
Mapeado diretamente do campo details.request.method após a conversão para maiúsculas. |
details.request.path |
target.url |
Mapeado diretamente do campo details.request.path se details.link não estiver presente. Caso contrário, derivado de outros campos (veja abaixo). |
details.response.body.email |
target.user.email_addresses |
Mapeado diretamente do campo details.response.body.email . |
details.response.body.email_verified |
security_result.detection_fields |
Mapeado do campo details.response.body.email_verified . A chave é "email_verified". |
details.response.body.nickname |
target.user.user_display_name |
Mapeado diretamente do campo details.response.body.nickname . |
details.response.body.user_id |
target.user.userid |
Mapeado diretamente do campo details.response.body.user_id . |
details.response.statusCode |
network.http.response_code |
Mapeado diretamente do campo details.response.statusCode após a conversão para número inteiro. |
details.return_to |
target.url |
Mapeado diretamente do campo details.return_to se details.link e details.request.path não estiverem presentes. Caso contrário, derivado de outros campos (veja abaixo). |
details.session_id |
network.session_id |
Mapeado diretamente do campo details.session_id . |
details.stats.loginsCount |
additional.fields |
Mapeado do campo details.stats.loginsCount . A chave é "loginsCount". |
details.requiresVerification |
security_result.detection_fields |
Mapeado do campo details.requiresVerification . A chave é "requiresVerification". |
details.to |
target.user.email_addresses |
Mapeado diretamente do campo details.to . |
hostname |
target.hostname |
Mapeado diretamente do campo hostname . |
ip |
principal.ip |
Mapeado diretamente do campo ip . |
js_data.audience |
target.url |
Mapeado diretamente do campo js_data.audience se details.link , details.request.path e details.return_to não estiverem presentes. |
js_data.details.body.email_verified |
security_result.detection_fields |
Mapeado do campo js_data.details.body.email_verified . A chave é "email_verified". |
js_data.details.body.is_signup |
security_result.detection_fields |
Mapeado do campo js_data.details.body.is_signup . A chave é "is_signup". |
js_data.details.body.transaction.redirect_uri |
target.url |
Mapeado diretamente do campo js_data.details.body.transaction.redirect_uri se details.link , details.request.path , details.return_to e js_data.audience não estiverem presentes. |
js_data.scope |
security_result.detection_fields |
Mapeado do campo js_data.scope . A chave é "scope". |
js_data.tracking_id |
security_result.detection_fields |
Mapeado do campo js_data.tracking_id . A chave é "tracking_id". |
log_id |
metadata.product_log_id |
Mapeado diretamente do campo log_id . |
metadata.log_type |
metadata.log_type |
Mapeado diretamente do campo log_type . |
metadata.product_name |
metadata.product_name |
Defina como "AUTH_ZERO". |
metadata.vendor_name |
metadata.vendor_name |
Defina como "AUTH_ZERO". |
metadata.product_event_type |
metadata.product_event_type |
Mapeado diretamente do campo type . |
network.http.parsed_user_agent |
network.http.parsed_user_agent |
Analisado do campo user_agent . |
network.http.user_agent |
network.http.user_agent |
Mapeado diretamente do campo user_agent . |
security_result.action |
security_result.action |
Determinado pelo campo type (ALLOW ou BLOCK). Consulte o código do analisador para mapeamentos específicos. |
strategy |
security_result.detection_fields |
Mapeado do campo strategy . A chave é "strategy". |
strategy_type |
security_result.detection_fields |
Mapeado do campo strategy_type . A chave é "strategy_type". |
target.user.email_addresses |
target.user.email_addresses |
Mapeado diretamente do campo user_name se for um endereço de e-mail. Caso contrário, é derivado de outros campos (consulte acima). |
target.user.userid |
target.user.userid |
Mapeado diretamente do campo user_id ou details.response.body.user_id ou user_name se user_id não estiver presente. |
user_agent |
network.http.user_agent |
Mapeado diretamente do campo user_agent . |
user_id |
target.user.userid |
Mapeado diretamente do campo user_id . |
user_name |
target.user.email_addresses |
Mapeado diretamente do campo user_name . Defina como "MACHINE" se security_result.action for "ALLOW" e type for "slo", "sapi", "s", "ss" ou "ssa". Defina como "OTP" se extensions.auth.type for "MACHINE" e type for "slo". Determinado por uma combinação de campos, incluindo type , client_name , ip , hostname e has_user . Consulte o código do analisador para mapeamentos específicos. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.