Coletar registros do Auth0
Visão geral
Esse analisador extrai eventos de registro do Auth0 de mensagens formatadas em JSON. Ele inicializa os campos do UDM, analisa o payload JSON, mapeia campos relevantes para o esquema do UDM e categoriza eventos com base no campo type, definindo ações de segurança e tipos de evento apropriados.
Antes de começar
- Verifique se você tem uma instância do Google SecOps.
- Uma conta do Auth0 com as permissões necessárias.
Configurar um feed no Google SecOps para processar registros do Auth0
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, Logs 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 de recursos: o namespace de recursos.
- Rótulos de ingestão: o rótulo aplicado aos eventos desse 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 gerar uma chave secreta para autenticar esse feed.
- Copie e armazene a chave secreta. Não é possível acessar essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas essa ação torna a chave secreta 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.
Criar uma chave de API para o feed de webhook
Acesse o console do Google Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especificar o URL do endpoint
- No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de 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 especificar no URL. Se o cliente do webhook não tiver suporte a 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 autenticação 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 Monitoramento > Streams.
- Clique em Criar fluxo de registros.
- Clique no botão Webhook personalizado e escolha um nome. Por exemplo: Webhook do Google SecOps.
- Configure o seguinte:
- URL do 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. Ele 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 que você selecione pontos de dados específicos do evento do Auth0 e os formate conforme necessário para o Google SecOps. Consulte a documentação da Auth0 para saber mais sobre as variáveis de contexto e as 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.
- Acionar o evento associado ao hook (por exemplo, registrar um novo usuário, fazer login).
- Verifique se os registros estão sendo enviados ao Google SecOps no feed do 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 é "Erro". |
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, ou 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 foi "migrada". |
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, será derivado de outros campos (consulte 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, será derivado de outros campos (consulte 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 é "escopo". |
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 (PERMITIR ou BLOQUEAR). 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, será 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. |
Alterações
2024-03-07
- Correção de bugs:
- Mapeou "data.user_name" para "target.user.email_addresses".
- Mapeamos "data.details.body.email_verified" e "data.details.body.is_signup" para "security_result.detection_fields".
- "data.details.body.transaction.redirect_uri" foi associado a "target.url".
2023-06-19
- Parser recém-criado.