Coletar registros do Progress MOVEit Transfer

Compatível com:

Neste documento, explicamos como ingerir registros do Progress MOVEit Transfer no Google Security Operations usando o Bindplane.

O Progress MOVEit Transfer é uma solução de transferência de arquivos gerenciada (MFT, na sigla em inglês) que oferece transferências de arquivos seguras e criptografadas usando protocolos como HTTPS, FTPS e SFTP. Ele oferece registros de auditoria à prova de adulteração, controles de acesso baseados em função e suporte à conformidade com regulamentações como HIPAA, PCI DSS e GDPR. O MOVEit Transfer registra todas as atividades de transferência de arquivos, eventos de autenticação de usuários e ações administrativas no banco de dados de auditoria.

Antes de começar

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

  • Uma instância do Google SecOps
  • Windows Server 2016 ou mais recente ou host Linux com systemd
  • Conectividade de rede entre o agente do Bindplane e o servidor do Progress MOVEit Transfer
  • Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.
  • Acesso de nível SysAdmin ao console de administração da Web do Progress MOVEit Transfer
  • Porta UDP 514 (ou a porta syslog escolhida) aberta do servidor do MOVEit Transfer para o host do agente do BindPlane

Receber credenciais do Google SecOps para o agente do Bindplane

Para autenticar o agente do Bindplane no Google SecOps, escolha um dos seguintes métodos:

  • Novas implantações: use a API Chronicle (opção 1).
  • Implantações legadas: continue usando o arquivo de autenticação de ingestão (opção 2) até que a API Ingestion seja desativada em 20 de julho de 2027.
  1. Faça login no console doGoogle Cloud e selecione o projeto do Google Cloud vinculado à sua instância do Google SecOps.
  2. Acesse IAM e administrador > Contas de serviço.
  3. Clique em Criar conta de serviço.
  4. Informe os seguintes detalhes de configuração:
    • Nome da conta de serviço: insira um nome para a conta (por exemplo, bindplane-ingest).
    • Descrição da conta de serviço: insira uma descrição (por exemplo, Bindplane agent log ingestion).
  5. Clique em Criar e continuar.
  6. Na seção Conceder a essa conta de serviço acesso ao projeto, clique em Selecionar um papel e escolha Editor do Chronicle.
  7. Clique em Continuar e depois em Concluído.
  8. Clique na conta de serviço que você criou e acesse a guia Chaves.
  9. Clique em Adicionar chave > Criar nova chave.
  10. Selecione JSON e clique em Criar. O download do arquivo de chave é feito no seu computador.
  11. Salve o arquivo de chave como ingestion-auth.json no diretório do coletor do BindPlane (/opt/observiq-otel-collector/ingestion-auth.json no Linux ou C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json no Windows) ou atualize creds_file_path em config.yaml para corresponder ao caminho em que você o salvou.
  12. Acesse IAM e administrador > Configurações e copie o Número do projeto. Você vai precisar dele para configurar o exportador.

Opção 2: fazer o download do arquivo de autenticação de ingestão (legado)

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações > Gerenciamento de dados > Agentes de coleta. Se você estiver em uma plataforma somente SIEM, acesse Configurações > Agentes de coleta.
  3. Faça o download do arquivo de autenticação de ingestão.
  4. Salve o arquivo com segurança no sistema em que o agente do Bindplane será instalado.

Receber o ID de cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações > Administração > Perfil. Se você estiver em uma plataforma somente SIEM, acesse Configurações > Perfil.
  3. Copie e salve o ID de cliente na seção Detalhes da organização.

Instalar o agente do BindPlane

Instale o agente do Bindplane no seu sistema operacional Windows ou Linux de acordo com as instruções a seguir.

Instalação do Windows

  1. Abra o Prompt de comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sc query observiq-otel-collector
    

    O serviço precisa aparecer como RUNNING.

Instalação do Linux

  1. Abra um terminal com privilégios de raiz ou sudo.
  2. Execute este comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sudo systemctl status observiq-otel-collector
    

    O serviço precisa aparecer como active (running).

Outros recursos de instalação

Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do BindPlane.

Configurar o agente do Bindplane para ingerir o syslog e enviar ao Google SecOps

Localize o arquivo de configuração.

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Editar o arquivo de configuração

  • Substitua todo o conteúdo de config.yaml pela seguinte configuração:

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/moveit_transfer:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '<CREDS_FILE_PATH>'
        customer_id: '<CUSTOMER_ID>'
        endpoint: chronicle.googleapis.com
        log_type: IPSWITCH_MOVEIT_TRANSFER
        raw_log_field: body
        ingestion_labels:
          log_source: moveit_transfer
    
    service:
      pipelines:
        logs/moveit_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/moveit_transfer
    

