Coletar registros do ManageEngine Exchange Reporter Plus

Compatível com:

Este documento explica como configurar o ManageEngine Exchange Reporter Plus para enviar registros ao Google Security Operations usando webhooks.

O ManageEngine Exchange Reporter Plus é uma solução de relatórios, auditoria e monitoramento baseada na Web para ambientes do Microsoft Exchange Server e do Exchange Online. Ele fornece relatórios abrangentes sobre tamanhos de caixa de e-mails, tráfego de e-mail, pastas públicas, registros do Exchange ActiveSync e registros de auditoria para atividades de administrador e mudanças de configuração em implantações híbridas do Exchange.

Antes de começar

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

  • Uma instância do Google SecOps
  • ManageEngine Exchange Reporter Plus instalado e configurado para monitorar o Exchange Server ou o Exchange Online
  • Acesso administrativo ao console da Web do ManageEngine Exchange Reporter Plus
  • Acesso ao console do Google Cloud (para criação de chaves de API)

Criar um feed de webhook no Google SecOps

Criar o feed

  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, ManageEngine Exchange Reporter Plus Logs).
  5. Selecione Webhook como o Tipo de origem.
  6. Selecione ManageEngine Exchange Reporter Plus como o Tipo de registro.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão (opcional): insira \n para dividir eventos de várias linhas.
    • Namespace do recurso: o namespace do recurso
    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed
  9. Clique em Próxima.
  10. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Gerar e salvar a chave secreta

Depois de criar o feed, gere uma chave secreta para autenticação:

  1. Na página de detalhes do feed, clique em Gerar chave secreta.
  2. Uma caixa de diálogo mostra a chave secreta.
  3. Copie e salve a chave secreta com segurança.

Importante: a chave secreta é exibida apenas uma vez e não pode ser recuperada depois. Em caso de perda, será necessário gerar uma nova chave secreta.

Receber o URL do endpoint do feed

  1. Acesse a guia Detalhes do feed.
  2. Na seção Informações do endpoint, copie o URL do endpoint do feed.
  3. O formato do URL é:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    

    ou

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. Salve esse URL para as próximas etapas.

  5. Clique em Concluído.

Criar chave de API do Google Cloud

O Chronicle exige uma chave de API para autenticação. Crie uma chave de API restrita no console do Google Cloud.

Criar a chave de API

  1. Acesse a página "Credenciais" do Console do Google Cloud.
  2. Selecione seu projeto (o projeto associado à sua instância do Chronicle).
  3. Clique em Criar credenciais > Chave de API.
  4. Uma chave de API é criada e mostrada em uma caixa de diálogo.
  5. Clique em Editar chave de API para restringir a chave.

Restringir a chave de API

  1. Na página de configurações da chave de API:
    • Nome: insira um nome descritivo, por exemplo, Chronicle Webhook API Key.
  2. Em Restrições de API:
    1. Selecione Restringir chave.
    2. No menu suspenso Selecionar APIs, pesquise e selecione API Google SecOps (ou API Chronicle).
  3. Clique em Salvar.
  4. Copie o valor da chave de API do campo Chave de API na parte de cima da página.
  5. Salve a chave de API com segurança.

Configurar o webhook do ManageEngine Exchange Reporter Plus

Criar o URL do webhook

  • Combine o URL do endpoint do Chronicle, a chave de API e a chave secreta:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • Exemplo:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
    

Configurar o encaminhamento de registros no Exchange Reporter Plus

  1. Faça login no console da Web do ManageEngine Exchange Reporter Plus como administrador.
  2. Acesse Configurações > Administrador > Configurações gerais > Encaminhador de registros.
  3. Marque a caixa de seleção Ativar encaminhamento de registros.
  4. Clique na guia Webhook.
  5. Informe os seguintes detalhes de configuração:
    • Método HTTP: selecione POST.
    • URL HTTP: cole o URL completo do webhook criado na etapa anterior (o URL do endpoint do Chronicle com a chave de API e a chave secreta anexadas como parâmetros de consulta).
  6. Na seção Configurações avançadas:
    1. Clique em Cabeçalhos de solicitação HTTP.
    2. Adicione o seguinte cabeçalho:
      • Chave: Content-Type
      • Valor: application/json
  7. Clique em Salvar.

Verificar o encaminhamento de registros

  1. Depois de salvar a configuração, o Exchange Reporter Plus vai começar a encaminhar registros de auditoria para o Google SecOps pelo endpoint do webhook.
  2. Faça login no console do Google SecOps e verifique se os registros aparecem na interface Pesquisar com o rótulo de ingestão MANAGE_ENGINE_REPORTER_PLUS.

Configuração do firewall

Verifique se as seguintes regras de firewall estão configuradas.

Saída do servidor do Exchange Reporter Plus:

  • Protocolo: HTTPS (TCP 443)
  • Destino: endpoint regional do Chronicle (malachiteingestion-pa.googleapis.com ou seu endpoint regional)
  • Finalidade: entrega de registros ao Google SecOps via webhook.

Referência de métodos de autenticação

Os feeds de webhook do Chronicle são compatíveis com vários métodos de autenticação. Escolha o método compatível com seu fornecedor.

Se o fornecedor aceitar cabeçalhos HTTP personalizados, use esse método para aumentar a segurança.

  • Formato da solicitação:

    POST <ENDPOINT_URL> HTTP/1.1
    Content-Type: application/json
    x-goog-chronicle-auth: <API_KEY>
    x-chronicle-auth: <SECRET_KEY>
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

