Recolha registos de atividade do Duo

Compatível com:

Este documento descreve como exportar os registos de atividade do Duo e carregá-los no Google Security Operations implementando o script de carregamento escrito em Python como uma função do Cloud Run e como os campos de registo são mapeados para os campos do modelo de dados unificado (UDM) do Google SecOps.

Para mais informações, consulte o artigo Vista geral da ingestão de dados no Google SecOps.

Uma implementação típica consiste na atividade do Duo e no script de carregamento implementado como funções do Cloud Run para enviar registos para o Google SecOps. Cada implementação do cliente pode ser diferente e mais complexa.

A implementação contém os seguintes componentes:

  • Atividade do Duo: a plataforma a partir da qual recolhe registos.

  • Funções do Cloud Run: o script de carregamento implementado como funções do Cloud Run para obter registos da atividade do Duo e carregá-los no Google SecOps.

  • Google SecOps: retém e analisa os registos.

Nota: uma etiqueta de carregamento identifica o analisador que normaliza os dados de registo não processados para o formato UDM estruturado. As informações neste documento aplicam-se ao analisador com a etiqueta de carregamento DUO_ACTIVITY.

Antes de começar

  • Certifique-se de que tem acesso ao painel de administração do Duo.
  • Certifique-se de que está a usar a versão 2 ou posterior da API Duo Admin.

Configure a Atividade do Duo

  1. Inicie sessão no painel de administração do Duo como administrador. Para mais informações, consulte o artigo Vista geral do painel de administração do Duo Administration.
  2. Clique em Aplicações > Proteger uma aplicação.
  3. Na lista Applications (Aplicações), clique em Admin API > Protect para obter a chave de integração, a chave secreta e o nome do anfitrião da API.
  4. Selecione as autorizações necessárias que quer conceder à aplicação da API Admin. Para mais informações acerca das autorizações necessárias para as respetivas operações, consulte a API Duo Admin.

Configure o carregamento de registos para o Google SecOps

  1. Crie um diretório de implementação para armazenar os ficheiros das funções do Cloud Run. Este diretório vai conter todos os ficheiros necessários para a implementação.
  2. Copie todos os ficheiros do subdiretório do GitHub da Atividade do Duo localizado no repositório do GitHub do Google SecOps para este diretório de implementação.
  3. Copie a pasta comum e todo o respetivo conteúdo para o diretório de implementação.
  4. Edite o ficheiro .env.yml para adicionar todas as variáveis de ambiente necessárias.
  5. Configure as variáveis de ambiente marcadas como Secret no Secret Manager. Para mais informações sobre como criar segredos, consulte o artigo Criar e aceder a segredos.
  6. Use o nome do recurso do segredo como o valor das variáveis de ambiente.
  7. Introduza o valor DUO_ACTIVITY na variável de ambiente CHRONICLE_NAMESPACE.
  8. No campo Código fonte, selecione Carregamento ZIP.
  9. No campo Contentor de destino, clique em Procurar para selecionar um contentor do Cloud Storage para carregar o código fonte como parte da implementação.
  10. No campo Ficheiro ZIP, clique em Procurar para selecionar um ficheiro ZIP a carregar a partir do sistema de ficheiros local. Os ficheiros de origem da função têm de estar localizados na raiz do ficheiro ZIP.
  11. Clique em Implementar.

Para mais informações, consulte o artigo Use scripts de carregamento implementados como funções do Cloud Run.

Formatos de registo de atividade do Duo suportados

O analisador de atividade do Duo suporta registos em formatos JSON.

