Recolha registos de contexto de utilizador do Duo

Compatível com:

Este documento explica como carregar registos de contexto do utilizador do Duo para o Google Security Operations através de uma API. O analisador processa dados JSON, mapeando informações do utilizador (incluindo a atribuição de alias de nomes de utilizador a endereços de email, grupos, números de telefone e detalhes do dispositivo) ao UDM e capturando o estado da conta do utilizador. Também processa estruturas de dados aninhadas e realiza várias transformações e uniões de dados para criar o evento UDM final.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

Configure a aplicação da API Admin e obtenha as chaves

  1. Inicie sessão no painel de administração do Duo como administrador.
  2. Na barra lateral esquerda, clique em Aplicações > Gerir aplicações.
  3. Prima o botão Adicionar aplicação.
  4. No campo de pesquisa, escreva API Admin e clique em Adicionar junto a API Duo Admin.
  5. No ecrã seguinte, são apresentadas as seguintes informações:
    • Chave de integração: (uma string como DIYYYYYYYYYYYYYY).
    • Chave secreta: uma string de 40 carateres.
    • Nome do anfitrião da API: por exemplo, api-abcd1234.duosecurity.com.
  6. Copie e guarde a chave de integração, a chave secreta e o nome do anfitrião da API num local seguro.
  7. Desloque a página até Definições e defina as Autorizações como Conceder recurso de leitura.
  8. Clique em Guardar alterações.

Configure feeds

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em + Adicionar novo feed.
  3. No campo Nome do feed, introduza um nome para o feed (por exemplo, Duo Users Logs).
  4. Selecione API de terceiros como o Tipo de origem.
  5. Selecione o tipo de registo Contexto do utilizador do Duo.
  6. Clicar em Seguinte.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • Nome de utilizador: introduza a chave de integração copiada anteriormente.
    • Segredo: introduza a chave secreta copiada anteriormente.
    • Nome de anfitrião da API: indique o URL do servidor da API Duo (por exemplo, api-abcd1234.duosecurity.com).
    • Espaço de nomes do recurso: o espaço de nomes do recurso.
    • Etiquetas de carregamento: a etiqueta aplicada aos eventos deste feed.
  8. Clicar em Seguinte.
  9. Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