Vantagens:

  • A chave de API e o secret não estão visíveis no URL
  • Mais seguro (cabeçalhos não registrados nos registros de acesso ao servidor da Web)
  • Método preferido quando o fornecedor oferece suporte

Método 2: parâmetros de consulta

Se o fornecedor não aceitar cabeçalhos personalizados, adicione as credenciais ao URL.

  • Formato do URL:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • Exemplo:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
    
  • Formato da solicitação:

    POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1
    Content-Type: application/json
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

Desvantagens: - Credenciais visíveis no URL - Podem ser registradas em registros de acesso do servidor da Web - Menos seguras do que os cabeçalhos

Método 3: híbrido (URL + cabeçalho)

Algumas configurações usam a chave de API no URL e a chave secreta no cabeçalho.

  • Formato da solicitação:

    POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1
    Content-Type: application/json
    x-chronicle-auth: <SECRET_KEY>
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

Nomes dos cabeçalhos de autenticação

O Chronicle aceita os seguintes nomes de cabeçalho para autenticação:

Para chave de API:

  • x-goog-chronicle-auth (recomendado)
  • X-Goog-Chronicle-Auth (não diferencia maiúsculas de minúsculas)

Para a chave secreta:

  • x-chronicle-auth (recomendado)
  • X-Chronicle-Auth (não diferencia maiúsculas de minúsculas)

Limites e práticas recomendadas de webhook

Limites de solicitações

Limite Valor
Tamanho máximo da solicitação 4 MB
QPS máximo (consultas por segundo) 15.000
Tempo limite da solicitação 30 segundos
Comportamento de repetição Automático com espera exponencial

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
msg.OrganizationId additional.fields Rótulos mesclados com a chave "OrganizationId" e o valor de msg.OrganizationId; a chave "MailboxGuid" e o valor de msg.MailboxGuid; a chave "RecordType" e o valor de msg.RecordType
msg.MailboxGuid additional.fields
msg.RecordType additional.fields
msg.CreationTime metadata.event_type Definido como o valor de event_type se não estiver vazio. Caso contrário, "USER_UNCATEGORIZED" se msg.Operation == "Update"; "USER_CREATION" se msg.Operation == "Create" e msg.MailboxOwnerUPN não estiver vazio; "USER_UNCATEGORIZED" se msg.Operation == "Create"; "USER_UNCATEGORIZED" se msg.UserId não estiver vazio; "STATUS_UPDATE" se msg.ClientIP não estiver vazio; "GENERIC_EVENT"
msg.Operation metadata.product_event_type Valor copiado diretamente
msg.Id metadata.product_log_id Valor copiado diretamente
msg.ClientVersion metadata.product_version Valor de msg.ClientVersion se não estiver vazio. Caso contrário, msg.Version convertido em string.
msg.Version metadata.product_version
AffectedItems.0.InternetMessageId network.email.mail_id Gsub <
AffectedItems network.email.subject Analisado como JSON, item extraído.Assunto, mesclado se encontrado
msg.ClientInfoString network.http.user_agent Valor de msg.ClientInfoString se não estiver vazio, caso contrário, msg.Client
msg.Client network.http.user_agent
msg.ClientProcessName principal.application Valor copiado diretamente
msg.OriginatingServer principal.hostname Extraído usando o padrão grok, se for bem-sucedido. Caso contrário, o valor será copiado diretamente.
clientIP principal.ip Extraído de msg.ClientIP usando grok
clientPort principal.port Extraído de msg.ClientIP usando grok, convertido em número inteiro.
msg.UserKey principal.user.attribute.labels Defina a chave do rótulo como "UserKey", o valor como msg.UserKey e mescle.
msg.UserType principal.user.attribute.roles Defina roles.name como msg.UserType, mesclado
msg.UserId principal.user.email_addresses Unidas se msg.UserId corresponder à regex de e-mail
msg.UserId principal.user.userid Valor copiado diretamente
msg.MailboxOwnerSid principal.user.windows_sid Valor de msg.MailboxOwnerSid se não estiver vazio. Caso contrário, msg.LogonUserSid
msg.LogonUserSid principal.user.windows_sid
security_result security_result Mesclado do hash security_result
security_result_action security_result.action Combinado de "security_result_action"
msg.ResultStatus security_result.action_details Valor copiado diretamente
msg.RecordType security_result.detection_fields Convertido para string, definido como chave "RecordType", valor como msg.RecordType, mesclado
msg.OrganizationName target.administrative_domain Valor copiado diretamente
msg.DestFolder target.file.full_path Extraiu fileId e filePath usando grok, barras invertidas gsubs, concatenadas como fileId/filePath
host target.hostname Valor copiado diretamente
msg.Folder target.process.parent_process.file.full_path Extraiu parentFileId e parentFilePath usando grok, barras invertidas gsubs, concatenadas como parentFileId/parentFilePath
msg.MailboxOwnerUPN target.user.email_addresses Unidas se corresponderem à regex de e-mail
msg.MailboxOwnerUPN target.user.user_display_name Definir se contém espaço
msg.MailboxOwnerUPN target.user.userid Definido se não for e-mail e não houver espaço
metadata.product_name metadata.product_name Defina como "Manage Engine".
metadata.vendor_name metadata.vendor_name Defina como "Gerenciar o Engine Reporter Plus"

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