Registos de exemplo de atividade do Duo suportados

  1. JSON

      {
        "access_device": {
          "browser": "Chrome",
          "browser_version": "127.0.0.0",
          "ip": {
            "address": "198.51.100.0"
          },
          "location": {
            "city": "Riverside",
            "country": "United States",
            "state": "California"
          },
          "os": "Windows",
          "os_version": "10"
        },
        "action": {
          "details": null,
          "name": "bypass_create"
        },
        "activity_id": "188c068b-1ef4-4c0a-80cc-700ee9a08612",
        "actor": {
          "details": "{\\"created\\": \\"2022-09-15T17: 27: 31.000000+00: 00\\", \\"last_login\\": \\"2024-08-26T22: 48: 50.000000+00: 00\\", \\"email\\": \\"test@gmail.com\\", \\"status\\": null, \\"groups\\": null}",
          "key": "dummyuserid",
          "name": "test",
          "type": "admin"
        },
        "akey": "DA06L58ASEO0DOKNXGXZ",
        "application": null,
        "old_target": null,
        "outcome": null,
        "target": {
          "details": "{\\"bkeys\\": [\\"DB8VPGAF6674GKS43FS9\\"], \\"count\\": 1, \\"valid_secs\\": 3600, \\"remaining_uses\\": 1, \\"auto_generated\\": true}",
          "key": "DU3H7GRU6UIENBKX5HRA",
          "name": "test",
          "type": "user_bypass"
        },
        "ts": "2024-08-26T22:49:21.975784+00:00"
      }
    
    

Referência de mapeamento de campos

Referência de mapeamento de campos: identificador do evento para tipo de evento

A tabela seguinte apresenta os DUO_ACTIVITY tipos de registos e os respetivos tipos de eventos da UDM.
Event Identifier Event Type Security Category
admin_activate_duo_push DEVICE_PROGRAM_DOWNLOAD
admin_factor_restrictions RESOURCE_PERMISSIONS_CHANGE
admin_login USER_UNCATEGORIZED
admin_rectivates_duo_push DEVICE_PROGRAM_DOWNLOAD
admin_reset_password USER_CHANGE_PASSWORD
admin_send_reset_password_email EMAIL_TRANSACTION
bypass_create RESOURCE_CREATION
bypass_delete RESOURCE_DELETION
bypass_view RESOURCE_READ
deregister_devices USER_RESOURCE_DELETION
device_change_enrollment_summary_notification_answered USER_COMMUNICATION
device_change_enrollment_summary_notification_answered_notify_admin USER_COMMUNICATION
device_change_enrollment_summary_notification_send USER_COMMUNICATION
device_change_notification_answered USER_COMMUNICATION
device_change_notification_answered_notify_admin USER_COMMUNICATION
device_change_notification_create RESOURCE_CREATION
device_change_notification_send USER_COMMUNICATION
group_create GROUP_CREATION
group_delete GROUP_DELETION
group_update GROUP_MODIFICATION
hardtoken_create RESOURCE_CREATION
hardtoken_delete RESOURCE_DELETION
hardtoken_resync RESOURCE_WRITTEN
hardtoken_update RESOURCE_WRITTEN
integration_create RESOURCE_CREATION
integration_delete RESOURCE_DELETION
integration_group_policy_add GROUP_UNCATEGORIZED
integration_group_policy_remove GROUP_UNCATEGORIZED
integration_policy_assign USER_UNCATEGORIZED
integration_policy_unassign USER_UNCATEGORIZED
integration_skey_bulk_view RESOURCE_READ
integration_skey_view RESOURCE_READ
integration_update RESOURCE_WRITTEN
log_export_start USER_UNCATEGORIZED
log_export_complete USER_UNCATEGORIZED
log_export_failure USER_UNCATEGORIZED
management_system_activate_device_cache DEVICE_CONFIG_UPDATE
management_system_active_device_cache_add_devices RESOURCE_CREATION
management_system_active_device_cache_delete_devices RESOURCE_DELETION
management_system_active_device_cache_edit_devices RESOURCE_WRITTEN
management_system_add_devices RESOURCE_CREATION
management_system_create RESOURCE_CREATION
management_system_delete RESOURCE_DELETION
management_system_delete_devices RESOURCE_DELETION
management_system_device_cache_add_devices RESOURCE_CREATION
management_system_device_cache_create RESOURCE_CREATION
management_system_device_cache_delete RESOURCE_DELETION
management_system_device_cache_delete_devices RESOURCE_DELETION
management_system_download_device_api_script DEVICE_PROGRAM_DOWNLOAD
management_system_pkcs12_enrollment RESOURCE_CREATION
management_system_sync_failure USER_UNCATEGORIZED
management_system_sync_success USER_UNCATEGORIZED
management_system_update USER_UNCATEGORIZED
management_system_view_password RESOURCE_READ
management_system_view_token RESOURCE_READ
phone_activation_code_regenerated RESOURCE_CREATION
phone_associate RESOURCE_CREATION
phone_create RESOURCE_CREATION
phone_delete RESOURCE_DELETION
phone_disassociate RESOURCE_DELETION
phone_new_sms_passcode RESOURCE_CREATION
phone_update RESOURCE_WRITTEN
policy_create RESOURCE_CREATION
policy_delete RESOURCE_DELETION
policy_update RESOURCE_WRITTEN
u2ftoken_create RESOURCE_CREATION
u2ftoken_delete RESOURCE_DELETION
user_not_enrolled_lockout USER_CHANGE_PERMISSIONS
user_adminapi_lockout USER_CHANGE_PERMISSIONS
user_lockout_cleared USER_CHANGE_PERMISSIONS
webauthncredential_create RESOURCE_CREATION
webauthncredential_delete RESOURCE_DELETION
webauthncredential_rename RESOURCE_WRITTEN