access_device.browser event.idm.entity.entity.resource.attribute.labels.value O valor é retirado diretamente do campo access_device.browser ou surfaced_auth.access_device.browser se o primeiro estiver vazio. A chave está definida como "access_device browser".
access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value O valor é retirado diretamente do campo access_device.browser_version ou surfaced_auth.access_device.browser_version se o primeiro estiver vazio. A chave está definida como "access_device browser_version".
access_device.ip.address event.idm.entity.entity.ip O valor é retirado diretamente do campo access_device.ip.address ou surfaced_auth.access_device.ip se o primeiro estiver vazio.
access_device.location.city event.idm.entity.entity.location.city O valor é retirado diretamente do campo access_device.location.city ou surfaced_auth.access_device.location.city se o primeiro estiver vazio.
access_device.location.country event.idm.entity.entity.location.country_or_region O valor é retirado diretamente do campo access_device.location.country ou surfaced_auth.access_device.location.country se o primeiro estiver vazio.
access_device.location.state event.idm.entity.entity.location.state O valor é retirado diretamente do campo access_device.location.state ou surfaced_auth.access_device.location.state se o primeiro estiver vazio.
access_device.os event.idm.entity.entity.asset.platform_software.platform O valor é derivado do campo access_device.os ou surfaced_auth.access_device.os se o primeiro estiver vazio. Se o valor corresponder (sem distinção entre maiúsculas e minúsculas) a "ios" ou "mac", o campo UDM é definido como "MAC". Se corresponder a "windows", o campo UDM é definido como "WINDOWS". Se corresponder a "linux", o campo UDM é definido como "LINUX".
access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version O valor é retirado diretamente do campo access_device.os_version ou surfaced_auth.access_device.os_version se o primeiro estiver vazio.
action.details event.idm.entity.sec_result.action_details O valor é retirado deste campo se action estiver vazio.
action.name event.idm.entity.sec_result.detection_fields.value O valor é retirado diretamente do campo. A chave está definida como "action_name".
activity_id event.idm.entity.sec_result.detection_fields.value O valor é retirado diretamente do campo. A chave está definida como "activity_id".
actor.details.created event.idm.entity.entity.user.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "created" (criada).
actor.details.email event.idm.entity.entity.user.email_addresses O valor é retirado diretamente do campo.
actor.details.groups.key event.idm.entity.entity.user.group_identifiers O valor é retirado diretamente do campo.
actor.details.groups.name event.idm.entity.entity.user.group_identifiers O valor é retirado diretamente do campo.
actor.details.last_login event.idm.entity.entity.user.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "last_login".
actor.details.status event.idm.entity.entity.user.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "status".
actor.key event.idm.entity.entity.resource.product_object_id O valor é retirado diretamente do campo.
actor.name event.idm.entity.entity.user.user_display_name O valor é retirado diretamente do campo ou surfaced_auth.user.name se o primeiro estiver vazio.
actor.type event.idm.entity.entity.user.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "actor type".
akey event.idm.entity.metadata.product_entity_id O valor é retirado diretamente do campo ou sekey se akey estiver vazio.
application event.idm.entity.entity.application O valor é retirado diretamente do campo.
collection_time.seconds, create_time.seconds event.idm.entity.metadata.collected_timestamp.seconds, event.timestamp.seconds O valor superior de collection_time.seconds e create_time.seconds é usado para collected_timestamp.seconds e timestamp.seconds de nível superior.
collection_time.nanos, create_time.nanos event.idm.entity.metadata.collected_timestamp.nanos, event.timestamp.nanos O valor de nanosegundos correspondente ao maior valor entre collection_time.seconds e create_time.seconds é usado para collected_timestamp.nanos e timestamp.nanos de nível superior.
email event.idm.entity.entity.user.email_addresses O valor é retirado diretamente do campo.
explanations event.idm.entity.entity.resource.attribute.labels Os pares de chave-valor em cada objeto na matriz explanations são convertidos em etiquetas. A chave de cada etiqueta tem o prefixo "explanation ".
firstname event.idm.entity.entity.user.first_name O valor é retirado diretamente do campo.
from_common_netblock event.idm.entity.entity.resource.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "from_common_netblock".
from_new_user event.idm.entity.entity.resource.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "from_new_user".
groups.N.name (N=0..10) event.idm.entity.entity.user.group_identifiers O valor é retirado diretamente do campo.
lastname event.idm.entity.entity.user.last_name O valor é retirado diretamente do campo.
low_risk_ip event.idm.entity.entity.resource.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "low_risk_ip".
phones.0.model event.idm.entity.relations.entity.asset.hardware.model O valor é retirado diretamente do campo.
phones.0.number event.idm.entity.entity.user.phone_numbers O valor é retirado diretamente do campo.
phones.0.phone_id event.idm.entity.relations.entity.asset.product_object_id O valor é retirado diretamente do campo.
phones.0.platform event.idm.entity.relations.entity.asset.hardware.manufacturer O valor é retirado diretamente do campo.
priority_event event.idm.entity.entity.resource.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "priority_event".
realname event.idm.entity.entity.user.user_display_name O valor é retirado diretamente do campo.
sekey event.idm.entity.metadata.product_entity_id O valor é retirado diretamente do campo se akey estiver vazio.
state event.idm.entity.entity.resource.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "state".
status event.idm.entity.entity.user.attribute.labels.value, event.idm.entity.entity.user.user_authentication_status O valor é retirado diretamente do campo. A chave da etiqueta está definida como "status". O valor também é usado para determinar o user_authentication_status. "active" e "bypass" são mapeados para "ACTIVE", "disabled" e "pending deletion" são mapeados para "SUSPENDED" e "locked out" é mapeado para "NO_ACTIVE_CREDENTIALS".
surfaced_auth.access_device.browser event.idm.entity.entity.resource.attribute.labels.value O valor é retirado deste campo se access_device.browser estiver vazio. A chave está definida como "surfaced_auth access_device browser".
surfaced_auth.access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value O valor é retirado deste campo se access_device.browser_version estiver vazio. A chave está definida como "surfaced_auth access_device browser_version".
surfaced_auth.access_device.ip event.idm.entity.entity.ip O valor é retirado deste campo se access_device.ip.address estiver vazio.
surfaced_auth.access_device.location.city event.idm.entity.entity.location.city O valor é retirado deste campo se access_device.location.city estiver vazio.
surfaced_auth.access_device.location.country event.idm.entity.entity.location.country_or_region O valor é retirado deste campo se access_device.location.country estiver vazio.
surfaced_auth.access_device.location.state event.idm.entity.entity.location.state O valor é retirado deste campo se access_device.location.state estiver vazio.
surfaced_auth.access_device.os event.idm.entity.entity.asset.platform_software.platform O valor é retirado deste campo se access_device.os estiver vazio. A lógica de mapeamento para o campo UDM é a mesma que para access_device.os.
surfaced_auth.access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version O valor é retirado deste campo se access_device.os_version estiver vazio.
surfaced_auth.user.key event.idm.entity.entity.user.userid O valor é retirado deste campo se username estiver vazio.
surfaced_auth.user.name event.idm.entity.entity.user.user_display_name O valor é retirado deste campo se actor.name estiver vazio.
target.details.biometrics_status event.idm.entity.entity.asset.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "biometrics_status".
target.details.country_code event.idm.entity.entity.asset.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "country_code".
target.details.extension event.idm.entity.entity.asset.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "extension".
target.details.manufacturer event.idm.entity.entity.asset.hardware.manufacturer O valor é retirado diretamente do campo.
target.details.model event.idm.entity.entity.asset.hardware.model O valor é retirado diretamente do campo.
target.details.number event.idm.entity.entity.user.phone_numbers O valor é retirado diretamente do campo.
target.details.os event.idm.entity.entity.asset.software.name O valor é retirado diretamente do campo.
target.details.os_version event.idm.entity.entity.asset.software.version O valor é retirado diretamente do campo.
target.details.passcode_status event.idm.entity.entity.asset.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "passcode_status".
target.details.tampered_status event.idm.entity.entity.asset.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "tampered_status".
target.key event.idm.entity.entity.asset.asset_id O valor é retirado diretamente do campo.
target.name event.idm.entity.entity.asset.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "name".
target.type event.idm.entity.entity.asset.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "type".
triage_event_uri event.idm.entity.entity.url O valor é retirado diretamente do campo.
triaged_as_interesting event.idm.entity.entity.resource.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "triaged_as_interesting".
ts event.timestamp.seconds, event.idm.entity.metadata.collected_timestamp.seconds A data/hora é analisada a partir deste campo, se estiver presente, usando o formato ISO8601 ou RFC 3339. Os segundos e os nanossegundos extraídos são usados para o timestamp de nível superior e o collected_timestamp.
type event.idm.entity.entity.resource.attribute.labels.value O valor é retirado diretamente do campo. A chave está definida como "type".
user_id event.idm.entity.metadata.product_entity_id O valor é retirado diretamente do campo.
username event.idm.entity.entity.user.userid O valor é retirado diretamente do campo ou surfaced_auth.user.key se username estiver vazio.
(Lógica do analisador) event.idm.entity.metadata.vendor_name Codificado como "Duo".
(Lógica do analisador) event.idm.entity.metadata.product_name Codificado de forma rígida para "Contexto do utilizador do Duo".
(Lógica do analisador) event.idm.entity.metadata.entity_type Determinado com base na presença de outros campos. Se user_present for verdadeiro, é definido como "USER". Se asset_mid_present for verdadeiro, é definido como "ASSET". Se ip_present for verdadeiro, é definido como "IP_ADDRESS". Se resource_present for verdadeiro, é definido como "RESOURCE". Caso contrário, é definido como "UNKNOWN_ENTITYTYPE".
(Lógica do analisador) event.idm.entity.relations.entity_type Definido como "ASSET" se phones[0] não estiver vazio.
(Lógica do analisador) event.idm.entity.relations.relationship Definido como "OWNS" se phones[0] não estiver vazio.
(Lógica do analisador) event.idm.entity.relations.entity.asset.type Definido como "MOBILE" se phones[0] não estiver vazio.

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