Coletar registros do Progress MOVEit Transfer
Este documento explica como ingerir registros do Progress MOVEit Transfer no Google Security Operations usando o Bindplane.
O Progress MOVEit Transfer é uma solução de transferência gerenciada de arquivos (MFT, na sigla em inglês) que oferece transferências de arquivos criptografadas e seguras usando protocolos como HTTPS, FTPS e SFTP. Ele oferece registro de auditoria à prova de violação, controles de acesso com base em funções 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 você 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 administrador de sistema ao console de administração da Web do Progress MOVEit Transfer.
- Porta UDP 514 (ou a porta syslog escolhida) aberta do servidor MOVEit Transfer para o host do agente Bindplane
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Baixe o arquivo de autenticação de ingestão. Salve o arquivo com segurança no sistema em que o Bindplane será instalado.
Receber o ID de cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do 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
- Abra o prompt de comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sc query observiq-otel-collectorO serviço vai aparecer como EM EXECUÇÃO.
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
Execute este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sudo systemctl status observiq-otel-collectorO serviço vai aparecer como ativo (em execução).
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 syslog e enviar ao Google SecOps
Localizar o arquivo de configuração
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Editar o arquivo de configuração
Substitua todo o conteúdo de
config.yamlpela seguinte configuração:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/moveit_transfer: compression: gzip creds_file_path: '<CREDS_FILE_PATH>' customer_id: '<CUSTOMER_ID>' endpoint: <REGION_ENDPOINT> 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 autenticação de ingestão:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
<CUSTOMER_ID>: ID de cliente do Google SecOps copiado anteriormente<REGION_ENDPOINT>: URL do endpoint regional:- EUA:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Ásia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulte a lista completa em Endpoints regionais.
- EUA:
Exemplo de configuração
receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/moveit_transfer: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6' endpoint: malachiteingestion-pa.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
Salvar o arquivo de configuração
Depois de editar, salve o arquivo:
* Linux: pressione Ctrl+O, Enter e 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:
Execute este comando:
sudo systemctl restart observiq-otel-collectorVerifique se o serviço está em execução:
sudo systemctl status observiq-otel-collectorVerifique se há erros nos registros:
sudo journalctl -u observiq-otel-collector -f
Para reiniciar o agente do Bindplane em Windows, faça o seguinte:
Escolha uma das seguintes opções:
Prompt de comando ou PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collectorConsole de serviços:
- Pressione
Win+R, digiteservices.msce pressione Enter. - Localize o Coletor do OpenTelemetry da observIQ.
- Clique com o botão direito do mouse e selecione Reiniciar.
Verifique se o serviço está em execução:
sc query observiq-otel-collectorVerifique se há erros nos registros:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Pressione
Configurar o encaminhamento do syslog do Progress MOVEit Transfer
Para configurar o MOVEit Transfer para encaminhar entradas de registro de auditoria ao agente do Bindplane via syslog:
- Faça login no console de administração da Web do MOVEit Transfer como um usuário com permissões de SysAdmin.
- Acesse CONFIGURAÇÕES > Sistema > Auditoria > Syslog. A página Configurar configurações do Syslog é exibida.
- Na seção Geração de registros do Syslog, selecione Ativado. Quando ativado, cada entrada de registro de auditoria é enviada ao host syslog especificado e ao banco de dados de auditoria do MOVEit Transfer.
- No campo Host do Syslog, insira o endereço IP ou o nome do host do host do agente do Bindplane (por exemplo,
192.168.1.100). No campo Porta Syslog, insira
514. Se esse campo for deixado em branco, ele vai voltar para a porta padrão514.No menu suspenso Syslog Facility, selecione a instalação em que as mensagens do syslog do MOVEit Transfer vão aparecer no host syslog remoto. O valor padrão é FTP. As seguintes instalações padrão do syslog estão disponíveis:
- KERN
- USUÁRIO
- DAEMON
- AUTH
- SYSLOG
- LPR
- NOTÍCIAS
- UUCP
- CRON
- AUTHPRIV
- FTP (padrão)
- LOCAL0 a LOCAL7
Clique em Mudar configurações de geração de registros para salvar a configuração.
Clique em Enviar mensagem de syslog de teste para enviar uma mensagem de teste ao host do agente 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.
Verifique se a mensagem de teste foi recebida pelo agente do Bindplane:
Linux:
sudo journalctl -u observiq-otel-collector -fWindows:
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 do syslog do MOVEit Transfer para o agente do Bindplane:
| Direção | Protocolo | Origem | Destino | Porta |
|---|---|---|---|---|
| De saída do MOVEit Transfer | UDP | IP do servidor 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/yyyy H:mm:ss A, M/d/yyyy H:mm:ss A, MM/dd/yyyy HH:mm:ss A |
| column1 | metadata.event_timestamp | Convertido usando padrões de correspondência de data: d/M/yyyy H:mm:ss A, M/d/yyyy H:mm:ss A, MM/dd/yyyy HH:mm:ss A |
| column2 | security_result.action_details | Valor copiado diretamente |
| column3 | target.hostname, target.asset.hostname | Valor copiado diretamente de column3 |
| column4 | principal.ip, principal.asset.ip | Extraído de column4 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 | O valor é copiado diretamente se não for "None" |
| column12 | target.ip, target.asset.ip | Extraído da coluna12 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 | O 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, aaaa-MM-dd HH:mm:ss, aaaa-MM-dd HH:mm:ss Z, MM/dd/aaaa HH:mm:ss A, aa-MM-dd HH:mm:ss, RFC 3339, aaaa-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 do arquivo com a chave FileName e o valor de FileName |
| host | principal.hostname, principal.asset.hostname | Valor copiado diretamente |
| log_level | security_result.severity | Definido como "INFORMATIONAL" se INFO ou DEBUG, "ERROR" se ERROR |
| source_module_name | observer.resource.attribute.labels | Unido 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, description ou 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 | Unido 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 | Unido como additional_field_1 com a chave XFerSize e o valor de XFerSize |
| FolderPath | metadata.event_type | Definido como FILE_DELETION se FolderPath e action_performed corresponderem a "Excluir arquivo", 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 | Definido 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 | Definido 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 mudanças |
product_event |
event.idm.read_only_udm.metadata.product_event_type |
Mapeado do registro de mudanças |
dstip |
event.idm.read_only_udm.target.ip e event.idm.read_only_udm.target.asset.ip |
Mapeado do registro de mudanças |
AdminTrust |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
Permission |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de mudanças |
log_status |
event.idm.read_only_udm.security_result.action.details |
Mapeado do registro de mudanças |
srcip |
event.idm.read_only_udm.principal.ip e event.idm.read_only_udm.principal.asset.ip |
Mapeado do registro de mudanças |
EventReceivedTime |
event.timestamp |
Mapeado do registro de mudanças |
SourceModuleName |
observer.resource.attribute.labels |
Mapeado do registro de mudanças |
SourceModuleType |
observer.application |
Mapeado do registro de mudanças |
SourceName |
metadata.product_event_type |
Mapeado do registro de mudanças |
Severity |
security_result. |
Mapeado do registro de mudanças |
Hostname |
principal.hostname |
Mapeado do registro de mudanças |
Channel |
security_result.about.resource.attribute.labels |
Mapeado do registro de mudanças |
AgentVersion |
metadata.version |
Mapeado do registro de mudanças |
Registro de alterações
Ver o registro de alterações deste analisador
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.