Recolha registos do Auth0
Vista geral
Este analisador extrai eventos de registo do Auth0 de mensagens formatadas em JSON. Inicializa os campos da UDM, analisa o payload JSON, mapeia os campos relevantes para o esquema da UDM e categoriza os eventos com base no campo type, definindo ações de segurança e tipos de eventos adequados.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps.
- Conta do Auth0 com as autorizações necessárias.
Configure feeds
Para configurar um feed, siga estes passos:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo, Registos do Auth0).
- Selecione Webhook como o Tipo de origem.
- Selecione AUTH_ZERO como o Tipo de registo.
- Clicar em Seguinte.
- Opcional: especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão: o delimitador usado para separar linhas de registo, como
\n
. - Espaço de nomes do recurso: o espaço de nomes do recurso.
- Etiquetas de carregamento: a etiqueta aplicada aos eventos deste feed.
- Delimitador de divisão: o delimitador usado para separar linhas de registo, como
- Clicar em Seguinte.
- Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
- Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
- Copie e armazene a chave secreta. Não pode ver esta chave secreta novamente. Se necessário, pode regenerar uma nova chave secreta, mas esta ação torna a chave secreta anterior obsoleta.
- No separador Detalhes, copie o URL do ponto final do feed do campo Informações do ponto final. Tem de especificar este URL do ponto final na sua aplicação cliente.
- Clique em Concluído.
Crie uma chave da API para o feed de webhook
Aceda à Google Cloud consola > Credenciais.
Clique em Criar credenciais e, de seguida, selecione Chave de API.
Restrinja o acesso da chave da API à API Chronicle.
Especifique o URL do ponto final
- Na aplicação cliente, especifique o URL do ponto final HTTPS fornecido no feed do webhook.
Ative a autenticação especificando a chave da 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 da API como um cabeçalho em vez de a especificar no URL. Se o seu cliente de webhook não suportar cabeçalhos personalizados, pode especificar a chave da API e a chave secreta através de parâmetros de consulta no seguinte formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Substitua o seguinte:
ENDPOINT_URL
: o URL do ponto final do feed.API_KEY
: a chave da API para autenticar no Google Security Operations.SECRET
: a chave secreta que gerou para autenticar o feed.
Configure o webhook do Auth0 para o Google SecOps
- Aceda ao painel de controlo do Auth0.
- Aceda a Monitorização > Streams.
- Clique em Criar stream de registos.
- Clique no botão Webhook personalizado e atribua-lhe um nome à sua escolha. Por exemplo: Webhook do Google SecOps.
- Configure o seguinte:
- URL de payload: introduza o URL do ponto final da API Google SecOps.
- Content-Type: defina o cabeçalho Content-Type como application/json. Isto indica ao Google SecOps o formato dos dados que estão a ser enviados.
- Opcional: símbolo de autorização: configure um segredo para maior segurança. Isto vai ser usado para validar a autenticidade dos pedidos de webhook.
Personalize o payload: pode personalizar o payload enviado para o Google SecOps modificando a categoria do evento. Isto permite-lhe selecionar pontos de dados específicos do evento Auth0 e formatá-los conforme necessário para o Google SecOps. Consulte a documentação do Auth0 para ver detalhes sobre as variáveis de contexto e as opções de scripting disponíveis. Certifique-se de que a carga útil final está em conformidade com o formato UDM do Google SecOps esperado.
- Clique em Guardar para criar o webhook.
- Acione o evento associado ao gancho (por exemplo, registe um novo utilizador, inicie sessão).
- Valide se os registos estão a ser enviados para o Google SecOps verificando o feed na consola do Google SecOps.
Tabela de mapeamento da UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
client_id |
principal.asset.product_object_id |
Mapeado diretamente a partir do campo client_id . |
client_name |
principal.hostname |
Mapeado diretamente a partir do campo client_name . |
connection |
security_result.description |
Mapeado diretamente a partir do campo connection . |
connection_id |
security_result.rule_id |
Mapeado diretamente a partir do campo connection_id . |
date |
metadata.event_timestamp |
Analisado a partir do campo date através do formato ISO8601. |
description |
metadata.description |
Mapeado diretamente a partir do campo description . |
details.error |
security_result.detection_fields |
Mapeado a partir do campo details.error . A chave é "Error". |
details.error.oauthError |
security_result.detection_fields |
Mapeado a partir do campo details.error.oauthError . A chave é "oauthError". |
details.error.type |
security_result.detection_fields |
Mapeado a partir do campo details.error.type . A chave é "oauth_error_type". |
details.ipOnAllowlist |
security_result.detection_fields |
Mapeado a partir do campo details.ipOnAllowlist . A chave é "ipOnAllowlist". |
details.link |
target.url |
Mapeado diretamente a partir do campo details.link , se estiver presente. Caso contrário, é derivado de outros campos (veja abaixo). |
details.request.auth.strategy |
security_result.detection_fields |
Mapeado a partir do campo details.request.auth.strategy . A chave é "strategy". |
details.request.body.app_metadata.blockedReason |
security_result.detection_fields |
Mapeado a partir 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 a partir do campo details.request.body.app_metadata.customer_id . |
details.request.body.app_metadata.migrated |
security_result.detection_fields |
Mapeado a partir do campo details.request.body.app_metadata.migrated . A chave é "migrada". |
details.request.channel |
security_result.detection_fields |
Mapeado a partir do campo details.request.channel . A chave é "channel". |
details.request.method |
network.http.method |
Mapeado diretamente a partir do campo details.request.method após a conversão para letras maiúsculas. |
details.request.path |
target.url |
Mapeado diretamente a partir 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 a partir do campo details.response.body.email . |
details.response.body.email_verified |
security_result.detection_fields |
Mapeado a partir do campo details.response.body.email_verified . A chave é "email_verified". |
details.response.body.nickname |
target.user.user_display_name |
Mapeado diretamente a partir do campo details.response.body.nickname . |
details.response.body.user_id |
target.user.userid |
Mapeado diretamente a partir do campo details.response.body.user_id . |
details.response.statusCode |
network.http.response_code |
Mapeado diretamente a partir do campo details.response.statusCode após a conversão para número inteiro. |
details.return_to |
target.url |
Mapeado diretamente a partir 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 a partir do campo details.session_id . |
details.stats.loginsCount |
additional.fields |
Mapeado a partir do campo details.stats.loginsCount . A chave é "loginsCount". |
details.requiresVerification |
security_result.detection_fields |
Mapeado a partir do campo details.requiresVerification . A chave é "requiresVerification". |
details.to |
target.user.email_addresses |
Mapeado diretamente a partir do campo details.to . |
hostname |
target.hostname |
Mapeado diretamente a partir do campo hostname . |
ip |
principal.ip |
Mapeado diretamente a partir do campo ip . |
js_data.audience |
target.url |
Mapeado diretamente a partir 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 a partir do campo js_data.details.body.email_verified . A chave é "email_verified". |
js_data.details.body.is_signup |
security_result.detection_fields |
Mapeado a partir do campo js_data.details.body.is_signup . A chave é "is_signup". |
js_data.details.body.transaction.redirect_uri |
target.url |
Mapeado diretamente a partir 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 a partir do campo js_data.scope . A chave é "scope". |
js_data.tracking_id |
security_result.detection_fields |
Mapeado a partir do campo js_data.tracking_id . A chave é "tracking_id". |
log_id |
metadata.product_log_id |
Mapeado diretamente a partir do campo log_id . |
metadata.log_type |
metadata.log_type |
Mapeado diretamente a partir do campo log_type . |
metadata.product_name |
metadata.product_name |
Definido como "AUTH_ZERO". |
metadata.vendor_name |
metadata.vendor_name |
Definido como "AUTH_ZERO". |
metadata.product_event_type |
metadata.product_event_type |
Mapeado diretamente a partir do campo type . |
network.http.parsed_user_agent |
network.http.parsed_user_agent |
Analisado a partir do campo user_agent . |
network.http.user_agent |
network.http.user_agent |
Mapeado diretamente a partir 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 a partir do campo strategy . A chave é "strategy". |
strategy_type |
security_result.detection_fields |
Mapeado a partir do campo strategy_type . A chave é "strategy_type". |
target.user.email_addresses |
target.user.email_addresses |
Mapeado diretamente a partir do campo user_name , se for um endereço de email. Caso contrário, é derivado de outros campos (consulte acima). |
target.user.userid |
target.user.userid |
Mapeado diretamente a partir 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 a partir do campo user_agent . |
user_id |
target.user.userid |
Mapeado diretamente a partir do campo user_id . |
user_name |
target.user.email_addresses |
Mapeado diretamente a partir do campo user_name . Definido como "MACHINE" se security_result.action for "ALLOW" e type for "slo", "sapi", "s", "ss" ou "ssa". Definido 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 da Google SecOps.