Referência de mapeamento de campos: DUO_ACTIVITY

A tabela seguinte apresenta os campos de registo do DUO_ACTIVITY tipo de registo e os respetivos campos UDM.

Log field UDM mapping Logic
principal.platform If the access_device.os log field value matches the regular expression pattern (?i)Win, then the principal.platform UDM field is set to WINDOWS.

Else, if the access_device.os log field value matches the regular expression pattern (?i)Lin, then the principal.platform UDM field is set to LINUX.

Else, if the access_device.os log field value matches the regular expression pattern (?i)Mac, then the principal.platform UDM field is set to MAC.

Else, if the access_device.os log field value matches the regular expression pattern (?i)ios, then the principal.platform UDM field is set to IOS.

Else, if the access_device.os log field value matches the regular expression pattern (?i)Chrome, then the principal.platform UDM field is set to CHROME_OS.

Else, if the access_device.os log field value matches the regular expression pattern (?i)Android, then the principal.platform UDM field is set to ANDROID.

Else, the principal.platform UDM field is set to UNKNOWN_PLATFORM.
access_device.os_version principal.platform_version
access_device.ip.address principal.ip
access_device.location.country principal.location.country_or_region
access_device.location.state principal.location.state
access_device.location.city principal.location.city
access_device.browser principal.asset.attribute.labels[access_device_browser]
access_device.browser_version principal.asset.attribute.labels[access_device_browser_version]
ts metadata.event_timestamp
activity_id metadata.product_log_id
akey principal.asset.product_object_id
outcome.result security_result.action_details
application.key principal.resource.product_object_id
application.name principal.application
application.type principal.resource.resource_subtype
action.details principal.user.attribute.labels[action_details]
action.name metadata.product_event_type
actor.key principal.user.userid
actor.name principal.user.user_display_name
actor.type principal.user.attribute.labels[actor_type]
target.key target.asset.attribute.labels[target_key]
target.name target.asset.hostname
target.type target.asset.category
target.details target.user.attribute.labels[target_details]
old_target.key about.asset.attribute.labels[old_target_key]
old_target.name about.asset.hostname
old_target.type about.asset.category
old_target.details about.user.attribute.labels[old_target_details]
actor.details.created principal.user.first_seen_time
actor.details.last_login principal.user.last_login_time
actor.details.status principal.user.attribute.labels[status]
actor.details.email principal.user.email_addresses
actor.details.group.key principal.user.attribute.labels[actor_details_group_key]
actor.details.group.name principal.user.attribute.labels[actor_details_group_name]

O que se segue?

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