Coletar registros de atividades do Microsoft Graph

Com suporte em:

Esse analisador extrai campos dos registros de atividades do Microsoft Graph, transformando-os no modelo de dados unificado (UDM). Ele inicializa campos do UDM, analisa o payload, extrai carimbos de data/hora, mapeia várias propriedades para campos do UDM, processa endereços IP e portas e categoriza o tipo de evento com base na presença de informações principais e de rede.

Antes de começar

Verifique se você atende os seguintes pré-requisitos:

  • Instância do Google SecOps.
  • Acesso privilegiado ao Microsoft Entra ID e às contas de armazenamento do Azure.

Configurar a conta de armazenamento do Azure

  1. No console do Azure, pesquise contas de armazenamento.
  2. Clique em Criar.
  3. Especifique valores para os seguintes parâmetros de entrada:
    • Assinatura: selecione a assinatura.
    • Grupo de recursos: selecione o grupo de recursos.
    • Região: selecione a região.
    • Desempenho: selecione o nível de desempenho desejado (o padrão é recomendado).
    • Redundância: selecione o nível de redundância desejado (GRS ou LRS é recomendado).
    • Nome da conta de armazenamento: insira um nome para a nova conta de armazenamento.
  4. Clique em Revisar + criar.
  5. Revise a visão geral da conta e clique em Criar.
  6. Na página Visão geral da conta de armazenamento, selecione o submenu Chaves de acesso em Segurança + rede.
  7. Clique em Mostrar ao lado de key1 ou key2.
  8. Clique em Copiar para a área de transferência para copiar a chave.
  9. Salve a chave em um local seguro para referência futura.

  10. Na página Visão geral da conta de armazenamento, selecione o submenu Endpoints em Configurações.

  11. Clique em Copiar para a área de transferência para copiar o URL do endpoint do Serviço de blobs (por exemplo, https://.blob.core.windows.net).

  12. Salve o URL do endpoint em um local seguro para referência futura.

Configurar a exportação de registros de atividades do Microsoft Graph para a conta de armazenamento

  1. No console do Azure, pesquise Entra ID.
  2. Selecione Monitoramento > Configurações de diagnóstico.
  3. Clique em + Adicionar configuração de diagnóstico.
  4. Dê um nome exclusivo à configuração (por exemplo, ms-graph-activity).
  5. Selecione a categoria MicrosoftGraphActivityLog que você quer exportar para o Google SecOps.
  6. Em Detalhes do destino, selecione Arquivar em uma conta de armazenamento.
  7. Selecione sua assinatura e a conta de armazenamento criada na etapa anterior.
  8. Clique em Salvar.

Como configurar os registros de atividades do Microsoft Graph

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, clique em Configurar um único feed.
  4. No campo Nome do feed , insira um nome para o feed, por exemplo, Registros de atividades do Microsoft Graph.
  5. Selecione Microsoft Azure Blob Storage V2 como o Tipo de origem.
  6. Selecione Registros de atividades do Microsoft Graph como o Tipo de registro.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • URI do Azure: o URL do endpoint do blob.

      ENDPOINT_URL/BLOB_NAME

      Substitua:

      • ENDPOINT_URL: o URL do endpoint do blob (https://<storageaccountname>.blob.core.windows.net)
      • BLOB_NAME: o nome do blob (por exemplo, insights-logs-)
    • Opções de exclusão de origem: selecione a opção de exclusão de acordo com sua preferência.

    • Idade máxima do arquivo: arquivos modificados nos últimos dias. O padrão é 180 dias.

    • Chave compartilhada: a chave de acesso ao Armazenamento de blobs do Azure.

  9. Clique em Próxima.

  10. Revise a nova configuração de feed na tela Finalizar e clique em Enviar.

Registros de amostra de registros de atividades do Microsoft Graph com suporte

  • JSON padrão

    {
      "time": "2024-02-24T02:36:04.9540786Z",
      "resourceId": "/TENANTS/00000000-0000-0000-0000-000000000000/PROVIDERS/MICROSOFT.AADIAM",
      "operationName": "Microsoft Graph Activity",
      "operationVersion": "v1.0",
      "category": "MicrosoftGraphActivityLogs",
      "tenantId": "00000000-0000-0000-0000-000000000000",
      "resultSignature": "200",
      "durationMs": 856631,
      "callerIpAddress": "192.0.2.1",
      "correlationId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "Level": 4,
      "location": "South Central US",
      "properties": {
        "timeGenerated": "2024-02-24T02:36:04.9540786Z",
        "location": "South Central US",
        "requestId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
        "operationId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
        "clientRequestId": "ffffffff-gggg-hhhh-iiii-jjjjjjjjjjjj",
        "apiVersion": "v1.0",
        "requestMethod": "GET",
        "responseStatusCode": 200,
        "tenantId": "00000000-0000-0000-0000-000000000000",
        "ipAddress": "192.0.2.1",
        "userAgent": "Internal-Service-Scanner",
        "requestUri": "https://graph.microsoft.com/v1.0/subscribedSkus",
        "durationMs": 856631,
        "responseSizeBytes": 11808,
        "signInActivityId": "REDACTED_ACTIVITY_ID",
        "roles": "Organization.Read.All Policy.Read.All User.Read.All",
        "tokenIssuedAt": "2024-02-23T23:48:42Z",
        "appId": "00000000-0000-0000-0000-000000000000",
        "userId": null,
        "servicePrincipalId": "11111111-2222-3333-4444-555555555555",
        "identityProvider": "https://sts.windows.net/00000000-0000-0000-0000-000000000000/",
        "clientAuthMethod": "2"
      }
    }
    
  • Formato PascalCase do Azure Monitor

    {
      "TimeGenerated": "2024-06-07T11:52:40.4216173Z",
      "Location": "East US",
      "RequestId": "bbbbbbbb-1111-2222-3333-cccccccccccc",
      "OperationId": "bbbbbbbb-1111-2222-3333-cccccccccccc",
      "ClientRequestId": "dddddddd-4444-5555-6666-eeeeeeeeeeee",
      "ApiVersion": "v1.0",
      "RequestMethod": "GET",
      "ResponseStatusCode": 200,
      "AadTenantId": "00000000-0000-0000-0000-000000000000",
      "IPAddress": "198.51.100.50",
      "UserAgent": "LokiServer/1.2024",
      "RequestUri": "https://graph.microsoft.com/v1.0/users/user@example.com",
      "DurationMs": 1309774,
      "ResponseSizeBytes": 192,
      "SignInActivityId": "REDACTED_ACTIVITY_ID",
      "TokenIssuedAt": "2024-0G-07T11:47:39.0000000Z",
      "AppId": "00000000-0000-0000-0000-000000000000",
      "UserId": "user_id_9999",
      "Scopes": "User.Read User.Read.All",
      "ClientAuthMethod": 2,
      "_ItemId": "unique_item_id_001",
      "Type": "MicrosoftGraphActivityLogs",
      "TenantId": "00000000-0000-0000-0000-000000000000"
    }
    
  • Campos obrigatórios do UDI

    {
      "time": "2024-08-14T19:37:39.2484449Z",
      "resourceId": "/TENANTS/00000000-0000-0000-0000-000000000000/PROVIDERS/MICROSOFT.AADIAM",
      "operationName": "Microsoft Graph Activity",
      "resultSignature": "200",
      "callerIpAddress": "203.0.113.10",
      "properties": {
        "__UDI_RequiredFields_TenantId": "00000000-0000-0000-0000-000000000000",
        "__UDI_RequiredFields_UniqueId": "uuid-123456-7890",
        "timeGenerated": "2024-08-14T19:37:39.2484449Z",
        "requestId": "uuid-123456-7890",
        "requestMethod": "GET",
        "responseStatusCode": 200,
        "ipAddress": "203.0.113.10",
        "userAgent": "Security-Audit-Tool",
        "requestUri": "https://graph.microsoft.com/v1.0/auditLogs/directoryAudits",
        "UserPrincipalObjectID": "user_obj_8888",
        "appId": "00000000-0000-0000-0000-000000000000"
      },
      "tenantId": "00000000-0000-0000-0000-000000000000"
    }
    
  • Formato Beta do UDI

    {
      "time": "2024-08-14T18:37:12.8698765Z",
      "operationVersion": "beta",
      "callerIpAddress": "2001:db8::ff00:42:8329",
      "level": "Informational",
      "properties": {
        "__UDI_RequiredFields_TenantId": "00000000-0000-0000-0000-000000000000",
        "apiVersion": "beta",
        "requestMethod": "GET",
        "responseStatusCode": 404,
        "ipAddress": "2001:db8::ff00:42:8329",
        "requestUri": "https://graph.microsoft.com/beta/users/user_id_masked/photos",
        "userId": "user_id_7777",
        "appId": "00000000-0000-0000-0000-000000000000"
      }
    }
    

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
callerIpAddress principal.asset.ip O campo de registro bruto callerIpAddress é copiado para o campo do UDM.
callerIpAddress principal.ip O campo de registro bruto callerIpAddress é copiado para o campo do UDM.
category security_result.category_details O campo de registro bruto category é copiado para o campo do UDM.
correlationId security_result.detection_fields.value O campo de registro bruto correlationId é copiado para o campo do UDM, em que a chave é correlationId.
Level security_result.detection_fields.value O campo de registro bruto Level é convertido em string e copiado para o campo do UDM, em que a chave é Level.
operationName metadata.product_event_type O campo de registro bruto operationName é copiado para o campo do UDM.
operationVersion additional.fields.value.string_value O campo de registro bruto operationVersion é copiado para o campo do UDM, em que a chave é operationVersion.
properties.apiVersion metadata.product_version O campo de registro bruto properties.apiVersion é copiado para o campo do UDM.
properties.appId target.resource.product_object_id O campo de registro bruto properties.appId é copiado para o campo do UDM.
properties.atContent additional.fields.value.string_value O campo de registro bruto properties.atContent é copiado para o campo do UDM, em que a chave é atContent.
properties.clientAuthMethod extensions.auth.auth_details Com base no valor de properties.clientAuthMethod, o campo do UDM é definido como "Cliente público" (0), "ID do cliente/Segredo do cliente" (1) ou "Certificado do cliente" (2).
properties.clientRequestId additional.fields.value.string_value O campo de registro bruto properties.clientRequestId é copiado para o campo do UDM, em que a chave é clientRequestId.
properties.durationMs network.session_duration.seconds O campo de registro bruto properties.durationMs é convertido de milissegundos para segundos e copiado para o campo do UDM.
properties.identityProvider security_result.detection_fields.value O campo de registro bruto properties.identityProvider é copiado para o campo do UDM, em que a chave é identityProvider.
properties.ipAddress principal.asset.ip O endereço IP do campo de registro bruto properties.ipAddress é extraído e copiado para o campo do UDM.
properties.ipAddress principal.ip O endereço IP do campo de registro bruto properties.ipAddress é extraído e copiado para o campo do UDM.
properties.location principal.location.name O campo de registro bruto properties.location é copiado para o campo do UDM.
properties.operationId security_result.detection_fields.value O campo de registro bruto properties.operationId é copiado para o campo do UDM, em que a chave é operationId.
properties.requestMethod network.http.method O campo de registro bruto properties.requestMethod é copiado para o campo do UDM.
properties.requestId metadata.product_log_id O campo de registro bruto properties.requestId é copiado para o campo do UDM.
properties.responseSizeBytes network.received_bytes O campo de registro bruto properties.responseSizeBytes é convertido em um número inteiro não assinado e copiado para o campo do UDM.
properties.responseStatusCode network.http.response_code O campo de registro bruto properties.responseStatusCode é convertido em um número inteiro e copiado para o campo do UDM.
properties.roles additional.fields.value.string_value O campo de registro bruto properties.roles é copiado para o campo do UDM, em que a chave é roles.
properties.scopes additional.fields.value.string_value O campo de registro bruto properties.scopes é copiado para o campo do UDM, em que a chave é Scopes.
properties.servicePrincipalId principal.user.userid O campo de registro bruto properties.servicePrincipalId é copiado para o campo do UDM se properties.userId estiver vazio.
properties.signInActivityId network.session_id O campo de registro bruto properties.signInActivityId é copiado para o campo do UDM.
properties.tenantId metadata.product_deployment_id O campo de registro bruto properties.tenantId é copiado para o campo do UDM.
properties.tokenIssuedAt additional.fields.value.string_value O campo de registro bruto properties.tokenIssuedAt é copiado para o campo do UDM, em que a chave é tokenIssuedAt.
properties.userAgent network.http.user_agent O campo de registro bruto properties.userAgent é copiado para o campo do UDM.
properties.userId principal.user.userid O campo de registro bruto properties.userId é copiado para o campo do UDM.
properties.wids security_result.detection_fields.value O campo de registro bruto properties.wids é copiado para o campo do UDM, em que a chave é wids.
resourceId target.resource.attribute.labels.value O campo de registro bruto resourceId é copiado para o campo do UDM, em que a chave é Resource ID.
resultSignature additional.fields.value.string_value O campo de registro bruto resultSignature é copiado para o campo do UDM, em que a chave é resultSignature.
time metadata.event_timestamp O campo de registro bruto time é analisado e convertido em um carimbo de data/hora e copiado para o campo do UDM. O campo do UDM event.idm.read_only_udm.metadata.event_type é definido como "NETWORK_HTTP" se has_principal for verdadeiro e network.http não estiver vazio, "STATUS_UPDATE" se has_principal for verdadeiro e network.http estiver vazio ou "GENERIC_EVENT" caso contrário. O campo do UDM é definido como "Microsoft Graph". O campo do UDM é definido como "Microsoft".

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