Recopila registros de progreso de MOVEit Transfer
En este documento, se explica cómo transferir registros de Progress MOVEit Transfer a Google Security Operations con Bindplane.
Progress MOVEit Transfer es una solución de transferencia de archivos administrada (MFT) que proporciona transferencias de archivos seguras y encriptadas con protocolos como HTTPS, FTPS y SFTP. Ofrece registros de auditoría a prueba de manipulaciones, controles de acceso basados en roles y asistencia para el cumplimiento de reglamentaciones como HIPAA, PCI DSS y RGPD. MOVEit Transfer registra toda la actividad de transferencia de archivos, los eventos de autenticación de usuarios y las acciones administrativas en su base de datos de auditoría.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Una instancia de Google SecOps
- Windows Server 2016 o versiones posteriores, o host de Linux con
systemd - Conectividad de red entre el agente de Bindplane y el servidor de Progress MOVEit Transfer
- Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.
- Acceso a nivel de administrador del sistema a la Consola del administrador web de Progress MOVEit Transfer
- El puerto UDP 514 (o el puerto syslog que elijas) debe estar abierto desde el servidor de MOVEit Transfer hasta el host del agente de Bindplane.
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
- Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.
Obtén el ID de cliente de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instala el agente de Bindplane
Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.
Instalación en Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el comando siguiente:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietEspera a que se complete la instalación.
Ejecuta el siguiente comando para verificar la instalación:
sc query observiq-otel-collectorEl servicio debe mostrarse como RUNNING.
Instalación en Linux
- Abre una terminal con privilegios de raíz o sudo.
Ejecuta el comando siguiente:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shEspera a que se complete la instalación.
Ejecuta el siguiente comando para verificar la instalación:
sudo systemctl status observiq-otel-collectorEl servicio debería mostrarse como activo (en ejecución).
Recursos de instalación adicionales
Para obtener más opciones de instalación y solucionar problemas, consulta la guía de instalación del agente de Bindplane.
Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps
Ubica el archivo de configuración
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edita el archivo de configuración
Reemplaza todo el contenido de
config.yamlpor la siguiente configuración: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 configuración
Reemplaza los siguientes marcadores de posición.
Configuración del exportador:
<CREDS_FILE_PATH>: Ruta de acceso completa al archivo de autenticación de la transferencia:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
<CUSTOMER_ID>: ID de cliente de Google SecOps que se copió antes<REGION_ENDPOINT>: URL del extremo regional:- EE.UU.:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulta Extremos regionales para obtener la lista completa.
- EE.UU.:
Configuración de ejemplo
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
Cómo guardar el archivo de configuración
Después de editarlo, guarda el archivo:
* Linux: Presiona Ctrl+O, luego Enter y, por último, Ctrl+X.
* Windows: Haz clic en Archivo > Guardar.
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de Bindplane en Linux, haz lo siguiente:
Ejecuta el comando siguiente:
sudo systemctl restart observiq-otel-collectorVerifica que el servicio esté en ejecución:
sudo systemctl status observiq-otel-collectorRevisa los registros en busca de errores:
sudo journalctl -u observiq-otel-collector -f
Para reiniciar el agente de Bindplane en Windows, haz lo siguiente:
Elige una de las siguientes opciones:
Símbolo del sistema o PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collectorConsola de Servicios:
- Presiona
Win+R, escribeservices.mscy presiona Intro. - Busca observIQ OpenTelemetry Collector.
- Haz clic con el botón derecho y selecciona Reiniciar.
Verifica que el servicio esté en ejecución:
sc query observiq-otel-collectorRevisa los registros en busca de errores:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Presiona
Cómo configurar el reenvío de Syslog de Progress MOVEit Transfer
Para configurar MOVEit Transfer de modo que reenvíe las entradas del registro de auditoría al agente de BindPlane a través de syslog, haz lo siguiente:
- Accede a la Consola del administrador web de MOVEit Transfer como un usuario con permisos de SysAdmin.
- Ve a CONFIGURACIÓN > Sistema > Auditoría > Syslog. Se mostrará la página Configure Syslog Settings.
- En la sección Registro de Syslog, selecciona Habilitado. Cuando se habilita, cada entrada de registro de auditoría se envía al host de syslog especificado y a la base de datos de auditoría de MOVEit Transfer.
- En el campo Syslog Host, ingresa la dirección IP o el nombre de host del host del agente de Bindplane (por ejemplo,
192.168.1.100). En el campo Puerto de Syslog, ingresa
514. Si este campo se deja en blanco, se revierte al puerto predeterminado514.En el menú desplegable Syslog Facility, selecciona la instalación en la que aparecerán los mensajes de registro del sistema de MOVEit Transfer en el host de registro del sistema remoto. El valor predeterminado es FTP. Están disponibles los siguientes registros estándar de syslog:
- KERN
- USUARIO
- DAEMON
- AUTH
- SYSLOG
- LPR
- NOTICIAS
- UUCP
- CRON
- AUTHPRIV
- FTP (predeterminado)
- LOCAL0 a LOCAL7
Haz clic en Change Logging Settings para guardar la configuración.
Haz clic en Send Test Syslog Message para enviar un mensaje de prueba al host del agente de Bindplane especificado. Debido a que la implementación de Syslog de BSD se basa en UDP, verifica manualmente que el mensaje de prueba haya llegado. Para ello, consulta los registros del agente de Bindplane.
Verifica que el agente de Bindplane haya recibido el mensaje de prueba:
Linux:
sudo journalctl -u observiq-otel-collector -fWindows:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Requisitos del firewall
Asegúrate de que la siguiente regla de firewall esté configurada para permitir el tráfico de syslog desde MOVEit Transfer al agente de Bindplane:
| Dirección | Protocolo | Origen | Destino | Puerto |
|---|---|---|---|---|
| Saliente de MOVEit Transfer | UDP | IP del servidor de MOVEit Transfer | IP del host del agente de Bindplane | 514 |
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
| column1 | metadata.collected_timestamp | Se convierte con patrones de coincidencia de fechas: 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 | Se convierte con patrones de coincidencia de fechas: 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 | El valor se copió directamente. |
| column3 | target.hostname, target.asset.hostname | El valor se copió directamente de la columna3. |
| column4 | principal.ip, principal.asset.ip | Se extrajo de la columna 4 con el patrón de grok para IP |
| column6 | target.file.full_path | Se concatena desde folderPath y fileName si ambos están presentes; de lo contrario, solo desde fileName. |
| column7 | target.file.full_path | |
| column15 | target.file.full_path | |
| column7 | target.user.email_addresses | Se combina si column2 == file_sentemail |
| column10 | metadata.description | El valor se copió directamente. |
| column11 | metadata.product_event_type | El valor se copia directamente si no es None. |
| column12 | target.ip, target.asset.ip | Se extrajo de la columna12 con el patrón de grok para IP |
| column16 | target.file.full_path | Se concatena desde folderPath y fileName si ambos están presentes; de lo contrario, solo desde fileName. |
| column23 | target.file.full_path | |
| column19 | target.user.user_display_name | El valor se copia directamente si column2 == file_sentemail y column8 == sender; de lo contrario, se copia para el usuario objetivo. |
| event_received_time | metadata.collected_timestamp | Se convirtió con patrones de coincidencia de fechas: UNIX_MS, dd/MM/aaaa HH:mm:ss, aaaa-MM-dd HH:mm:ss, MM/dd/aaaa HH:mm:ss A, aaaa/MM/dd HH:mm:ss, RFC 3339, aaaa-MM-ddTHH:mm:ss |
| timestamp | metadata.event_timestamp | Se convierte con patrones de coincidencia de fechas: 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 | El valor se copió directamente. |
| AgentVersion | metadata.product_version | El valor se copió directamente. |
| principal_host | principal.hostname, principal.asset.hostname | El valor se copió directamente. |
| Nombre de usuario | principal.user.userid | El valor se copió directamente. |
| company_name | principal.user.company_name | El valor se copió directamente. |
| ID | target.process.pid | El valor se copió directamente. |
| InstID | metadata.product_log_id | El valor se copió directamente. |
| FileID | target.resource.attribute.labels | Se combinó como additional_id_2 con la clave FileID y el valor de FileID |
| FolderID | target.resource.attribute.labels | Se combinó como additional_id_3 con la clave FolderID y el valor de FolderID |
| FolderPath | target.file.full_path | Se concatena a partir de FolderPath y FileName si ambos están presentes; de lo contrario, se concatena a partir de FolderPath. |
| Nombre del archivo | target.file.full_path | |
| Nombre del archivo | target.resource.attribute.labels | Se combinó como nombre de archivo con la clave FileName y el valor de FileName |
| host | principal.hostname, principal.asset.hostname | El valor se copió directamente. |
| log_level | security_result.severity | Se establece en INFORMATIONAL si es INFO o DEBUG, y en ERROR si es ERROR. |
| source_module_name | observer.resource.attribute.labels | Se combinó como source_module_label con la clave source_module_name y el valor de source_module_name |
| source_module_type | observer.application | El valor se copió directamente. |
| log_msg | metadata.description | Valor de log_msg si http_method != GET y file_path está vacío; de lo contrario, log_desc, o bien description, o bien Message |
| log_desc | metadata.description | |
| descripción | metadata.description | |
| Mensaje | metadata.description | |
| puerto | principal.port | Valor copiado directamente y convertido en número entero |
| tgtport | target.port | Valor copiado directamente y convertido en número entero |
| paquete | principal.process.command_line | El valor se copió directamente. |
| srcip | principal.ip, principal.asset.ip | El valor se copió directamente. |
| nombre de usuario | principal.user.userid | El valor se copió directamente. |
| versión | metadata.product_version | El valor se copió directamente. |
| http_method | network.http.method | El valor se copió directamente. |
| acción | security_result.action_details | El valor se copió directamente. |
| resumen | security_result.summary | El valor se copió directamente. |
| security_result | security_result | Se combinó directamente |
| tgtip | target.ip, target.asset.ip | El valor se copió directamente. |
| application_proto | network.application_protocol | Se copió directamente en mayúsculas |
| url | network.http.referral_url | El valor se copió directamente. |
| status_code | network.http.response_code | Valor copiado directamente y convertido en número entero |
| file_path | principal.process.file.full_path | El valor se copió directamente. |
| file_size | principal.process.file.size | Se convierte en uinteger si no es 0 |
| process_id | principal.process.pid | El valor se copió directamente. |
| session_id | network.session_id | El valor se copió directamente. |
| task_id | additional.fields | Se combinó como additional_field con la clave TASK_ID y string_value de task_id |
| AgentBrand | metadata.product_event_type | El valor se copió directamente. |
| Parm1 | additional.fields | Se combinó como additional_field_3 con la clave Parm1 y string_value de Parm1 |
| Parm2 | additional.fields | Se combinó como additional_field_4 con la clave Parm2 y el valor string_value de Parm2 |
| Error | additional.fields | Se combinó como additional_field_5 con la clave Error y string_value de Error |
| XFerSize | target.resource.attribute.labels | Se combinó como additional_field_1 con la clave XFerSize y el valor de XFerSize. |
| FolderPath | metadata.event_type | Se establece en FILE_DELETION si FolderPath y action_performed coinciden con Delete File, NETWORK_HTTP si tgtip o host y application_proto == HTTP, USER_LOGIN si Username o username, STATUS_UPDATE si tgtip o host o principal_host o IPAddress, de lo contrario, GENERIC_EVENT |
| tgtip | metadata.event_type | |
| host | metadata.event_type | |
| principal_host | metadata.event_type | |
| IPAddress | metadata.event_type | |
| Nombre de usuario | metadata.event_type | |
| nombre de usuario | metadata.event_type | |
| tgtip | metadata.event_type | Se establece en USER_LOGIN si column2 == sec_signon y tgtip o tar_host, USER_LOGOUT si sec_signoff y tgtip o tar_host, FILE_UNCATEGORIZED si folder_add, FILE_CREATION si file_upload o download y tgtip y is_tgt_file_present, FILE_DELETION si file_delete y srcip y is_tgt_file_present, FILE_MODIFICATION si file_rename, FILE_UNCATEGORIZED si file_dlhashchk, EMAIL_TRANSACTION si file_sentemail y useremail, STATUS_UPDATE si srcip, de lo contrario, 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 | Se establece en MACHINE para los eventos de acceso y cierre de sesión. |
| metadata.vendor_name | metadata.vendor_name | Se estableció en "IPS". |
| metadata.product_name | metadata.product_name | Establece el valor en "IPSWITCH MOVEIT TRANSFER". |
target_application |
event.idm.read_only_udm.target.application |
Se asignó desde el registro de cambios |
product_event |
event.idm.read_only_udm.metadata.product_event_type |
Se asignó desde el registro de cambios |
dstip |
event.idm.read_only_udm.target.ip y event.idm.read_only_udm.target.asset.ip |
Se asignó desde el registro de cambios |
AdminTrust |
event.idm.read_only_udm.additional.fields |
Se asignó desde el registro de cambios |
Permission |
event.idm.read_only_udm.additional.fields |
Se asignó desde el registro de cambios |
log_status |
event.idm.read_only_udm.security_result.action.details |
Se asignó desde el registro de cambios |
srcip |
event.idm.read_only_udm.principal.ip y event.idm.read_only_udm.principal.asset.ip |
Se asignó desde el registro de cambios |
EventReceivedTime |
event.timestamp |
Se asignó desde el registro de cambios |
SourceModuleName |
observer.resource.attribute.labels |
Se asignó desde el registro de cambios |
SourceModuleType |
observer.application |
Se asignó desde el registro de cambios |
SourceName |
metadata.product_event_type |
Se asignó desde el registro de cambios |
Severity |
security_result. |
Se asignó desde el registro de cambios |
Hostname |
principal.hostname |
Se asignó desde el registro de cambios |
Channel |
security_result.about.resource.attribute.labels |
Se asignó desde el registro de cambios |
AgentVersion |
metadata.version |
Se asignó desde el registro de cambios |
Registro de cambios
Consulta el registro de cambios de este analizador
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.