Coletar registros do Auth0

Compatível com:

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

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed (por exemplo, Logs do Auth0).
  4. Selecione Webhook como o Tipo de origem.
  5. Selecione AUTH_ZERO como o Tipo de registro.
  6. Clique em Próxima.
  7. 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.
  8. Clique em Próxima.
  9. Revise a configuração do feed na tela Finalizar e clique em Enviar.
  10. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar esse feed.
  11. 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.
  12. 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.
  13. Clique em Concluído.

Criar uma chave de API para o feed de webhook

  1. Acesse o console do Google Cloud > Credenciais.

    Ir para Credenciais

  2. Clique em Criar credenciais e, em seguida, selecione Chave de API.

  3. Restrinja o acesso da chave de API à API Google Security Operations.

Especificar o URL do endpoint

  1. No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de webhook.
  2. 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

  1. Acesse o painel do Auth0.
  2. Acesse Monitoramento > Streams.
  3. Clique em Criar fluxo de registros.
  4. Clique no botão Webhook personalizado e escolha um nome. Por exemplo: Webhook do Google SecOps.
  5. 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.

  1. Clique em Salvar para criar o webhook.
  2. Acionar o evento associado ao hook (por exemplo, registrar um novo usuário, fazer login).
  3. 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.