Coletar registros do Okta

Compatível com:

Este documento explica como transferir registros do Okta para o Google Security Operations usando a API Okta. O analisador extrai registros do sistema, processando eventos únicos e em lote em uma matriz JSON. Ele normaliza os dados no formato UDM, mapeando os campos do Okta para equivalentes do UDM, enriquecendo os dados com agentes de usuário analisados, informações geográficas e detalhes de autenticação, além de gerar eventos de resultados de segurança com base em resultados e informações de risco.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se você tem acesso privilegiado ao Okta.

Configurar o Okta

Para configurar o SSO do Okta, conclua as seguintes tarefas:

Criar um usuário administrativo do Okta com privilégios de leitura somente

  1. Faça login no console do administrador do Okta.
  2. Crie um usuário padrão.

    • Acesse Diretório > Pessoas.
    • Clique em Adicionar pessoa e preencha os campos obrigatórios.
  3. Selecione Segurança > Administradores.

  4. Clique em Adicionar administrador.

  5. No campo Atribuição de administrador pelo administrador, encontre o usuário padrão.

  6. Na seção papéis, selecione Administrador somente leitura na lista.

  7. Saia da conta de administrador.

Receber chave da API

  1. Faça login no Console do administrador do Okta com o usuário administrador somente leitura.
  2. Acesse Segurança > API > Tokens.
  3. Clique em Criar token.
  4. Dê um nome significativo para o token.
  5. Informe a zona de IP em que a API será usada. Se não tiver certeza, selecione qualquer IP.
  6. Clique em Criar token.
  7. Copie a chave de API.
  8. Clique em OK, entendi.

Configurar um feed no Google SecOps para processar registros do Okta

  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, Okta Logs).
  4. Selecione API de terceiros como o Tipo de origem.
  5. Selecione Okta como o Tipo de registro.
  6. Clique em Próxima.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • Cabeçalho HTTP de autenticação: insira a chave de API do Okta no seguinte formato: Authorization:<API_KEY>.
    • Nome do host da API: especifique o nome de domínio do host do Okta (por exemplo, <your-domain>.okta.com).
    • 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.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
