Coletar registros de contexto do usuário do Duo

Compatível com:

Este documento explica como ingerir registros de contexto do usuário do Duo no Google Security Operations usando uma API. O analisador processa dados JSON, mapeando informações do usuário (incluindo nomes de usuário com alias para endereços de e-mail, grupos, números de telefone e detalhes do dispositivo) para a UDM e capturando o status da conta do usuário. Ele também processa estruturas de dados aninhadas e realiza várias transformações e fusões de dados para criar o evento final da UDM.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

Configurar o aplicativo da API Admin e receber as chaves

  1. Faça login no painel de administração do Duo como administrador.
  2. Na barra lateral à esquerda, clique em Aplicativos > Gerenciar aplicativos.
  3. Pressione o botão Adicionar aplicativo.
  4. No campo de pesquisa, digite API Admin e clique em Adicionar ao lado de API Duo Admin.
  5. Na próxima tela, as seguintes informações serão exibidas:
    • Chave de integração:uma string como DIYYYYYYYYYYYYYY.
    • Chave secreta: uma string de 40 caracteres.
    • Nome do host da API: por exemplo, api-abcd1234.duosecurity.com.
  6. Copie e salve a chave de integração, a chave secreta e o nome do host da API em um local seguro.
  7. Role até Configurações e defina Permissões como Conceder recurso de leitura.
  8. Clique em Salvar alterações.

Configurar feeds

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em + Adicionar novo feed.
  3. No campo Nome do feed, insira 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 registro Contexto do usuário do Duo.
  6. Clique em Próxima.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • Nome de usuário: insira a chave de integração copiada anteriormente.
    • Secret: insira a Chave secreta copiada anteriormente.
    • Nome do host da API: forneça o URL do servidor da API Duo (por exemplo, api-abcd1234.duosecurity.com).
    • Namespace do recurso: o namespace do recurso.
    • Rótulos de ingestão: o rótulo aplicado aos eventos deste feed.
  8. Clique em Próxima.
  9. Revise a configuração do feed na tela Finalizar e clique em Enviar.

Tabela de mapeamento da UDM

