Coletar registros de atividade do Microsoft Graph
Visão geral
Esse analisador extrai campos dos registros de atividades do Microsoft Graph, transformando-os no modelo de dados unificado (UDM). Ele inicializa campos de UDM, analisa o payload, extrai carimbos de data/hora, mapeia várias propriedades para campos de 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
- No console do Azure, pesquise contas de armazenamento.
- Clique em Criar.
- 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.
- Performance: selecione o nível de performance 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.
- Clique em Revisar + criar.
- Revise a visão geral da conta e clique em Criar.
- Na página Visão geral da conta de armazenamento, selecione o submenu Chaves de acesso em Segurança + rede.
- Clique em Mostrar ao lado de key1 ou key2.
- Clique em Copiar para a área de transferência para copiar a chave.
Salve a chave em um local seguro para referência futura.
Na página Visão geral da conta de armazenamento, selecione o submenu Endpoints em Configurações.
Clique em Copiar para a área de transferência para copiar o URL do endpoint do serviço de blob (por exemplo, https://
.blob.core.windows.net ).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 uma conta de armazenamento
- No console do Azure, pesquise Entra ID.
- Selecione Monitoring > Configurações de diagnóstico.
- Clique em + Adicionar configuração de diagnóstico.
- Dê um nome exclusivo à configuração (por exemplo, ms-graph-activity).
- Selecione a categoria MicrosoftGraphActivityLog que você quer exportar para o Google SecOps.
- Em Detalhes do destino, selecione Arquivar em uma conta de armazenamento.
- Selecione sua assinatura e a conta de armazenamento criada na etapa anterior.
Clique em Salvar.
Como configurar os registros de atividades do Microsoft Graph
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome, por exemplo, Registros de atividades do Microsoft Graph.
- Selecione Microsoft Azure Blob Storage V2 como o Tipo de origem.
- Selecione Registros de atividade do Microsoft Graph como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
URI do Azure: o URL do endpoint do blob.
ENDPOINT_URL/BLOB_NAMESubstitua:
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 da fonte: 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 é de 180 dias.
Chave compartilhada: a chave de acesso ao Azure Blob Storage.
Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Registros de amostra de registros de atividades do Microsoft Graph compatíveis
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 da 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 da 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 da 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 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 da 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 da UDM, em que a chave é atContent. |
properties.clientAuthMethod |
extensions.auth.auth_details |
Com base no valor de properties.clientAuthMethod, o campo UDM é definido como "Cliente público" (0), "ID do cliente/Chave secreta 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 da 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 da 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 da UDM. |
properties.ipAddress |
principal.ip |
O endereço IP do campo de registro bruto properties.ipAddress é extraído e copiado para o campo da 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 da 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 sem sinal e copiado para o campo da 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 da UDM. |
properties.roles |
additional.fields.value.string_value |
O campo de registro bruto properties.roles é copiado para o campo da UDM, em que a chave é roles. |
properties.scopes |
additional.fields.value.string_value |
O campo de registro bruto properties.scopes é copiado para o campo da UDM, em que a chave é Scopes. |
properties.servicePrincipalId |
principal.user.userid |
O campo de registro bruto properties.servicePrincipalId é copiado para o campo da 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 da 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 da UDM, em que a chave é wids. |
resourceId |
target.resource.attribute.labels.value |
O campo de registro bruto resourceId é copiado para o campo da UDM, em que a chave é Resource ID. |
resultSignature |
additional.fields.value.string_value |
O campo de registro bruto resultSignature é copiado para o campo da 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 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 UDM está definido como "Microsoft Graph". O campo UDM está definido como "Microsoft". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.