actor.alternateId principal.user.email_addresses Extraídos de actor.alternateId se for um endereço de e-mail. Se não for um endereço de e-mail, será usado como principal.user.userid.
actor.displayName principal.user.user_display_name Mapeado diretamente.
actor.id principal.user.product_object_id Mapeado diretamente.
actor.type principal.user.attribute.roles.name Mapeado diretamente.
authenticationContext.authenticationProvider security_result.detection_fields.value Mapeado diretamente, com a chave authenticationProvider.
authenticationContext.credentialProvider security_result.detection_fields.value Mapeado diretamente, com a chave credentialProvider.
authenticationContext.credentialType extensions.auth.mechanism Usado para derivar o mecanismo de autenticação (OTP, USERNAME_PASSWORD, LOCAL).
authenticationContext.externalSessionId network.parent_session_id Mapeado diretamente.
client.device principal.asset.type / additional.fields.value.string_value Mapeado para principal.asset.type (WORKSTATION, MOBILE, ROLE_UNSPECIFIED) com base no valor. Também mapeado como valor de string com a chave device em additional.fields.
client.geographicalContext.city principal.location.city Mapeado diretamente.
client.geographicalContext.country principal.location.country_or_region Mapeado diretamente.
client.geographicalContext.geolocation.lat principal.location.region_latitude Mapeado diretamente.
client.geographicalContext.geolocation.lon principal.location.region_longitude Mapeado diretamente.
client.geographicalContext.postalCode additional.fields.value.string_value Mapeado diretamente como valor de string com a chave Postal code em additional.fields.
client.geographicalContext.state principal.location.state Mapeado diretamente.
client.ipAddress principal.ip, principal.asset.ip Mapeado diretamente.
client.userAgent.browser target.resource.attribute.labels.value Mapeado diretamente, com a chave Browser.
client.userAgent.os principal.platform Mapeado para a plataforma (LINUX, WINDOWS, MAC) com base no valor.
client.userAgent.rawUserAgent network.http.user_agent, network.http.parsed_user_agent Mapeado e analisado diretamente.
client.zone additional.fields.value.string_value Mapeado diretamente como valor de string com a chave zone em additional.fields.
debugContext.debugData.behaviors security_result.description, security_result.detection_fields Mapeado diretamente à descrição. Os comportamentos individuais são extraídos e adicionados como campos de detecção.
debugContext.debugData.changedAttributes security_result.detection_fields.value Mapeado diretamente, com a chave changedAttributes.
debugContext.debugData.clientAddress principal.ip, principal.asset.ip Mapeado diretamente se request.ipChain e client.ipAddress estiverem ausentes.
debugContext.debugData.deviceFingerprint target.asset.asset_id Mapeado diretamente, prefixado com device_finger_print:.
debugContext.debugData.dtHash security_result.detection_fields.value Mapeado diretamente, com a chave dtHash.
debugContext.debugData.factor security_result.detection_fields.value Mapeado diretamente, com a chave factor.
debugContext.debugData.factorIntent security_result.detection_fields.value Mapeado diretamente, com a chave factorIntent.
debugContext.debugData.logOnlySecurityData.risk.reasons security_result.detection_fields.value Mapeado diretamente, com a chave Risk Reasons.
debugContext.debugData.privilegeGranted target.user.attribute.roles Divididos em privilégios individuais e adicionados como funções com nome e descrição.
debugContext.debugData.pushOnlyResponseType security_result.detection_fields.value Mapeado diretamente, com a chave pushOnlyResponseType.
debugContext.debugData.pushWithNumberChallengeResponseType security_result.detection_fields.value Mapeado diretamente, com a chave pushWithNumberChallengeResponseType.
debugContext.debugData.requestUri extensions.auth.auth_details Mapeado diretamente.
debugContext.debugData.suspiciousActivityEventId security_result.detection_fields.value Mapeado diretamente, com a chave suspiciousActivityEventId.
debugContext.debugData.suspiciousActivityEventType security_result.detection_fields.value Mapeado diretamente, com a chave suspiciousActivityEventType.
debugContext.debugData.threatDetections security_result.detection_fields.value Mapeado diretamente, com a chave threatDetections.
debugContext.debugData.threatSuspected security_result.detection_fields.value, security_result.threat_status Mapeado como um campo de detecção com a chave threatSuspected. Usado para derivar o status de ameaça (ACTIVE ou FALSE_POSITIVE).
debugContext.debugData.url target.url Mapeado diretamente.
displayMessage security_result.summary Mapeado diretamente.
eventType metadata.product_event_type, metadata.event_type Mapeado diretamente para product_event_type. Usado para derivar event_type (USER_LOGIN, USER_LOGOUT, USER_CHANGE_PASSWORD, USER_CHANGE_PERMISSIONS, USER_DELETION, GROUP_MODIFICATION, SETTING_MODIFICATION, SCHEDULED_TASK_ENABLE, RESOURCE_CREATION, USER_UNCATEGORIZED).
legacyEventType security_result.detection_fields.value Mapeado diretamente, com a chave legacyEventType.
outcome.reason security_result.category_details Mapeado diretamente.
outcome.result security_result.action Mapeado para ação (ALLOW, CHALLENGE, BLOCK) com base no valor.
published metadata.event_timestamp Analisado para carimbo de data/hora.
request.ipChain.n.geographicalContext intermediary.location Contexto geográfico dos IPs intermediários na cadeia de solicitações.
request.ipChain.n.ip intermediary.ip Endereços IP de intermediários na cadeia de solicitações.
securityContext.asNumber security_result.detection_fields.value Mapeado diretamente, com a chave asNumber.
securityContext.asOrg security_result.detection_fields.value Mapeado diretamente, com a chave asOrg.
securityContext.domain security_result.detection_fields.value Mapeado diretamente, com a chave domain.
securityContext.isp security_result.detection_fields.value Mapeado diretamente, com a chave isp.
securityContext.isProxy security_result.detection_fields.value Mapeado diretamente, com a chave anonymized IP.
target.n.alternateId target.user.email_addresses / target.user.userid Se for um endereço de e-mail, mapeado para target.user.email_addresses. Se não for um endereço de e-mail, será usado como target.user.userid.
target.n.detailEntry.clientAppId target.asset_id Mapeado diretamente, prefixado com Client_app_id:.
target.n.detailEntry.methodTypeUsed target.resource_ancestors.attribute.labels.value Mapeado diretamente, com a chave methodTypeUsed quando o tipo de destino é AuthenticatorEnrollment.
target.n.detailEntry.methodUsedVerifiedProperties target.resource_ancestors.attribute.labels.value Mapeado diretamente, com a chave methodUsedVerifiedProperties quando o tipo de destino é AuthenticatorEnrollment.
target.n.detailEntry.policyType target.resource_ancestors.attribute.labels.value Mapeado diretamente, com a chave Policy Type.
target.n.detailEntry.signOnModeType security_result.detection_fields.value Mapeado diretamente, com a chave signOnModeType.
target.n.displayName target.user.user_display_name / target.application / target.resource.name Mapeado com base no tipo de destino.
target.n.id target.user.product_object_id / target.resource.product_object_id / target.resource_ancestors.product_object_id Mapeado com base no tipo de destino.
target.n.type target.user.attribute.roles.name / target.resource.resource_subtype / target.resource_ancestors.resource_subtype Mapeado com base no tipo de destino.
transaction.id network.session_id Mapeado diretamente.
transaction.type additional.fields.value.string_value Mapeado diretamente como valor de string com a chave type em additional.fields.
uuid metadata.product_log_id Mapeado diretamente.
N/A metadata.vendor_name Defina como Okta.
N/A metadata.product_name Defina como Okta.
N/A extensions.auth.type Defina como SSO.
N/A is_alert Defina como verdadeiro para eventos security.threat.detected e user.account.report_suspicious_activity_by_enduser.
N/A is_significant Defina como verdadeiro para eventos security.threat.detected e user.account.report_suspicious_activity_by_enduser.