Campo de registro Mapeamento do UDM Lógica
access_device.browser event.idm.entity.entity.resource.attribute.labels.value O valor é extraído diretamente do campo access_device.browser ou surfaced_auth.access_device.browser se o primeiro estiver vazio. A chave é definida como "navegador do dispositivo de acesso".
access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value O valor é extraído diretamente do campo access_device.browser_version ou surfaced_auth.access_device.browser_version se o primeiro estiver vazio. A chave é definida como "access_device browser_version".
access_device.ip.address event.idm.entity.entity.ip O valor é extraído 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 é extraído 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 é extraído 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 é extraído 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 diferenciar maiúsculas de minúsculas) a "ios" ou "mac", o campo UDM será definido como "MAC". Se corresponder a "windows", o campo UDM será definido como "WINDOWS". Se corresponder a "linux", o campo UDM será definido como "LINUX".
access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version O valor é extraído 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 é extraído desse campo se action estiver vazio.
action.name event.idm.entity.sec_result.detection_fields.value O valor é extraído diretamente do campo. A chave é definida como "action_name".
activity_id event.idm.entity.sec_result.detection_fields.value O valor é extraído diretamente do campo. A chave é definida como "activity_id".
actor.details.created event.idm.entity.entity.user.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "criada".
actor.details.email event.idm.entity.entity.user.email_addresses O valor é extraído diretamente do campo.
actor.details.groups.key event.idm.entity.entity.user.group_identifiers O valor é extraído diretamente do campo.
actor.details.groups.name event.idm.entity.entity.user.group_identifiers O valor é extraído diretamente do campo.
actor.details.last_login event.idm.entity.entity.user.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "last_login".
actor.details.status event.idm.entity.entity.user.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "status".
actor.key event.idm.entity.entity.resource.product_object_id O valor é extraído diretamente do campo.
actor.name event.idm.entity.entity.user.user_display_name O valor é extraído 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 é extraído diretamente do campo. A chave é definida como "actor type".
akey event.idm.entity.metadata.product_entity_id O valor é extraído diretamente do campo ou sekey se akey estiver vazio.
application event.idm.entity.entity.application O valor é extraído diretamente do campo.
collection_time.seconds, create_time.seconds event.idm.entity.metadata.collected_timestamp.seconds, event.timestamp.seconds O maior valor 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 nanossegundos 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 é extraído 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 rótulos. A chave de cada rótulo é precedida por "explanation ".
firstname event.idm.entity.entity.user.first_name O valor é extraído diretamente do campo.
from_common_netblock event.idm.entity.entity.resource.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "from_common_netblock".
from_new_user event.idm.entity.entity.resource.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "from_new_user".
groups.N.name (N=0..10) event.idm.entity.entity.user.group_identifiers O valor é extraído diretamente do campo.
lastname event.idm.entity.entity.user.last_name O valor é extraído diretamente do campo.
low_risk_ip event.idm.entity.entity.resource.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "low_risk_ip".
phones.0.model event.idm.entity.relations.entity.asset.hardware.model O valor é extraído diretamente do campo.
phones.0.number event.idm.entity.entity.user.phone_numbers O valor é extraído diretamente do campo.
phones.0.phone_id event.idm.entity.relations.entity.asset.product_object_id O valor é extraído diretamente do campo.
phones.0.platform event.idm.entity.relations.entity.asset.hardware.manufacturer O valor é extraído diretamente do campo.
priority_event event.idm.entity.entity.resource.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "priority_event".
realname event.idm.entity.entity.user.user_display_name O valor é extraído diretamente do campo.
sekey event.idm.entity.metadata.product_entity_id O valor é extraído diretamente do campo se akey estiver vazio.
state event.idm.entity.entity.resource.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "state".
status event.idm.entity.entity.user.attribute.labels.value, event.idm.entity.entity.user.user_authentication_status O valor é extraído diretamente do campo. A chave do rótulo é 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 é extraído desse campo se access_device.browser estiver vazio. A chave é definida como "surfaced_auth access_device browser".
surfaced_auth.access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value O valor é extraído desse campo se access_device.browser_version estiver vazio. A chave é definida como "surfaced_auth access_device browser_version".
surfaced_auth.access_device.ip event.idm.entity.entity.ip O valor é extraído desse campo se access_device.ip.address estiver vazio.
surfaced_auth.access_device.location.city event.idm.entity.entity.location.city O valor é extraído desse campo se access_device.location.city estiver vazio.
surfaced_auth.access_device.location.country event.idm.entity.entity.location.country_or_region O valor é extraído desse campo se access_device.location.country estiver vazio.
surfaced_auth.access_device.location.state event.idm.entity.entity.location.state O valor é extraído desse campo se access_device.location.state estiver vazio.
surfaced_auth.access_device.os event.idm.entity.entity.asset.platform_software.platform O valor é extraído desse campo se access_device.os estiver vazio. A lógica para mapear o campo do UDM é a mesma de access_device.os.
surfaced_auth.access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version O valor é extraído desse campo se access_device.os_version estiver vazio.
surfaced_auth.user.key event.idm.entity.entity.user.userid O valor é extraído desse campo se username estiver vazio.
surfaced_auth.user.name event.idm.entity.entity.user.user_display_name O valor é extraído desse campo se actor.name estiver vazio.
target.details.biometrics_status event.idm.entity.entity.asset.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "biometrics_status".
target.details.country_code event.idm.entity.entity.asset.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "country_code".
target.details.extension event.idm.entity.entity.asset.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "extension".
target.details.manufacturer event.idm.entity.entity.asset.hardware.manufacturer O valor é extraído diretamente do campo.
target.details.model event.idm.entity.entity.asset.hardware.model O valor é extraído diretamente do campo.
target.details.number event.idm.entity.entity.user.phone_numbers O valor é extraído diretamente do campo.
target.details.os event.idm.entity.entity.asset.software.name O valor é extraído diretamente do campo.
target.details.os_version event.idm.entity.entity.asset.software.version O valor é extraído diretamente do campo.
target.details.passcode_status event.idm.entity.entity.asset.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "passcode_status".
target.details.tampered_status event.idm.entity.entity.asset.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "tampered_status".
target.key event.idm.entity.entity.asset.asset_id O valor é extraído diretamente do campo.
target.name event.idm.entity.entity.asset.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "name".
target.type event.idm.entity.entity.asset.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "type".
triage_event_uri event.idm.entity.entity.url O valor é extraído diretamente do campo.
triaged_as_interesting event.idm.entity.entity.resource.attribute.labels.value O valor é extraído diretamente do campo. A chave é definida como "triaged_as_interesting".
ts event.timestamp.seconds, event.idm.entity.metadata.collected_timestamp.seconds O carimbo de data/hora é analisado desse campo, se presente, usando o formato ISO8601 ou RFC 3339. Os segundos e 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 é extraído diretamente do campo. A chave é definida como "type".
user_id event.idm.entity.metadata.product_entity_id O valor é extraído diretamente do campo.
username event.idm.entity.entity.user.userid O valor é extraído 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 como "Contexto do usuário 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, ele será definido como "USER". Se asset_mid_present for verdadeiro, ele será definido como "ASSET". Se ip_present for verdadeiro, ele será definido como "IP_ADDRESS". Se resource_present for verdadeiro, ele será definido como "RESOURCE". Caso contrário, será definido como "UNKNOWN_ENTITYTYPE".
(Lógica do analisador) event.idm.entity.relations.entity_type Defina como "ASSET" se phones[0] não estiver vazio.
(Lógica do analisador) event.idm.entity.relations.relationship Defina como "OWNS" se phones[0] não estiver vazio.
(Lógica do analisador) event.idm.entity.relations.entity.asset.type Defina como "MOBILE" se phones[0] não estiver vazio.

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