Parâmetros de configuração

Substitua os seguintes marcadores de posição.

Configuração do exportador:

  • <CREDS_FILE_PATH>: caminho completo para o arquivo de chave JSON da conta de serviço (opção 1):
    • Linux: /opt/observiq-otel-collector/ingestion-auth.json
    • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
  • <CUSTOMER_ID>: ID de cliente do Google SecOps copiado anteriormente
  • location: substitua <LOCATION> pela região da sua instância do Google SecOps (por exemplo, us, europe ou asia-southeast1). O exportador prefixa chronicle.googleapis.com com esse valor. Consulte Endpoints regionais para ver a lista completa.
  • project: substitua <PROJECT_NUMBER> pelo número do projeto em IAM e administrador > Configurações.
  • endpoint: mantenha definido como chronicle.googleapis.com.

  • Exemplo de configuração

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/moveit_transfer:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: 'a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6'
        endpoint: chronicle.googleapis.com
        log_type: IPSWITCH_MOVEIT_TRANSFER
        raw_log_field: body
        ingestion_labels:
          log_source: moveit_transfer
    
    service:
      pipelines:
        logs/moveit_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/moveit_transfer
    

Exportador da API de ingestão legada

  • Se você usar o arquivo de autenticação de ingestão da Opção 2, substitua o bloco exporters pelo seguinte. Defina creds_file_path como o caminho para o arquivo de autenticação de ingestão e, se a instância estiver fora dos EUA, substitua malachiteingestion-pa.googleapis.com pelo endpoint regional (por exemplo, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/moveit_transfer:
        compression: gzip
        creds_file_path: '<CREDS_FILE_PATH>'
        customer_id: '<CUSTOMER_ID>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: IPSWITCH_MOVEIT_TRANSFER
        raw_log_field: body
        ingestion_labels:
          log_source: moveit_transfer
    

Salve o arquivo de configuração.

Depois de editar, salve o arquivo: * Linux: pressione Ctrl+O, depois Enter e, em seguida, Ctrl+X * Windows: clique em Arquivo > Salvar

Reinicie o agente do BindPlane para aplicar as mudanças:

Para reiniciar o agente do BindPlane no Linux, faça o seguinte:

  1. Execute este comando:

    sudo systemctl restart observiq-otel-collector
    
  2. Verifique se o serviço está em execução:

    sudo systemctl status observiq-otel-collector
    
  3. Verifique se há erros nos registros:

    sudo journalctl -u observiq-otel-collector -f
    

Para reiniciar o agente do Bindplane no Windows, faça o seguinte:

  1. Escolha uma das seguintes opções:

    • Prompt de comando ou PowerShell como administrador:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Console de serviços:

      1. Pressione Win+R, digite services.msc e pressione Enter.
      2. Localize o coletor do OpenTelemetry da observIQ.
      3. Clique com o botão direito do mouse e selecione Reiniciar.
      4. Verifique se o serviço está em execução:

        sc query observiq-otel-collector
        
      5. Verifique se há erros nos registros:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configurar o encaminhamento de syslog do Progress MOVEit Transfer

Para configurar o MOVEit Transfer para encaminhar entradas de registro de auditoria ao agente do Bindplane via syslog:

  1. Faça login no console de administração da Web do MOVEit Transfer como um usuário com permissões de SysAdmin.
  2. Acesse CONFIGURAÇÕES > Sistema > Auditoria > Syslog. A página Configure Syslog Settings é exibida.
  3. Na seção Geração de registros do Syslog, selecione Ativado. Quando ativada, cada entrada de registro de auditoria é enviada ao host de syslog especificado e ao banco de dados de auditoria do MOVEit Transfer.
  4. No campo Syslog Host, insira o endereço IP ou o nome do host do agente do BindPlane (por exemplo, 192.168.1.100).
  5. No campo Porta do Syslog, digite 514. Se esse campo for deixado em branco, ele vai reverter para a porta padrão 514.

  6. No menu suspenso Syslog Facility, selecione o recurso em que as mensagens do syslog do MOVEit Transfer vão aparecer no host do syslog remoto. O valor padrão é FTP. Os seguintes recursos padrão do syslog estão disponíveis:

    • KERN
    • USUÁRIO
    • MAIL
    • DAEMON
    • AUTH
    • SYSLOG
    • LPR
    • NOTÍCIAS
    • UUCP
    • CRON
    • AUTHPRIV
    • FTP (padrão)
    • LOCAL0 a LOCAL7
  7. Clique em Alterar configurações de registro de alterações para salvar a configuração.

  8. Clique em Enviar mensagem de teste do Syslog para enviar uma mensagem de teste ao host do agente do BindPlane especificado. Como a implementação do BSD Syslog é baseada em UDP, verifique manualmente se a mensagem de teste chegou conferindo os registros do agente do BindPlane.

  9. Verifique se a mensagem de teste foi recebida pelo agente do BindPlane:

    • Linux:

      sudo journalctl -u observiq-otel-collector -f
      
    • Windows:

      type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
      

Requisitos de firewall

Verifique se a seguinte regra de firewall está em vigor para permitir o tráfego de syslog do MOVEit Transfer para o agente do BindPlane:

Direção Protocolo Origem Destino Porta
Saída do MOVEit Transfer UDP IP do servidor do MOVEit Transfer IP do host do agente do BindPlane 514

Tabela de mapeamento de UDM

Campo de registro mapeamento de UDM Lógica
column1 metadata.collected_timestamp Convertido usando padrões de correspondência de data: d/M/aaaa H:mm:ss A, M/d/aaaa H:mm:ss A, MM/dd/aaaa HH:mm:ss A
column1 metadata.event_timestamp Convertido usando padrões de correspondência de data: d/M/aaaa H:mm:ss A, M/d/aaaa H:mm:ss A, MM/dd/aaaa HH:mm:ss A
column2 security_result.action_details Valor copiado diretamente
column3 target.hostname, target.asset.hostname Valor copiado diretamente da coluna 3
column4 principal.ip, principal.asset.ip Extraído da coluna 4 usando o padrão grok para IP
column6 target.file.full_path Concatenado de folderPath e fileName se ambos estiverem presentes, caso contrário, apenas de fileName
column7 target.file.full_path
column15 target.file.full_path
column7 target.user.email_addresses Mesclado se column2 == file_sentemail
column10 metadata.description Valor copiado diretamente
column11 metadata.product_event_type Valor copiado diretamente se não for None
column12 target.ip, target.asset.ip Extraído da coluna 12 usando o padrão grok para IP
column16 target.file.full_path Concatenado de folderPath e fileName se ambos estiverem presentes, caso contrário, apenas de fileName
column23 target.file.full_path
column19 target.user.user_display_name Valor copiado diretamente se column2 == file_sentemail e column8 == sender, caso contrário, para o usuário de destino
event_received_time metadata.collected_timestamp Convertido usando padrões de correspondência de data: UNIX_MS, dd/MM/yyyy HH:mm:ss, yyyy-MM-dd HH:mm:ss, MM/dd/yyyy HH:mm:ss A, yyyy/MM/dd HH:mm:ss, RFC 3339, yyyy-MM-ddTHH:mm:ss
timestamp metadata.event_timestamp Convertido usando padrões de correspondência de data: MMM d HH:mm:ss, MMM dd HH:mm:ss, ISO8601, yyyy-MM-dd HH:mm:ss, yyyy-MM-dd HH:mm:ss Z, MM/dd/yyyy HH:mm:ss A, yy-MM-dd HH:mm:ss, RFC 3339, yyyy-MM-ddTHH:mm:ss
prin_ip principal.ip, principal.asset.ip Valor copiado diretamente
AgentVersion metadata.product_version Valor copiado diretamente
principal_host principal.hostname, principal.asset.hostname Valor copiado diretamente
Nome de usuário principal.user.userid Valor copiado diretamente
company_name principal.user.company_name Valor copiado diretamente
ID target.process.pid Valor copiado diretamente
InstID metadata.product_log_id Valor copiado diretamente
FileID target.resource.attribute.labels Mesclado como additional_id_2 com a chave FileID e o valor de FileID
FolderID target.resource.attribute.labels Mesclado como additional_id_3 com a chave FolderID e o valor de FolderID
FolderPath target.file.full_path Concatenado de FolderPath e FileName se ambos estiverem presentes, caso contrário, de FolderPath
FileName target.file.full_path
FileName target.resource.attribute.labels Mesclado como nome de arquivo com a chave FileName e o valor de FileName
host principal.hostname, principal.asset.hostname Valor copiado diretamente
log_level security_result.severity Defina como INFORMATIONAL se for INFO ou DEBUG, ERROR se for ERROR
source_module_name observer.resource.attribute.labels Mesclado como source_module_label com a chave source_module_name e o valor de source_module_name
source_module_type observer.application Valor copiado diretamente
log_msg metadata.description Valor de log_msg se http_method != GET e file_path estiver vazio, caso contrário, log_desc, caso contrário, description, caso contrário, Message
log_desc metadata.description
descrição metadata.description
Mensagem metadata.description
porta principal.port Valor copiado diretamente, convertido em número inteiro
tgtport target.port Valor copiado diretamente, convertido em número inteiro
pacote principal.process.command_line Valor copiado diretamente
srcip principal.ip, principal.asset.ip Valor copiado diretamente
nome de usuário principal.user.userid Valor copiado diretamente
versão metadata.product_version Valor copiado diretamente
http_method network.http.method Valor copiado diretamente
ação security_result.action_details Valor copiado diretamente
resumo security_result.summary Valor copiado diretamente
security_result security_result Mesclado diretamente
tgtip target.ip, target.asset.ip Valor copiado diretamente
application_proto network.application_protocol Em maiúsculas e copiado diretamente
url network.http.referral_url Valor copiado diretamente
status_code network.http.response_code Valor copiado diretamente, convertido em número inteiro
file_path principal.process.file.full_path Valor copiado diretamente
file_size principal.process.file.size Convertido para uinteger se não for 0
process_id principal.process.pid Valor copiado diretamente
session_id network.session_id Valor copiado diretamente
task_id additional.fields Mesclado como additional_field com a chave TASK_ID e string_value de task_id
AgentBrand metadata.product_event_type Valor copiado diretamente
Parm1 additional.fields Mesclado como additional_field_3 com a chave Parm1 e string_value de Parm1
Parm2 additional.fields Mesclado como additional_field_4 com a chave Parm2 e string_value de Parm2
Erro additional.fields Mesclado como additional_field_5 com a chave Error e string_value de Error
XFerSize target.resource.attribute.labels Mesclado como additional_field_1 com a chave XFerSize e o valor de XFerSize
FolderPath metadata.event_type Defina como FILE_DELETION se FolderPath e action_performed corresponderem a Delete File, NETWORK_HTTP se tgtip ou host e application_proto == HTTP, USER_LOGIN se Username ou username, STATUS_UPDATE se tgtip ou host ou principal_host ou IPAddress, caso contrário, GENERIC_EVENT
tgtip metadata.event_type
host metadata.event_type
principal_host metadata.event_type
IPAddress metadata.event_type
Nome de usuário metadata.event_type
nome de usuário metadata.event_type
tgtip metadata.event_type Defina como USER_LOGIN se column2 == sec_signon e tgtip ou tar_host, USER_LOGOUT se sec_signoff e tgtip ou tar_host, FILE_UNCATEGORIZED se folder_add, FILE_CREATION se file_upload ou download e tgtip e is_tgt_file_present, FILE_DELETION se file_delete e srcip e is_tgt_file_present, FILE_MODIFICATION se file_rename, FILE_UNCATEGORIZED se file_dlhashchk, EMAIL_TRANSACTION se file_sentemail e useremail, STATUS_UPDATE se srcip, caso contrário, GENERIC_EVENT
tar_host metadata.event_type
srcip metadata.event_type
is_tgt_file_present metadata.event_type
column2 metadata.event_type
useremail metadata.event_type
security_result metadata.event_type
extensions.auth.type extensions.auth.type Defina como MACHINE para eventos de login/logout.
metadata.vendor_name metadata.vendor_name Defina como "IPS".
metadata.product_name metadata.product_name Defina como "IPSWITCH MOVEIT TRANSFER"
target_application event.idm.read_only_udm.target.application Mapeado do registro de alterações
product_event event.idm.read_only_udm.metadata.product_event_type Mapeado do registro de alterações
dstip event.idm.read_only_udm.target.ip e event.idm.read_only_udm.target.asset.ip Mapeado do registro de alterações
AdminTrust event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
Permission event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
log_status event.idm.read_only_udm.security_result.action.details Mapeado do registro de alterações
srcip event.idm.read_only_udm.principal.ip e event.idm.read_only_udm.principal.asset.ip Mapeado do registro de alterações
EventReceivedTime event.timestamp Mapeado do registro de alterações
SourceModuleName observer.resource.attribute.labels Mapeado do registro de alterações
SourceModuleType observer.application Mapeado do registro de alterações
SourceName metadata.product_event_type Mapeado do registro de alterações
Severity security_result. Mapeado do registro de alterações
Hostname principal.hostname Mapeado do registro de alterações
Channel security_result.about.resource.attribute.labels Mapeado do registro de alterações
AgentVersion metadata.version Mapeado do registro de alterações

Registro de alterações

Confira o registro de alterações deste analisador

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