Alterações

2024-05-16

  • Se is_alert for verdadeiro e is_significant for verdadeiro, defina security_result.alert_state como ALERTING.

2024-03-05

  • O campo security_result.action foi atualizado para indicar se o tráfego foi permitido ou bloqueado.

2024-02-16

Correção de bugs:

  • Quando target.0.type é User ou AppUser, target.0.alternateId é mapeado para target.user.userid.
  • Quando target.1.type é User ou AppUser, target.1.alternateId é mapeado para target.user.userid.

2023-12-14

  • securityContext.asNumber foi mapeado para security_result.detection_fields.
  • legacyEventType foi mapeado para security_result.detection_fields.
  • conditional_check foi adicionado antes de definir metadata.event_type.

2023-06-28

  • O valor completo do debugContext.debugData.suspiciousActivityEventType foi mapeado para security_result.detection_fields.
  • O valor completo do debugContext.debugData.logOnlySecurityData.behaviors.New Device foi mapeado para security_result.detection_fields.

2023-06-09

  • O campo debugContext.debugData.deviceFingerprint é mapeado para target.asset.asset_id.
  • O valor completo de debugContext.debugData.risk.reasons foi mapeado para security_result.detection_fields.

2023-05-17

  • O campo "authenticationContext.externalSessionId" está mapeado para "network.parent_session_id".
  • O campo "debugContext.debugData.pushOnlyResponseType" é mapeado para "security_result.detection_fields.key/value".
  • O campo "debugContext.debugData.factor" é mapeado para "security_result.detection_fields.key/value".
  • O campo "debugContext.debugData.factorIntent" é mapeado para "security_result.detection_fields.key/value".
  • O campo "debugContext.debugData.pushWithNumberChallengeResponseType" é mapeado para "security_result.detection_fields.key/value".
  • O campo "debugContext.debugData.dtHash" é mapeado para "security_result.detection_fields.key/value".
  • O campo "client.userAgent.rawUserAgent" é mapeado para "network.http.user_agent".
  • O mapeamento foi alterado de "ALLOW_WITH_MODIFICATION" para o valor de enumeração "CHALLENGE" em "security_result.action".
  • Para o eventType 'system.api_token.create', mude metadata.event_type de 'USER_UNCATEGORIZED' para 'RESOURCE_CREATION'.

2023-04-28

Correção de bugs:

  • O mapeamento de security_result.threat_status para ACTIVE foi modificado quando debugContext.debugData.threatSuspected é true ou mapeado para FALSE_POSITIVE.

2023-03-24

  • Os campos logOnlySecurityData foram mapeados para security_result.detection_fields.
  • Além disso, resolvemos o erro de análise adicionando DEFERRED à lista de ações.

2023-04-11

  • Os campos que são mapeados para http.user_agent foram mapeados para http.parsed_user_agent.
  • target.displayName foi mapeado para target.resource_ancestors.name.
  • targetfield.detailEntry.methodTypeUsed foi mapeado para target.resource_ancestors.attribute.labels.
  • targetfield.detailEntry.methodUsedVerifiedProperties foi mapeado para target.resource_ancestors.attribute.labels.

2023-02-20

  • metadata.event_type mudou de USER_LOGIN para STATUS_UPDATE, em que eventType é user.authentication.auth_via_AD_agent

2022-12-14

  • debugContext.debugData.changedAttributes foi mapeado para security_result.detection_fields.
  • Foi adicionada uma verificação de valor nulo para detail.actor.alternateId.

2022-11-17

  • O campo target[n].alternateId é mapeado para target.resource.attribute.labels.
  • O campo detail.target.0.alternateId é mapeado para target.resource.attribute.labels.

2022-11-08

Correção de bugs:

  • Foi adicionada uma condição para a verificação de e-mail adequada do campo user_email.
  • Foi adicionada uma verificação para o campo Action1 que não está em RATE_LIMIT.
  • Adição de verificação nula e desconhecida para actor.displayName.

2022-11-04

  • Foi adicionado suporte a registros com vários eventos.

2022-10-15

  • signOnModeType mapeado para security_result.detection_fields.
  • authenticationProvider mapeado para security_result.detection_fields.
  • credentialProvider mapeado para security_result.detection_fields.
  • device mapeado para additional.fields.
  • zone mapeado para additional.fields.
  • type mapeado para additional.fields.

2022-10-14

Correção de bugs:

  • Adição de uma verificação condicional para "principal.user.email_addresses" e "target.user.email_addresses".
  • Adição de um grok para verificar se o ip_address é válido para o campo "request.ipChain.0.ip" mapeado para "principal.ip".
  • A condição on_error foi adicionada ao campo "debugContext.debugData.url" mapeado para "target.url".

2022-10-03

  • client.userAgent.os foi mapeado para principal.platform.
  • client.device foi mapeado para principal.asset.type.
  • anonymized IP mapeado (string fixada) para security_result.detection_fields.key, em que o valor "securityContext.isProxy" é correspondente a security_result.detection_fields.value.

16/09/2022

  • "securityContext.asOrg" mapeado para "security_result.category_details".
  • "securityContext.isProxy" mapeado para "security_result.detection_fields".
  • "securityContext.domain" mapeado para "security_result.detection_fields".
  • "securityContext.isp" mapeado para "security_result.detection_fields".
  • "debugContext.debugData.risk.level" mapeado para "security_result.severity".
  • 'debugContext.debugData.risk.reasons' mapeado para 'security_result.detection_fields'.

2022-08-12

  • Os registros recém-ingeridos foram analisados e mapeados para os seguintes campos:
  • "detail.uuid" mapeado para "metadata.product_log_id".
  • "detail.eventType" mapeado para "metadata.product_event_type"
  • "detail.actor.id" mapeado para "principal.user.product_object_id".
  • if 'detail.actor.alternateId' mapped to 'principal.user.userid' else
  • "detail.actor.alternateId" mapeado para "principal.user.email_addresses".
  • "detail.actor.displayName" mapeado para "principal.user.user_display_name".
  • "detail.actor.type" mapeado para ".principal.user.attribute.roles".
  • "detail.client.ipChain.0.ip" mapeado para "principal.ip".
  • "detail.client.ipChain.0.geographicalContext.state" mapeado para "principal.location.state".
  • "detail.client.ipChain.0.geographicalContext.city" mapeado para "principal.location.city".
  • "detail.client.ipChain.0.geographicalContext.country" mapeado para "principal.location.country_or_region".
  • "detail.debugContext.debugData.requestUri" mapeado para "target.url".
  • "detail.target.0.type" mapeado para "target.resource.resource_subtype".
  • "detail.target.0.id" mapeado para "target.resource.resource.product_object_id".
  • "detail.target.0.displayName" mapeado para "target.resource.resource_subtype".
  • "detail.target.0.detailEntry.policyType" mapeado para "target.resource_ancestors.attribute.labels".
  • "detail.outcome.reason" mapeado para "security_result.category_details".
  • "detail.debugContext.debugData.threatSuspected" mapeado para "security_result.detection_fields".
  • "detail.displayMessage" mapeado para "security_result.summary".
  • "detail.outcome.result" mapeado para "security_result.action".
  • "detail.severity" mapeado para "security_result.severity".
  • "detail.transaction.id" mapeado para "network.session_id".
  • "detail.debugContext.debugData.requestUri" mapeado para "extensions.auth.auth_details".

2022-07-08

  • O mapeamento de actor.type foi modificado de principal.user.role_name para principal.user.attribute.roles.
  • O mapeamento de target.0.type foi modificado de target.user.role_name para target.user.attribute.roles.
  • O mapeamento de target.1.type foi modificado de target.user.role_name para target.user.attribute.roles.

2022-06-15

Melhoria:

  • para target.0.type == Token.
  • target.0.detailEntry.clientAppId foi mapeado para target.asset_id.
  • Adicionamos uma verificação condicional para o campo "transaction.id" mapeado para o campo "network.session_id" do UDM.

2022-06-03

Melhoria:

  • Mapeamos debugContext.debugData.privilegeGranted para target.user.attribute.roles.name.
  • O debugContext.debugData.requestUri foi mapeado para extensions.auth.auth_details.
  • Mapeamos debugContext.debugData.suspiciousActivityEventId, debugContext.debugData.threatDetections e debugContext.debugData.threatSuspected para security_result.detection_fields.

2022-03-22

Melhoria:

  • debugContext.debugData.behaviors mapeado para security_result.description.
  • debugContext.debugData.threatSuspected mapeado para security_result.threat_status.
  • debugContext.debugData.risk mapeado para security_result.severity.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.